aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2006-10-13 04:09:41 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2006-10-13 04:09:41 +0000
commitf19218e50496219b72a5c7ddb62fca4df8980343 (patch)
tree257c51d7abb705650f8b91249be8c8381872aeda /gcc
parentfc6fabdfda0a578edcef2a91400e083d0d6b4c7a (diff)
downloadgcc-f19218e50496219b72a5c7ddb62fca4df8980343.zip
gcc-f19218e50496219b72a5c7ddb62fca4df8980343.tar.gz
gcc-f19218e50496219b72a5c7ddb62fca4df8980343.tar.bz2
re PR c++/29318 (ICE: type_info of pointer to VLA)
PR c++/29318 * rtti.c (get_tinfo_decl): Refuse to create type info objects for variably modified types. PR c++/29318 * g++.dg/ext/vla4.C: New test. From-SVN: r117683
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/rtti.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ext/vla4.C21
4 files changed, 34 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4102503..18958d4 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2006-10-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29318
+ * rtti.c (get_tinfo_decl): Refuse to create type info objects for
+ variably modified types.
+
2006-10-12 Lee Millward <lee.millward@codesourcery.com>
PR c++/27961
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index b4cede4..0cb825d 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -342,11 +342,10 @@ get_tinfo_decl (tree type)
tree name;
tree d;
- if (COMPLETE_TYPE_P (type)
- && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
+ if (variably_modified_type_p (type, /*fn=*/NULL_TREE))
{
error ("cannot create type information for type %qT because "
- "its size is variable",
+ "it involves types of variable size",
type);
return error_mark_node;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce07d43..7952579 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-10-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/29318
+ * g++.dg/ext/vla4.C: New test.
+
2006-10-12 Lee Millward <lee.millward@codesourcery.com>
PR c++/27961
diff --git a/gcc/testsuite/g++.dg/ext/vla4.C b/gcc/testsuite/g++.dg/ext/vla4.C
new file mode 100644
index 0000000..8b7f38f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/vla4.C
@@ -0,0 +1,21 @@
+// PR c++/29318
+// { dg-options "" }
+
+#include <typeinfo>
+
+void f(int i) {
+ try {
+ int a[i];
+ throw &a; // { dg-error "variable size" }
+ } catch (int (&)[i]) { // { dg-error "variable size" }
+ }
+}
+
+int main()
+{
+ int i = 5;
+ int va[i];
+ const std::type_info& info(typeid(&va)); // { dg-error "variable size" }
+
+ return 0;
+}