diff options
author | Jason Merrill <jason@redhat.com> | 2011-08-06 00:34:37 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-08-06 00:34:37 -0400 |
commit | bb0a32e80d75ed27f9714a0dc03d1faca50d94a6 (patch) | |
tree | 5fdb4eef59d03968c03795f3c6c017ebc4780c8d | |
parent | dd56ca9f1c8d3a236474453de81433a7c911f71b (diff) | |
download | gcc-bb0a32e80d75ed27f9714a0dc03d1faca50d94a6.zip gcc-bb0a32e80d75ed27f9714a0dc03d1faca50d94a6.tar.gz gcc-bb0a32e80d75ed27f9714a0dc03d1faca50d94a6.tar.bz2 |
re PR c++/49921 ([C++0x] Segfault during compilation, decltype and operator->*)
PR c++/49921
* semantics.c (finish_decltype_type): Call invalid_nonstatic_memfn_p.
From-SVN: r177498
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/decltype31.C | 13 |
4 files changed, 22 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 964de15..18bf493 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-08-05 Jason Merrill <jason@redhat.com> + PR c++/49921 + * semantics.c (finish_decltype_type): Call invalid_nonstatic_memfn_p. + PR c++/49669 * init.c (perform_member_init): Handle invalid array initializer. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 2f02e69..3d836eb 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -4948,6 +4948,9 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p, return error_mark_node; } + if (invalid_nonstatic_memfn_p (expr, complain)) + return error_mark_node; + /* To get the size of a static data member declared as an array of unknown bound, we need to instantiate it. */ if (TREE_CODE (expr) == VAR_DECL diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9ce5d9b..cef7f41 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-08-05 Jason Merrill <jason@redhat.com> + PR c++/49921 + * g++.dg/cpp0x/decltype31.C: New. + PR c++/49669 * g++.dg/init/array28.C: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype31.C b/gcc/testsuite/g++.dg/cpp0x/decltype31.C new file mode 100644 index 0000000..b9817eb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype31.C @@ -0,0 +1,13 @@ +// PR c++/49921 +// { dg-options -std=c++0x } + +struct Local +{ + void f(); +}; + +Local *l; +void (Local::*ptr)(); +decltype((l->*ptr)) i; // { dg-error "member function" } + +// { dg-prune-output "invalid type in declaration" } |