diff options
author | Jason Merrill <jason@redhat.com> | 2017-02-20 01:05:54 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-02-20 01:05:54 -0500 |
commit | 7950124ec2fe2ae52d99766ce4eaeed7ffc8a8bd (patch) | |
tree | d88cb1eae31b80719c5437dd1023d88551c87a55 /gcc | |
parent | bea40d1191260ebd68cbe1f940e1a5b7e1efa09d (diff) | |
download | gcc-7950124ec2fe2ae52d99766ce4eaeed7ffc8a8bd.zip gcc-7950124ec2fe2ae52d99766ce4eaeed7ffc8a8bd.tar.gz gcc-7950124ec2fe2ae52d99766ce4eaeed7ffc8a8bd.tar.bz2 |
PR c++/79566 - elaborated-type-specifier in range for
* parser.c (cp_parser_simple_declaration): Fix check for type
definition.
From-SVN: r245591
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/parser.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/range-for34.C | 16 |
3 files changed, 21 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ceef9db..8ff836e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2017-02-19 Jason Merrill <jason@redhat.com> + 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 72597f3..0146596 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 0000000..2041848 --- /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) + ; +} |