diff --git a/mysql-test/r/create_not_windows.result b/mysql-test/r/create_not_windows.result
index 2d7fd30dfddf8602729480630dfecd8727941f30..abe76fd3fbec461b24d5c931428dcce7e5f9984c 100644
--- a/mysql-test/r/create_not_windows.result
+++ b/mysql-test/r/create_not_windows.result
@@ -12,3 +12,20 @@ about:text	CREATE TABLE `about:text` (
   PRIMARY KEY (`_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop table `about:text`;
+use test;
+drop table if exists t1;
+create table t1(a int) engine=myisam;
+insert into t1 values(1);
+"We get an error because the table is in the definition cache"
+create table t1(a int, b int);
+ERROR 42S01: Table 't1' already exists
+"Flush the cache and recreate the table anew to be able to drop it"
+flush tables;
+show open tables like "t%";
+Database	Table	In_use	Name_locked
+create table t1(a int, b int, c int);
+"Try to select from the table. This should not crash the server"
+select count(a) from t1;
+count(a)
+0
+drop table t1;
diff --git a/mysql-test/t/create_not_windows.test b/mysql-test/t/create_not_windows.test
index 71ad9ccd7fe64b93387c158143f78fefadd2f58e..2c1700d9e49119c63119ee2c30ba17fe36cb8120 100644
--- a/mysql-test/t/create_not_windows.test
+++ b/mysql-test/t/create_not_windows.test
@@ -18,3 +18,24 @@ show create table `about:text`;
 drop table `about:text`;
 
 # End of 5.0 tests
+
+#
+# Bug#16532:mysql server assert in debug if table det is removed
+#
+use test;
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+create table t1(a int) engine=myisam;
+insert into t1 values(1);
+--system rm -f $MYSQLTEST_VARDIR/master-data/test/t1.frm
+--echo "We get an error because the table is in the definition cache"
+--error ER_TABLE_EXISTS_ERROR
+create table t1(a int, b int);
+--echo "Flush the cache and recreate the table anew to be able to drop it"
+flush tables;
+show open tables like "t%";
+create table t1(a int, b int, c int);
+--echo "Try to select from the table. This should not crash the server"
+select count(a) from t1;
+drop table t1;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index ccddefab421ab8dfe9be29b5b2d3ede698d9b1f6..098c882f049bb71126d13b31d5becca7b9fa8a34 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -3321,7 +3321,19 @@ bool mysql_create_table_internal(THD *thd,
       my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
       goto unlock_and_end;
     }
-    DBUG_ASSERT(get_cached_table_share(db, alias) == 0);
+    /*
+      We don't assert here, but check the result, because the table could be
+      in the table definition cache and in the same time the .frm could be
+      missing from the disk, in case of manual intervention which deletes
+      the .frm file. The user has to use FLUSH TABLES; to clear the cache.
+      Then she could create the table. This case is pretty obscure and
+      therefore we don't introduce a new error message only for it.
+    */
+    if (get_cached_table_share(db, alias))
+    {
+      my_error(ER_TABLE_EXISTS_ERROR, MYF(0), table_name);
+      goto unlock_and_end;
+    }
   }
 
   /*