c++: EOF location [PR 96045]
authorNathan Sidwell <nathan@acm.org>
Wed, 23 Dec 2020 22:17:17 +0000 (14:17 -0800)
committerNathan Sidwell <nathan@acm.org>
Wed, 23 Dec 2020 22:26:50 +0000 (14:26 -0800)
Setting the EOF token location to be the start of a line just after
the ending newline is not most helpful.  While that location is
probably the right place to report preprocessing and lexing issues,
when parsing, the location just after the last token is better.  That
way we get to point at some actual text.  Setting the location from
the previous token has the advantage over just setting the location to
be the end of the final line, in that any ending comments do not get
considered, which I think is better.

PR c++/96045
gcc/cp/
* parser.c (cp_lexer_new_main): Adjust EOF token location.
gcc/testsuite/
* g++.dg/diagnostic/pr96045-1.C: New.
* g++.dg/diagnostic/pr96045-2.C: New.
* g++.dg/diagnostic/pr96045-3.C: New.
* c-c++-common/goacc/pr79428-1.c: Adjust EOF diagnostic location.
* c-c++-common/gomp/pr79428-2.c: Likewise
* c-c++-common/raw-string-6.c: Likewise
* g++.dg/cpp0x/decltype63.C: Likewise
* g++.dg/cpp0x/gen-attrs-64.C: Likewise
* g++.dg/cpp0x/pr68726.C: Likewise
* g++.dg/cpp0x/pr78341.C: Likewise
* g++.dg/cpp1y/pr65202.C: Likewise
* g++.dg/cpp1y/pr65340.C: Likewise
* g++.dg/cpp1y/pr68578.C: Likewise
* g++.dg/cpp1z/class-deduction44.C: Likewise
* g++.dg/diagnostic/unclosed-extern-c.C: Likewise
* g++.dg/diagnostic/unclosed-function.C: Likewise
* g++.dg/diagnostic/unclosed-namespace.C: Likewise
* g++.dg/diagnostic/unclosed-struct.C: Likewise
* g++.dg/ext/pr84598.C: Likewise
* g++.dg/other/switch4.C: Likewise
* g++.dg/parse/attr4.C: Likewise
* g++.dg/parse/cond4.C: Likewise
* g++.dg/parse/crash10.C: Likewise
* g++.dg/parse/crash18.C: Likewise
* g++.dg/parse/crash27.C: Likewise
* g++.dg/parse/crash34.C: Likewise
* g++.dg/parse/crash35.C: Likewise
* g++.dg/parse/crash52.C: Likewise
* g++.dg/parse/crash59.C: Likewise
* g++.dg/parse/crash61.C: Likewise
* g++.dg/parse/crash67.C: Likewise
* g++.dg/parse/error14.C: Likewise
* g++.dg/parse/error56.C: Likewise
* g++.dg/parse/invalid1.C: Likewise
* g++.dg/parse/parameter-declaration-1.C: Likewise
* g++.dg/parse/parser-pr28152-2.C: Likewise
* g++.dg/parse/parser-pr28152.C: Likewise
* g++.dg/parse/pr68722.C: Likewise
* g++.dg/parse/pr96258.C: Likewise
* g++.dg/pr46852.C: Likewise
* g++.dg/pr46868.C: Likewise
* g++.dg/template/crash115.C: Likewise
* g++.dg/template/crash43.C: Likewise
* g++.dg/template/crash90.C: Likewise
* g++.dg/template/error-recovery1.C: Likewise
* g++.dg/template/error57.C: Likewise
* g++.old-deja/g++.other/crash31.C: Likewise

48 files changed:
gcc/cp/parser.c
gcc/testsuite/c-c++-common/goacc/pr79428-1.c
gcc/testsuite/c-c++-common/gomp/pr79428-2.c
gcc/testsuite/c-c++-common/raw-string-6.c
gcc/testsuite/g++.dg/cpp0x/decltype63.C
gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C
gcc/testsuite/g++.dg/cpp0x/pr68726.C
gcc/testsuite/g++.dg/cpp0x/pr78341.C
gcc/testsuite/g++.dg/cpp1y/pr65202.C
gcc/testsuite/g++.dg/cpp1y/pr65340.C
gcc/testsuite/g++.dg/cpp1y/pr68578.C
gcc/testsuite/g++.dg/cpp1z/class-deduction44.C
gcc/testsuite/g++.dg/diagnostic/pr96045-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/diagnostic/pr96045-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/diagnostic/pr96045-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C
gcc/testsuite/g++.dg/diagnostic/unclosed-function.C
gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C
gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C
gcc/testsuite/g++.dg/ext/pr84598.C
gcc/testsuite/g++.dg/other/switch4.C
gcc/testsuite/g++.dg/parse/attr4.C
gcc/testsuite/g++.dg/parse/cond4.C
gcc/testsuite/g++.dg/parse/crash10.C
gcc/testsuite/g++.dg/parse/crash18.C
gcc/testsuite/g++.dg/parse/crash27.C
gcc/testsuite/g++.dg/parse/crash34.C
gcc/testsuite/g++.dg/parse/crash35.C
gcc/testsuite/g++.dg/parse/crash52.C
gcc/testsuite/g++.dg/parse/crash59.C
gcc/testsuite/g++.dg/parse/crash61.C
gcc/testsuite/g++.dg/parse/crash67.C
gcc/testsuite/g++.dg/parse/error14.C
gcc/testsuite/g++.dg/parse/error56.C
gcc/testsuite/g++.dg/parse/invalid1.C
gcc/testsuite/g++.dg/parse/parameter-declaration-1.C
gcc/testsuite/g++.dg/parse/parser-pr28152-2.C
gcc/testsuite/g++.dg/parse/parser-pr28152.C
gcc/testsuite/g++.dg/parse/pr68722.C
gcc/testsuite/g++.dg/parse/pr96258.C
gcc/testsuite/g++.dg/pr46852.C
gcc/testsuite/g++.dg/pr46868.C
gcc/testsuite/g++.dg/template/crash115.C
gcc/testsuite/g++.dg/template/crash43.C
gcc/testsuite/g++.dg/template/crash90.C
gcc/testsuite/g++.dg/template/error-recovery1.C
gcc/testsuite/g++.dg/template/error57.C
gcc/testsuite/g++.old-deja/g++.other/crash31.C

index 3883339aa642488930fbd6a376adcd378a7bb19d..dd8e8081847ccdec5aeeceea24895e06217aac1b 100644 (file)
@@ -666,6 +666,16 @@ cp_lexer_new_main (void)
                       + lexer->buffer->length ()
                      - 1;
 
+  if (lexer->buffer->length () != 1)
+    {
+      /* Set the EOF token's location to be the just after the previous
+         token's range.  That way 'at-eof' diagnostics point at something
+        meaninful.  */
+      auto range = get_range_from_loc (line_table, tok[-1].location);
+      tok[0].location
+       = linemap_position_for_loc_and_offset (line_table, range.m_finish, 1);
+    }
+
   if (filter)
     module_token_cdtor (parse_in, filter);
 
index 68dea5b145e8352ce9497fd0339412084b4f074d..a8047e98123249caea87a75c437d33125878ea21 100644 (file)
@@ -4,5 +4,5 @@ void
 foo ()
 {
 #pragma acc routine /* { dg-error ".#pragma acc routine. must be at file scope" } */
-// { dg-error "expected" "end" { target c } .-1 }
-// { dg-error "-:expected" "end" { target c++ } .+1 }
+// { dg-error "expected" "end" { target *-*-* } .-1 }
+
index 0914963b8f9b18d19c7fbdb7c2e9e0a07df0c7ae..6d162a2c13f987207c2290300274c570b50d5337 100644 (file)
@@ -5,5 +5,4 @@ foo ()
 {
 #pragma omp sections
 #pragma omp section /* { dg-error "'#pragma omp section' may only be used in '#pragma omp sections' construct|not allowed" } */
-// { dg-error "expected" "end" { target c } .-1 }
-// { dg-error "-:expected" "end" { target c++ } .+1 }
+// { dg-error "expected" "end" { target *-*-* } .-1 }
index a2cb30e96c9e1141321360b16215efeb5784250d..819dd44aff46ae1f2106c073dfec6303fb725bde 100644 (file)
@@ -3,5 +3,4 @@
 // { dg-options "-std=c++0x" { target c++ } }
 
 const void *s0 = R"ouch()ouCh";        // { dg-error "unterminated raw string" "unterminated" }
-// { dg-error "at end of input" "end" { target c } .-1 }
-// { dg-error "-:at end of input" "end" { target c++ } .+1 }
+// { dg-error "at end of input" "end" { target *-*-* } .-1 }
index b588bc3e5ef5185970ad53aa4518c67c5cd2818e..ab1a4111eee01189628eee5e338fbc55039ec8c1 100644 (file)
@@ -4,5 +4,4 @@
 template<typename T>
 class C{
  T t;
-  decltype(t)::a:: // { dg-error "expected" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+  decltype(t)::a:: // { dg-error "expected"  }
index 822b64ea460eefaa20f378f43e58ad776af9f353..c82beb9838191adf72d62f9bedc06f6d3e01b33d 100644 (file)
@@ -2,4 +2,3 @@
 // { dg-do compile { target c++11 } }
 
 namespace alignas() N  {} // { dg-error "expected"  }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
index 636a20c83be4954cdc4ed7380f00358209db3c1d..8edd43996ffb52043afac32c4d01bd1e05ac443b 100644 (file)
@@ -5,4 +5,3 @@ template <typename> struct A {
   template <typename... _Args>
   using __has_construct typename __construct_helper<_Args...>::type;  // { dg-error "expected" }
 } struct : A<int> {   // { dg-error "expected" }
-  // { dg-error "-:expected" "" { target *-*-* } .+1 }
index 8573f9f0824d23e8641b940cc8b99d79c1bb2bca..0a69210e5a1c52e1847bee3c069bb7992c8f787a 100644 (file)
@@ -2,4 +2,3 @@
 // { dg-do compile { target c++11 } }
 
 alignas (alignas double // { dg-error "expected" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
index a76f8da689cba761e8d412b8a6134f550745aee0..1f7219b5b0a0ec887b6d0871a7101a9ec2f7b788 100644 (file)
@@ -24,5 +24,4 @@ int main()
 {
     foo<ns::bar> f;
     adl::swap(f, f) // { dg-error "expected ';'" }
-}
-// { dg-error "-:expected '.'" "expected end of namespace" { target *-*-* } .+1 }
+} // { dg-error "2:expected" }
index d3e03f75df33647ef2cdc4a556083458a6426cbc..e0ce6810906df2b4f4c769295e33d11ea2064458 100644 (file)
@@ -17,4 +17,4 @@ struct traverse {
 }
 auto &traverse = constant < functors :: traverse > ;
 operator()()->decltype(traverse(0, 0))// { dg-error "no match"  }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "39:expected" "" { target *-*-* } .-1 }
index 9b3898176f1e2c9fbb7e8e043d35817dfba2c2b2..f4be9daa8c6b74f61b42e847b6067450a25fbf45 100644 (file)
@@ -1,4 +1,4 @@
 // { dg-do compile { target c++14 } }
 
 template <typename> struct bar foo; template <> struct foo<>:  // { dg-error "class template|redeclared" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "62:expected" "" { target *-*-* } .-1 }
index 95caa992a21ab692f47b37acc9ab5122890ccf1a..419aaa20cbdd00972cf1a2f8e98644114b4f068a 100644 (file)
@@ -3,4 +3,3 @@
 
 template <typename> struct A;
 template <typename> struct B : A < B { , // { dg-error ""  }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git a/gcc/testsuite/g++.dg/diagnostic/pr96045-1.C b/gcc/testsuite/g++.dg/diagnostic/pr96045-1.C
new file mode 100644 (file)
index 0000000..b84a5d5
--- /dev/null
@@ -0,0 +1,4 @@
+// PR 96045  EOF location
+
+template <class> class A {};
+struct A <int> // { dg-error "15:" }
diff --git a/gcc/testsuite/g++.dg/diagnostic/pr96045-2.C b/gcc/testsuite/g++.dg/diagnostic/pr96045-2.C
new file mode 100644 (file)
index 0000000..1009ad0
--- /dev/null
@@ -0,0 +1,6 @@
+// PR 96045  EOF location
+
+template <class> class A {};
+struct A <int> // { dg-error "15:" }
+/* A comment */
+  
diff --git a/gcc/testsuite/g++.dg/diagnostic/pr96045-3.C b/gcc/testsuite/g++.dg/diagnostic/pr96045-3.C
new file mode 100644 (file)
index 0000000..ad1f2a5
--- /dev/null
@@ -0,0 +1,6 @@
+// PR 96045  EOF location
+
+#define BORKED <int> // { dg-error "20:" }
+
+template <class> class A {};
+struct A BORKED // { dg-message "10: in expansion of" }
index f905e4f3cc915f8747e2f33b791d75c8cecbd995..4dad8a21c166a557afaf354476416a43a3ba4df8 100644 (file)
@@ -10,4 +10,4 @@ void bar (void);
 
 void test (void);
 // { message "12: to match this '.'" "" { target *-*-* } open_extern_c }
-/* { dg-error "-:expected '.' at end of input" "" { target *-*-* } .+1 } */
+/* { dg-error "18:expected '.' at end of input" "" { target *-*-* } .-2 } */
index 4d841d5c6f4bb1c2d2d7f834e80a067b579be335..ff94bc7b262c6dd44e1e3c7421a8cb96536bdd1b 100644 (file)
@@ -1,4 +1,3 @@
 void test (void)
 { /* { dg-message "1: to match this '.'" } */
-  int filler;
-  /* { dg-error "-:expected '.' at end of input" "" { target *-*-* } .+1 } */
+  int filler; /* { dg-error "14:expected '.' at end of input"  } */
index 0887bc1e81366c47be07a6ca4a02c7d2da34693d..fc3fc08595aca921247c7a5452d5fa33fb893b3b 100644 (file)
@@ -1,3 +1,2 @@
 namespace unclosed { /* { dg-message "20: to match this '.'" } */
-int filler;
-/* { dg-error "-:expected '.' at end of input" "" { target *-*-* } .+1 } */
+int filler; /* { dg-error "12:expected '.' at end of input" } */
index e68e599620418759bf66cc4846adc6f1c37d9611..e3faaae715c1d6fd7cd80c9a17258b449cd84608 100644 (file)
@@ -1,3 +1,2 @@
 struct unclosed { /* { dg-message "17: to match this '.'" } */
-  int dummy;
-  // { dg-error "-:expected" "" { target *-*-* } .+1 }
+  int dummy; // { dg-error "13:expected"  }
index 8b78e0fddeab4cea042ebe74e434227175170db6..1dd09f9870d05193f66d8be87eb04fe17be63e38 100644 (file)
@@ -1,4 +1,4 @@
 // { dg-options "-fpermissive -w" }
 
-template<int b> __attribute__ a([] { class c, __attribute__(vector_size(operator+()))) d; // { dg-error "" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+template<int b> __attribute__ a([] { class c, __attribute__(vector_size(operator+()))) d; // { dg-error "before" }
+// { dg-error "90:expected" "" { target *-*-* } .-1 }
index 5d0047b89c8d99cffac2d756bb75e864d39b46ed..070c55e49329dafe12cfe15f2edaa8a2071ea759 100644 (file)
@@ -3,5 +3,4 @@
 class a b;  // { dg-error "aggregate" }
 void c() {
   switch ()  // { dg-error "expected" }
-  case b  // { dg-error "expected" }
-    // { dg-error "-:expected" "" { target *-*-* } .+1 }
+  case b  // { dg-error "9:expected" }
index 36ebdbd0bae11199744f0aed6df1b0a600a2cb2b..f16bf4779b9d29480a6e3b4580c1d7962d07c4b5 100644 (file)
@@ -1,4 +1,3 @@
 // PR c++/93684 - ICE-on-invalid with broken attribute.
 
 [[a:: // { dg-error "expected" }
-  // { dg-error "-:expected" "" { target c++11 } .+1 }
index 893caeaa571729e38ff13163c0c6ff3676b95843..6484f86072a6572bcfcca47dbc2910c773987251 100644 (file)
@@ -3,5 +3,4 @@
 
 void foo()                                                                                                                              
 {                                                                                                                                       
-  if (struct A{}// { dg-error "types may not be defined|expected" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+  if (struct A{}// { dg-error "" }
index 7e2dec6bcb39ccaefbc0df1ffe58375f3809cc9a..f713c3cc65b8951bcc21ee50205f80695bcb0c92 100644 (file)
@@ -9,4 +9,3 @@ class
 {
   typename::
 ; // { dg-error "expected" }
- // { dg-error "-:expected" "" { target *-*-* } .+1 }
index 596d3109ccccbd49ceae972aa2cca624d9d6e382..25311332e5714dfe8ad3b6bd760e7524408453de 100644 (file)
@@ -4,4 +4,4 @@
 // PR 18095: ICE
 // Origin: Volker Reichelt <reichelt@gcc.gnu.org>
 
-struct A // { dg-error "-:expected" "" { target *-*-* } .+1 }
+struct A // { dg-error "9:expected" }
index 08977b2a4a8e917c8477cc89c196737f42bbcc41..4090fc5eab6bd07debbe85470de3785276b5a9f5 100644 (file)
@@ -2,4 +2,4 @@
 
 void Dispatcher()
         (__builtin_offsetof (ArgsType, largeMsgLen)) // { dg-error "initialize" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "54:expected" "" { target *-*-* } .-1 }
index 86f79cc4aef7f44ac327fa6f21a13c4833aeddfd..60f44ae39a1e52303aa9caea34e3cb007c68133d 100644 (file)
@@ -4,4 +4,4 @@
 void foo()
 {
   namespace N { /* { dg-error "is not allowed" } */
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "16:expected" "" { target *-*-* } .-1 }
index 05f0a631a31365dd01f57cac1c9224e319bf715e..24b69f15afc4dba53b4e65a04398465c8b4b1d2c 100644 (file)
@@ -4,4 +4,4 @@
 struct a {};
 
 class foo : public a, a                // { dg-error "duplicate base" }
-{ // { dg-error "-:at end of input" "" { target *-*-* } .+1 } 
+{ // { dg-error "2:at end of input" } 
index 5dfb69c41d633fe0eb6fbc04b8445b20f1961415..ab30a7a5d5776e8f7ce25ccc4daa411bbf7d3b6f 100644 (file)
@@ -1,4 +1,4 @@
 // PR c++/39053
 
 void foo() = // { dg-error "initialized" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "13:expected" "" { target *-*-* } .-1 }
index 7526b08e1053d05db4fe1f85dfb15d6a4e631822..52b6b24381e91e136fb04f318023dffa497808e0 100644 (file)
@@ -1,4 +1,4 @@
 // PR c++/53003
 
 struct A{ void a{} return b  // { dg-error "16:function definition" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "28:expected" "" { target *-*-* } .-1 }
index 713fe9f15e1897c1ecf82484b61a2f5edbd691c6..b2004b85173e24d1886bc15264b97bdded40787c 100644 (file)
@@ -5,4 +5,3 @@
 struct pair { constexpr pair (const) : }; // { dg-error "" }
 template <0> make_pair () {}             // { dg-error "" }
 pair prefix[] = { 0, make_pair }         // { dg-error "" }
-// { dg-error "-:expected" "" { target c++11 } .+1 }
index 2a5bb3f1d917c93b22222651331b1e0d1ea44197..8f6305dff3c710fc2beb49266d073435e63245aa 100644 (file)
@@ -4,4 +4,4 @@
 class x0;
 template <x1> x2() {  // { dg-error "declared|type" }
 x0 x3 = x3. // { dg-error "incomplete type" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "12:expected" "" { target *-*-* } .-1 }
index fd6541800071abc8812538a321dd1283857ecda0..3d87d46a5d0a4f78811ba6843f34f9f8c9a5c7fc 100644 (file)
@@ -20,4 +20,4 @@ struct X
                  //    }
 
 };   // { dg-error "1:expected primary-expression before '.' token" "primary"  }
-// { dg-error "-:expected" "at end of input" { target *-*-* } .+1 }
+// { dg-error "3:expected" "at end of input" { target *-*-* } .-1 }
index 11d319731386ea92f3270e2fa9b825967f377c76..bd3d27e8fcd9dcad24731f5943c5ef64935aa4a3 100644 (file)
@@ -4,4 +4,3 @@ template <0> int __copy_streambufs_eof; // { dg-error "" }
 class {
 // { dg-error "forbids" "" { target *-*-* } .+1 }
     friend __copy_streambufs_eof <> ( // { dg-error "" }
- // { dg-error "-:expected" "" { target *-*-* } .+1 }
index cb4ef1a69023678239fed32a5b37ea15c7aa21ff..971898f2d54345598ad54bfa58d0656c61b125a3 100644 (file)
@@ -3,4 +3,4 @@
 // { dg-options "-w" }
 
 int foo ( foo += *[ // { dg-error "expected" }
-// { dg-error "-:invalid|expected" "" { target *-*-* } .+1 }
+// { dg-error "20:invalid|expected" "" { target *-*-* } .-1 }
index c6106d5206e3999c07f89deecac3595f96bbac23..bd8f7f93b0d765c986b0644f1706a5ed1a98f237 100644 (file)
@@ -3,5 +3,5 @@
 // { dg-do compile }
 
 struct {
-  a(void = 0; a(0), a(0) // { dg-error "" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+  a(void = 0; a(0), a(0) // { dg-error "invalid|cannot|before|forbid|member" }
+// { dg-error "25:end of input" "" { target *-*-* } .-1 }
index 28048bd1a9a52b4a6157e61ade57c38f4040b807..8f6cce8077875b12784438bd63c6973b7d2e6fa9 100644 (file)
@@ -8,4 +8,4 @@ main (void)
 
   z = __complex__ (1.90000007326203904e+19, 0.0);   // { dg-error "expected primary-expression before '__complex__'" "primary-expression" } 
   z = __complex__ (1.0e+0, 0.0) / z;    // { dg-error "expected primary-expression before '__complex__'" "primaty-expression" } 
-  // { dg-error "-:at end of input" "end" { target *-*-* } .+1 }
+  // { dg-error "37:at end of input" "end" { target *-*-* } .-1 }
index 34617340fabcc8c17aab4ac61f100edff1ab41bb..748c355bafce1b40e2f9fff8f1dbfd8c293293ea 100644 (file)
@@ -8,4 +8,4 @@ main (void)
 
   z = _Complex (1.90000007326203904e+19, 0.0);   // { dg-error "expected primary-expression before '_Complex'" "primary-expression" } 
   z = _Complex (1.0e+0, 0.0) / z;    // { dg-error "expected primary-expression before '_Complex'" "primary-expression" } 
-  // { dg-error "-:at end of input" "end" { target *-*-* } .+1 }
+  // { dg-error "34:at end of input" "end" { target *-*-* } .-1 }
index 26f6d11cfe18756509d24a56bdf0dcd816714a0b..6d2f1008cf9173468aec0768219c2e44be857443 100644 (file)
@@ -6,4 +6,3 @@ class A {
   A _M_ios_locale ios_base(ios_base &) template <_Traits> class basic_ios {  // { dg-error "" }
     basic_ios basic_ios = operator= // { dg-error "" }
 // { dg-prune-output "file ends in default argument" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
index 1b642e1fc38c5c670a91cd92e98dbc102b6c9aff..4d14a80e2553faa99e6ca58518e5b6f62319667a 100644 (file)
@@ -1,5 +1,3 @@
 // { dg-additional-options -fopenmp }
 // { dg-require-effective-target fopenmp } 
-#pragma omp declare simd // { dg-error "not immediately followed by" }
-
-// { dg-error "-:expected unqualified-id" "" { target *-*-* } .+1 }
+#pragma omp declare simd // { dg-error "" }
index 5cfeaf96e19ee4e4eb09e02c74e5e06d2387af67..e3cb40247ba76396d8c88301fdf40ae2a3e788d8 100644 (file)
@@ -5,4 +5,3 @@ template
 <
 class
 { // { dg-error "" }
-// { dg-error "-:" "" { target *-*-* } .+1 }
index 25b8c966f4d43edfcfa4ebdd9c920b2b419a37a3..544c7b219df0a6ff8677c7b35c0ce05f5bc45312 100644 (file)
@@ -2,4 +2,3 @@
 // { dg-do compile }
 
 template < int > struct S { S < // { dg-error "" }
-  // { dg-error "-:expected" "" { target *-*-* } .+1 }
index c1a72352714db4095005e6de9bd7332785825c9c..80f8683a1366e591d3870f15ecc9b7693f9b050f 100644 (file)
@@ -1,4 +1,3 @@
 // PR c++/56534
 
 template < struct template rebind < > // { dg-error "expected|must follow" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
index 3647a17cad83e18015efeff9a39db2dadb0b4645..ae644ede97ee3bd34de756196941aa5fccfb7e87 100644 (file)
@@ -5,4 +5,3 @@ extern "C" {
   struct ___is_pod {
     enum {
       __value = (sizeof(__gnu_internal::__test_type<_Tp>(0)))}; // { dg-error "expected|declared"  }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
index e2a58e31819b252094729b8f52ef205d78032c74..125ab0a9d4645aca8ff4ad7c183c0c2ed58e5b9b 100644 (file)
@@ -5,5 +5,4 @@ struct A ;
 template < typename >
 struct B ;
 template < typename T , A < B < T > {} // { dg-error "parse error|non-type|initializer" }
-
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "39:expected" "" { target *-*-* } .-1 }
index 6f9ce6d6bc2bb9dbc255ae53955dc67dca1546d3..962571474fb9d6fb07bfbc9a181646d0d862bad1 100644 (file)
@@ -7,4 +7,3 @@ template < typename > struct T
   template < bool > struct T < S > // { dg-error "" }
   {
     void f () { // { dg-error "expected" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
index 121fbb1d523c134d4587f6bad9eee89127992242..f67e0a6fa630dd74c3e46c59038ecef371d234d0 100644 (file)
@@ -2,4 +2,4 @@
 
 template <int()> struct a;
 template <int(b)> a < b                // { dg-error "int" }
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+// { dg-error "expected" "" { target *-*-* } .-1 }
index 610dfe11270bb4ed526610eb786d09663df5d68d..d777691c66c7869082842988c48c89ca18cc770d 100644 (file)
@@ -6,5 +6,4 @@ namespace bar
 struct foo
 {
   foo();
-};
-// { dg-error "-:expected" "" { target *-*-* } .+1 }
+}; // { dg-error "3:expected"  }