From: Jason Merrill Date: Mon, 20 Feb 2017 06:05:54 +0000 (-0500) Subject: PR c++/79566 - elaborated-type-specifier in range for X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7950124ec2fe2ae52d99766ce4eaeed7ffc8a8bd;p=gcc.git PR c++/79566 - elaborated-type-specifier in range for * parser.c (cp_parser_simple_declaration): Fix check for type definition. From-SVN: r245591 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ceef9db73c8..8ff836e28d0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2017-02-19 Jason Merrill + PR c++/79566 - elaborated-type-specifier in range for + * parser.c (cp_parser_simple_declaration): Fix check for type + definition. + PR c++/79400 - confusing suggestion of 'noexcept' * parser.c (cp_parser_exception_specification_opt): Remove suggestion for deprecated dynamic exception-specification. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 72597f3e9f2..0146596d154 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -12883,7 +12883,7 @@ cp_parser_simple_declaration (cp_parser* parser, break; else if (maybe_range_for_decl) { - if (declares_class_or_enum && token->type == CPP_COLON) + if ((declares_class_or_enum & 2) && token->type == CPP_COLON) permerror (decl_specifiers.locations[ds_type_spec], "types may not be defined in a for-range-declaration"); break; diff --git a/gcc/testsuite/g++.dg/cpp0x/range-for34.C b/gcc/testsuite/g++.dg/cpp0x/range-for34.C new file mode 100644 index 00000000000..2041848294d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/range-for34.C @@ -0,0 +1,16 @@ +// PR c++/79566 +// { dg-do compile { target c++11 } } + +struct X { + struct Y { }; + + Y* begin(); + Y* end(); +}; + +void f() +{ + X x; + for (struct X::Y& y : x) + ; +}