/gcc/cp
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 4 Mar 2014 10:52:18 +0000 (10:52 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 4 Mar 2014 10:52:18 +0000 (10:52 +0000)
2014-03-04  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/60376
* parser.c (cp_parser_using_declaration): Early return when
cp_parser_nested_name_specifier errors out.

/gcc/testsuite
2014-03-04  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/60376
* g++.dg/cpp1y/pr60376.C: New.

/libstdc++-v3
2014-03-04  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/60376
* testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc:
Adjust dg-error directives.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208309 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp1y/pr60376.C [new file with mode: 0644]
libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc

index 2d8364b..0a12700 100644 (file)
@@ -1,3 +1,9 @@
+2014-03-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60376
+       * parser.c (cp_parser_using_declaration): Early return when
+       cp_parser_nested_name_specifier errors out.
+
 2014-03-01  Adam Butcher  <adam@jessamine.co.uk>
 
        PR c++/60377
index 8c78262..413ada6 100644 (file)
@@ -15932,10 +15932,17 @@ cp_parser_using_declaration (cp_parser* parser,
   /* If we saw `typename', or didn't see `::', then there must be a
      nested-name-specifier present.  */
   if (typename_p || !global_scope_p)
-    qscope = cp_parser_nested_name_specifier (parser, typename_p,
-                                             /*check_dependency_p=*/true,
-                                             /*type_p=*/false,
-                                             /*is_declaration=*/true);
+    {
+      qscope = cp_parser_nested_name_specifier (parser, typename_p,
+                                               /*check_dependency_p=*/true,
+                                               /*type_p=*/false,
+                                               /*is_declaration=*/true);
+      if (!qscope && !cp_parser_uncommitted_to_tentative_parse_p (parser))
+       {
+         cp_parser_skip_to_end_of_block_or_statement (parser);
+         return false;
+       }
+    }
   /* Otherwise, we could be in either of the two productions.  In that
      case, treat the nested-name-specifier as optional.  */
   else
index 0d9c385..3a683db 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60376
+       * g++.dg/cpp1y/pr60376.C: New.
+
 2014-03-04  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * g++.dg/abi/anon2.C: Don't scan assembler for c++98.
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60376.C b/gcc/testsuite/g++.dg/cpp1y/pr60376.C
new file mode 100644 (file)
index 0000000..77efdc5
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/60376
+// { dg-options -std=c++1y }
+
+struct A
+{
+  int foo();
+};
+
+template<typename> void bar()
+{
+  using (A().foo);  // { dg-error "expected" }
+}
index 2918b9c..382d3ac 100644 (file)
@@ -1,3 +1,9 @@
+2014-03-04  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/60376
+       * testsuite/29_atomics/headers/atomic/types_std_c++0x_neg.cc:
+       Adjust dg-error directives.
+
 2014-02-26  Tim Shen  <timshen91@gmail.com>
 
        * include/bits/regex.tcc (match_results<>::format,
index dfae679..08912aa 100644 (file)
@@ -121,50 +121,3 @@ void test01()
 // { dg-error "expected nested-name-specifier" "" { target *-*-* } 72 }
 // { dg-error "expected nested-name-specifier" "" { target *-*-* } 73 }
 // { dg-error "expected nested-name-specifier" "" { target *-*-* } 75 }
-
-// { dg-error "declared" "" { target *-*-* } 26 }
-// { dg-error "declared" "" { target *-*-* } 27 }
-// { dg-error "declared" "" { target *-*-* } 28 }
-// { dg-error "declared" "" { target *-*-* } 29 }
-// { dg-error "declared" "" { target *-*-* } 30 }
-// { dg-error "declared" "" { target *-*-* } 31 }
-// { dg-error "declared" "" { target *-*-* } 32 }
-// { dg-error "declared" "" { target *-*-* } 34 }
-// { dg-error "declared" "" { target *-*-* } 36 }
-// { dg-error "declared" "" { target *-*-* } 37 }
-// { dg-error "declared" "" { target *-*-* } 38 }
-// { dg-error "declared" "" { target *-*-* } 39 }
-// { dg-error "declared" "" { target *-*-* } 40 }
-// { dg-error "declared" "" { target *-*-* } 41 }
-// { dg-error "declared" "" { target *-*-* } 42 }
-// { dg-error "declared" "" { target *-*-* } 43 }
-// { dg-error "declared" "" { target *-*-* } 44 }
-// { dg-error "declared" "" { target *-*-* } 45 }
-// { dg-error "declared" "" { target *-*-* } 46 }
-// { dg-error "declared" "" { target *-*-* } 47 }
-// { dg-error "declared" "" { target *-*-* } 48 }
-// { dg-error "declared" "" { target *-*-* } 49 }
-// { dg-error "declared" "" { target *-*-* } 50 }
-// { dg-error "declared" "" { target *-*-* } 52 }
-// { dg-error "declared" "" { target *-*-* } 53 }
-// { dg-error "declared" "" { target *-*-* } 54 }
-// { dg-error "declared" "" { target *-*-* } 55 }
-// { dg-error "declared" "" { target *-*-* } 56 }
-// { dg-error "declared" "" { target *-*-* } 57 }
-// { dg-error "declared" "" { target *-*-* } 58 }
-// { dg-error "declared" "" { target *-*-* } 59 }
-// { dg-error "declared" "" { target *-*-* } 60 }
-// { dg-error "declared" "" { target *-*-* } 61 }
-// { dg-error "declared" "" { target *-*-* } 62 }
-// { dg-error "declared" "" { target *-*-* } 63 }
-// { dg-error "declared" "" { target *-*-* } 64 }
-// { dg-error "declared" "" { target *-*-* } 65 }
-// { dg-error "declared" "" { target *-*-* } 66 }
-// { dg-error "declared" "" { target *-*-* } 67 }
-// { dg-error "declared" "" { target *-*-* } 68 }
-// { dg-error "declared" "" { target *-*-* } 69 }
-// { dg-error "declared" "" { target *-*-* } 70 }
-// { dg-error "declared" "" { target *-*-* } 71 }
-// { dg-error "declared" "" { target *-*-* } 72 }
-// { dg-error "declared" "" { target *-*-* } 73 }
-// { dg-error "declared" "" { target *-*-* } 75 }