diff options
author | Dodji Seketeli <dodji@redhat.com> | 2011-12-15 15:40:25 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2011-12-15 16:40:25 +0100 |
commit | f03e689a9db25772c9650630bff7333bbf01c43d (patch) | |
tree | 166d4f3125440f265c7cae9244db82bc83609cbe /gcc | |
parent | 90376fadb87083f9990804ce6b6588004241be77 (diff) | |
download | gcc-f03e689a9db25772c9650630bff7333bbf01c43d.zip gcc-f03e689a9db25772c9650630bff7333bbf01c43d.tar.gz gcc-f03e689a9db25772c9650630bff7333bbf01c43d.tar.bz2 |
PR c++/51473 - ICE with invalid auto
gcc/cp/
PR c++/51473
* decl.c (check_tag_decl): Error out on auto specifier with no
declarator.
gcc/testsuite/
PR c++/51473
* g++.dg/cpp0x/auto30.C: New test.
From-SVN: r182375
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/auto30.C | 9 |
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7e99f58..3e56008 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-12-15 Dodji Seketeli <dodji@redhat.com> + + PR c++/51473 + * decl.c (check_tag_decl): Error out on auto specifier with no + declarator. + 2011-12-15 Jonathan Wakely <jwakely.gcc@gmail.com> PR libstdc++/51365 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 480d211..1fe63bb 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4140,6 +4140,12 @@ check_tag_decl (cp_decl_specifier_seq *declspecs) error_p = true; if (declared_type == NULL_TREE && ! saw_friend && !error_p) permerror (input_location, "declaration does not declare anything"); + else if (declared_type != NULL_TREE && type_uses_auto (declared_type)) + { + error ("%<auto%> can only be specified for variables " + "or function declarations"); + return error_mark_node; + } /* Check for an anonymous union. */ else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type)) && TYPE_ANONYMOUS_P (declared_type)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4650977..331ef1c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-15 Dodji Seketeli <dodji@redhat.com> + + PR c++/51473 + * g++.dg/cpp0x/auto30.C: New test. + 2011-12-15 Tobias Burnus <burnus@net-b.de> * gfortran.dg/coarray/poly_run_3.f90: New. diff --git a/gcc/testsuite/g++.dg/cpp0x/auto30.C b/gcc/testsuite/g++.dg/cpp0x/auto30.C new file mode 100644 index 0000000..d26e290 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/auto30.C @@ -0,0 +1,9 @@ +// Origin PR c++/51473 +// { dg-options "-std=c++11" } + +struct A +{ + auto friend struct B; // { dg-error "multiple types|can only be specified|friend" } +}; + +auto int; // { dg-error "multiple types|can only be specified for variables" } |