Bug 51027 - [C++0x] GCC accepts alias-declaration without ';'
Summary: [C++0x] GCC accepts alias-declaration without ';'
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.7.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
: 51120 (view as bug list)
Depends on:
Blocks:
 
Reported: 2011-11-08 08:53 UTC by Kohei Takahashi
Modified: 2011-11-14 14:01 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2011-11-08 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kohei Takahashi 2011-11-08 08:53:39 UTC
GCC now implements alias-declaration. But accepts it without trailing ';' .

e.g.
----
using INT = int
----

And warn with ';' via -pedantic.
e.g.
----
using INT = int;
----

output
----
$ g++ -pedantic -c -std=gnu++11 test.C
test.C:1:16: warning: extra ';' [-pedantic]
----
Comment 1 Paolo Carlini 2011-11-08 11:29:57 UTC
I guess this one is rather urgent: thanks to Jon, the library already uses the new feature a lot and -pedantic warnings are not suppressed in system-headers (whether this is *really* ok, I'm not sure, but it's another issue)
Comment 2 Dodji Seketeli 2011-11-08 16:38:36 UTC
I am currently testing the patchlet below.  Sorry for the embarrassing
bug.

From: Dodji Seketeli <dodji@redhat.com>
Date: Tue, 8 Nov 2011 17:21:52 +0100
Subject: [PATCH] PR c++/51027 - accepts alias-declaration without ';'

gcc/cp/

	* parser.c (cp_parser_alias_declaration): Require ';' at the end
	of declaration.

gcc/testsuite

	* g++.dg/cpp0x/alias-decl-12.C: New test.
---
 gcc/cp/parser.c                            |    1 +
 gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C |    3 +++
 2 files changed, 4 insertions(+), 0 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C

diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 3d35877..0f2b14b 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -14904,6 +14904,7 @@ cp_parser_alias_declaration (cp_parser* parser)
   cp_parser_require (parser, CPP_EQ, RT_EQ);
 
   type = cp_parser_type_id (parser);
+  cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
 
   /* A typedef-name can also be introduced by an alias-declaration. The
      identifier following the using keyword becomes a typedef-name. It has
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C
new file mode 100644
index 0000000..a8c7260
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C
@@ -0,0 +1,3 @@
+// { dg-options "-std=c++0x" }
+
+using INT = int // { dg-error "expected|;|at end of input" }
-- 
1.7.6.4
Comment 3 Dodji Seketeli 2011-11-08 21:39:04 UTC
A candidate fix was posted to http://gcc.gnu.org/ml/gcc-patches/2011-11/msg01252.html
Comment 4 Dodji Seketeli 2011-11-09 08:01:03 UTC
Author: dodji
Date: Wed Nov  9 08:00:58 2011
New Revision: 181195

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=181195
Log:
PR c++/51027 - accepts alias-declaration without ';'

gcc/cp/

	* parser.c (cp_parser_alias_declaration): Require ';' at the end
	of the declaration.

libstdc++-v3/

	* include/ext/pointer.h (rebind): Append missing ';'.

gcc/testsuite

	* g++.dg/cpp0x/alias-decl-12.C: New test.
	* g++.dg/ext/alias-decl-attr4.C: Append missing ';'.

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/alias-decl-12.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/parser.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/g++.dg/ext/alias-decl-attr4.C
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/include/ext/pointer.h
Comment 5 Dodji Seketeli 2011-11-09 08:13:40 UTC
Should be fixed in trunk now.
Comment 6 Jonathan Wakely 2011-11-14 14:01:16 UTC
*** Bug 51120 has been marked as a duplicate of this bug. ***