diff options
author | Mark Mitchell <mark@codesourcery.com> | 2006-10-13 04:09:41 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2006-10-13 04:09:41 +0000 |
commit | f19218e50496219b72a5c7ddb62fca4df8980343 (patch) | |
tree | 257c51d7abb705650f8b91249be8c8381872aeda /gcc | |
parent | fc6fabdfda0a578edcef2a91400e083d0d6b4c7a (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/rtti.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/vla4.C | 21 |
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; +} |