diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2012-04-17 17:20:02 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2012-04-17 17:20:02 +0000 |
commit | 0fced8150b9bc8be3dd0ea2134002f4645428f6b (patch) | |
tree | 3c2f1f6512eae507a52d28f15ef83744c1a25051 | |
parent | 9fc37b2b7bd36846fa166fe8f9911a9ec8c6978a (diff) | |
download | gcc-0fced8150b9bc8be3dd0ea2134002f4645428f6b.zip gcc-0fced8150b9bc8be3dd0ea2134002f4645428f6b.tar.gz gcc-0fced8150b9bc8be3dd0ea2134002f4645428f6b.tar.bz2 |
re PR c++/52599 (ICE on illegal constexpr constructor declaration)
/cp
2012-04-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/52599
* semantics.c (build_constexpr_constructor_member_initializers):
Check for function-try-block as function-body.
/testsuite
2012-04-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/52599
* g++.dg/cpp0x/constexpr-ctor10.C: New.
/cp
2012-04-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53003
* parser.c (cp_parser_member_declaration): Check that
initializer_token_start is non null before dereferencing it.
/testsuite
2012-04-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53003
* g++.dg/parse/crash59.C: New.
From-SVN: r186541
-rw-r--r-- | gcc/cp/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/cp/parser.c | 2 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash59.C | 3 |
6 files changed, 38 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8746c64..16dceec 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,15 @@ +2012-04-17 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/52599 + * semantics.c (build_constexpr_constructor_member_initializers): + Check for function-try-block as function-body. + +2012-04-17 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/53003 + * parser.c (cp_parser_member_declaration): Check that + initializer_token_start is non null before dereferencing it. + 2012-04-16 Jason Merrill <jason@redhat.com> PR c++/38543 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 6809bc7..8aefefa 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -19109,7 +19109,7 @@ cp_parser_member_declaration (cp_parser* parser) possible that this fact is an oversight in the standard, since a pure function may be defined outside of the class-specifier. */ - if (initializer) + if (initializer && initializer_token_start) error_at (initializer_token_start->location, "pure-specifier on function-definition"); decl = cp_parser_save_member_function_body (parser, diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 9bdd2ee..22185ea 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5921,6 +5921,12 @@ build_constexpr_constructor_member_initializers (tree type, tree body) break; } } + else if (TREE_CODE (body) == TRY_BLOCK) + { + error ("body of %<constexpr%> constructor cannot be " + "a function-try-block"); + return error_mark_node; + } else if (EXPR_P (body)) ok = build_data_member_initialization (body, &vec); else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 301f561..0c42dee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2012-04-17 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/52599 + * g++.dg/cpp0x/constexpr-ctor10.C: New. + +2012-04-17 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/53003 + * g++.dg/parse/crash59.C: New. + 2012-04-17 Michael Matz <matz@suse.de> PR tree-optimization/18437 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C new file mode 100644 index 0000000..c1279e2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ctor10.C @@ -0,0 +1,6 @@ +// PR c++/52599 +// { dg-options -std=c++11 } + +struct foo { + constexpr foo() try { } catch(...) { }; // { dg-error "constructor" } +}; diff --git a/gcc/testsuite/g++.dg/parse/crash59.C b/gcc/testsuite/g++.dg/parse/crash59.C new file mode 100644 index 0000000..e5e6298 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash59.C @@ -0,0 +1,3 @@ +// PR c++/53003 + +struct A{ void a{} return b // { dg-error "function definition|expected" } |