2020-05-12  Nathan Sidwell  <nathan@acm.org>

	libcpp/
	EOF location is at end of file
	PR preprocessor/95013
	* lex.c (lex_raw_string): Process line notes before incrementing.
	Correct incrementing condition.  Adjust for new
	_cpp_get_fresh_line EOF behaviour.
	(_cpp_get_fresh_line): Do not pop buffer at EOF, increment line
	instead.
	(_cpp_lex_direct): Adjust for new _cpp_get_fresh_line behaviour.
	(cpp_directive_only_process): Assert we got a fresh line.
	* traditional.c (_cpp_read_logical_line_trad): Adjust for new
	_cpp_get_fresh_line behaviour.

	gcc/testsuite/
	* c-c++-common/goacc/pr79428-1.c: Adjust EOF diagnostic location.
	* c-c++-common/gomp/pr79428-2.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/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.
	* gcc.dg/empty-source-2.c: Likewise.
	* gcc.dg/empty-source-3.c: Likewise.
	* gcc.dg/noncompile/pr30552-3.c: Likewise.
	* gcc.dg/noncompile/pr35447-1.c: Likewise.
	* gcc.dg/pr20245-1.c: Likewise.
	* gcc.dg/pr28419.c: Likewise.
	* gcc.dg/rtl/truncated-rtl-file.c: Likewise.
	* gcc.dg/unclosed-init.c: Likewise.
	* obj-c++.dg/property/property-neg-6.mm: Likewise.
	* obj-c++.dg/syntax-error-10.mm: Likewise.
	* obj-c++.dg/syntax-error-8.mm: Likewise.
	* obj-c++.dg/syntax-error-9.mm: Likewise.

diff --git i/libcpp/lex.c w/libcpp/lex.c
index 3bcf073710e..043852d14e2 100644
--- i/libcpp/lex.c
+++ w/libcpp/lex.c
@@ -1897,12 +1897,13 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
 
 	  BUF_APPEND (base, cur - base);
 
-	  if (pfile->buffer->cur < pfile->buffer->rlimit)
+	  pfile->buffer->cur = cur-1;
+	  _cpp_process_line_notes (pfile, false);
+
+	  if (pfile->buffer->next_line < pfile->buffer->rlimit)
 	    CPP_INCREMENT_LINE (pfile, 0);
 	  pfile->buffer->need_line = true;
 
-	  pfile->buffer->cur = cur-1;
-	  _cpp_process_line_notes (pfile, false);
 	  if (!_cpp_get_fresh_line (pfile))
 	    {
 	      location_t src_loc = token->src_loc;
@@ -1914,6 +1915,8 @@ lex_raw_string (cpp_reader *pfile, cpp_token *token, const uchar *base,
 		_cpp_release_buff (pfile, first_buff);
 	      cpp_error_with_line (pfile, CPP_DL_ERROR, src_loc, 0,
 				   "unterminated raw string");
+	      /* Now pop the buffer that _cpp_get_fresh_line did not.  */
+	      _cpp_pop_buffer (pfile);
 	      return;
 	    }
 
@@ -2651,8 +2654,6 @@ _cpp_lex_token (cpp_reader *pfile)
 bool
 _cpp_get_fresh_line (cpp_reader *pfile)
 {
-  int return_at_eof;
-
   /* We can't get a new line until we leave the current directive.  */
   if (pfile->state.in_directive)
     return false;
@@ -2683,10 +2684,17 @@ _cpp_get_fresh_line (cpp_reader *pfile)
 	  buffer->next_line = buffer->rlimit;
 	}
 
-      return_at_eof = buffer->return_at_eof;
-      _cpp_pop_buffer (pfile);
-      if (pfile->buffer == NULL || return_at_eof)
-	return false;
+      if (buffer->prev && !buffer->return_at_eof)
+	_cpp_pop_buffer (pfile);
+      else
+	{
+	  /* End of translation.  Do not pop the buffer yet. Increment
+	     line number so that the EOF token is on a line of its own
+	     (_cpp_lex_direct doesn't increment in that case, because
+	     it's hard for it to distinguish this special case). */
+	  CPP_INCREMENT_LINE (pfile, 0);
+	  return false;
+	}
     }
 }
 
@@ -2740,6 +2748,8 @@ _cpp_lex_direct (cpp_reader *pfile)
 	      /* Tell the compiler the line number of the EOF token.  */
 	      result->src_loc = pfile->line_table->highest_line;
 	      result->flags = BOL;
+	      /* Now pop the buffer that _cpp_get_fresh_line did not.  */
+	      _cpp_pop_buffer (pfile);
 	    }
 	  return result;
 	}
@@ -3975,7 +3985,8 @@ cpp_directive_only_process (cpp_reader *pfile,
 		  /* Prep things for directive handling. */
 		  buffer->next_line = pos;
 		  buffer->need_line = true;
-		  _cpp_get_fresh_line (pfile);
+		  bool ok = _cpp_get_fresh_line (pfile);
+		  gcc_checking_assert (ok);
 
 		  /* Ensure proper column numbering for generated
 		     error messages. */
diff --git i/libcpp/traditional.c w/libcpp/traditional.c
index 039fcfe27f5..77adb3bf595 100644
--- i/libcpp/traditional.c
+++ w/libcpp/traditional.c
@@ -312,7 +312,11 @@ _cpp_read_logical_line_trad (cpp_reader *pfile)
   do
     {
       if (pfile->buffer->need_line && !_cpp_get_fresh_line (pfile))
-	return false;
+	{
+	  /* Now pop the buffer that _cpp_get_fresh_line did not.  */
+	  _cpp_pop_buffer (pfile);
+	  return false;
+	}
     }
   while (!_cpp_scan_out_logical_line (pfile, NULL, false)
 	 || pfile->state.skipping);
diff --git i/gcc/testsuite/c-c++-common/goacc/pr79428-1.c w/gcc/testsuite/c-c++-common/goacc/pr79428-1.c
index cf4aeaf6841..68dea5b145e 100644
--- i/gcc/testsuite/c-c++-common/goacc/pr79428-1.c
+++ w/gcc/testsuite/c-c++-common/goacc/pr79428-1.c
@@ -3,4 +3,6 @@
 void
 foo ()
 {
-#pragma acc routine /* { dg-error ".#pragma acc routine. must be at file scope|expected" } */
+#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 }
diff --git i/gcc/testsuite/c-c++-common/gomp/pr79428-2.c w/gcc/testsuite/c-c++-common/gomp/pr79428-2.c
index a26c462dbbd..0914963b8f9 100644
--- i/gcc/testsuite/c-c++-common/gomp/pr79428-2.c
+++ w/gcc/testsuite/c-c++-common/gomp/pr79428-2.c
@@ -4,4 +4,6 @@ void
 foo ()
 {
 #pragma omp sections
-#pragma omp section /* { dg-error "'#pragma omp section' may only be used in '#pragma omp sections' construct|not allowed|expected" } */
+#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 }
diff --git i/gcc/testsuite/g++.dg/cpp0x/decltype63.C w/gcc/testsuite/g++.dg/cpp0x/decltype63.C
index 7dded0aedd8..b588bc3e5ef 100644
--- i/gcc/testsuite/g++.dg/cpp0x/decltype63.C
+++ w/gcc/testsuite/g++.dg/cpp0x/decltype63.C
@@ -5,4 +5,4 @@ template<typename T>
 class C{
  T t;
   decltype(t)::a:: // { dg-error "expected" }
-// { dg-error "-:expected"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C w/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C
index 7fb7c3358fc..822b64ea460 100644
--- i/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C
+++ w/gcc/testsuite/g++.dg/cpp0x/gen-attrs-64.C
@@ -2,4 +2,4 @@
 // { dg-do compile { target c++11 } }
 
 namespace alignas() N  {} // { dg-error "expected"  }
-// { dg-error "-:expected"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/cpp0x/pr68726.C w/gcc/testsuite/g++.dg/cpp0x/pr68726.C
index 262a1027c43..636a20c83be 100644
--- i/gcc/testsuite/g++.dg/cpp0x/pr68726.C
+++ w/gcc/testsuite/g++.dg/cpp0x/pr68726.C
@@ -5,4 +5,4 @@ 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" }
+  // { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/cpp0x/pr78341.C w/gcc/testsuite/g++.dg/cpp0x/pr78341.C
index dbf0059a6ff..8573f9f0824 100644
--- i/gcc/testsuite/g++.dg/cpp0x/pr78341.C
+++ w/gcc/testsuite/g++.dg/cpp0x/pr78341.C
@@ -2,4 +2,4 @@
 // { dg-do compile { target c++11 } }
 
 alignas (alignas double // { dg-error "expected" }
-// { dg-error "-:expected" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/cpp1y/pr65202.C w/gcc/testsuite/g++.dg/cpp1y/pr65202.C
index 0d217c7bc4e..a76f8da689c 100644
--- i/gcc/testsuite/g++.dg/cpp1y/pr65202.C
+++ w/gcc/testsuite/g++.dg/cpp1y/pr65202.C
@@ -25,4 +25,4 @@ int main()
     foo<ns::bar> f;
     adl::swap(f, f) // { dg-error "expected ';'" }
 }
-// { dg-error "-:expected '.'" "expected end of namespace" }
+// { dg-error "-:expected '.'" "expected end of namespace" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/cpp1y/pr65340.C w/gcc/testsuite/g++.dg/cpp1y/pr65340.C
index 848eff965e5..d3e03f75df3 100644
--- i/gcc/testsuite/g++.dg/cpp1y/pr65340.C
+++ w/gcc/testsuite/g++.dg/cpp1y/pr65340.C
@@ -16,4 +16,5 @@ struct traverse {
 };
 }
 auto &traverse = constant < functors :: traverse > ;
-operator()()->decltype(traverse(0, 0)) // { dg-error "no match|expected" }
+operator()()->decltype(traverse(0, 0))// { dg-error "no match"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/cpp1y/pr68578.C w/gcc/testsuite/g++.dg/cpp1y/pr68578.C
index 3fe07230117..18edd83cd7f 100644
--- i/gcc/testsuite/g++.dg/cpp1y/pr68578.C
+++ w/gcc/testsuite/g++.dg/cpp1y/pr68578.C
@@ -1,3 +1,4 @@
 // { dg-do compile { target c++14 } }
 
-template <typename> struct bar foo; template <> struct foo<>:  // { dg-error "class template|expected" }
+template <typename> struct bar foo; template <> struct foo<>:  // { dg-error "class template" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/cpp1z/class-deduction44.C w/gcc/testsuite/g++.dg/cpp1z/class-deduction44.C
index af91c89e463..95caa992a21 100644
--- i/gcc/testsuite/g++.dg/cpp1z/class-deduction44.C
+++ w/gcc/testsuite/g++.dg/cpp1z/class-deduction44.C
@@ -3,4 +3,4 @@
 
 template <typename> struct A;
 template <typename> struct B : A < B { , // { dg-error ""  }
-// { dg-error "-:expected"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C w/gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C
index 4a2519b3a7c..f905e4f3cc9 100644
--- i/gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C
+++ w/gcc/testsuite/g++.dg/diagnostic/unclosed-extern-c.C
@@ -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"  } */
+/* { dg-error "-:expected '.' at end of input" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/g++.dg/diagnostic/unclosed-function.C w/gcc/testsuite/g++.dg/diagnostic/unclosed-function.C
index c3a0bc67868..4d841d5c6f4 100644
--- i/gcc/testsuite/g++.dg/diagnostic/unclosed-function.C
+++ w/gcc/testsuite/g++.dg/diagnostic/unclosed-function.C
@@ -1,4 +1,4 @@
 void test (void)
 { /* { dg-message "1: to match this '.'" } */
   int filler;
-  /* { dg-error "-:expected '.' at end of input" } */
+  /* { dg-error "-:expected '.' at end of input" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C w/gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C
index 959354fc912..0887bc1e813 100644
--- i/gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C
+++ w/gcc/testsuite/g++.dg/diagnostic/unclosed-namespace.C
@@ -1,3 +1,3 @@
 namespace unclosed { /* { dg-message "20: to match this '.'" } */
 int filler;
-/* { dg-error "-:expected '.' at end of input" } */
+/* { dg-error "-:expected '.' at end of input" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C w/gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C
index cf8f1e419bb..e68e5996204 100644
--- i/gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C
+++ w/gcc/testsuite/g++.dg/diagnostic/unclosed-struct.C
@@ -1,3 +1,3 @@
 struct unclosed { /* { dg-message "17: to match this '.'" } */
   int dummy;
-  // { dg-error "-:expected"  }
+  // { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/ext/pr84598.C w/gcc/testsuite/g++.dg/ext/pr84598.C
index 4b2cc07b474..8b78e0fddea 100644
--- i/gcc/testsuite/g++.dg/ext/pr84598.C
+++ w/gcc/testsuite/g++.dg/ext/pr84598.C
@@ -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" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/other/switch4.C w/gcc/testsuite/g++.dg/other/switch4.C
index 63203460a39..5d0047b89c8 100644
--- i/gcc/testsuite/g++.dg/other/switch4.C
+++ w/gcc/testsuite/g++.dg/other/switch4.C
@@ -4,4 +4,4 @@ class a b;  // { dg-error "aggregate" }
 void c() {
   switch ()  // { dg-error "expected" }
   case b  // { dg-error "expected" }
-    // { dg-error "-:expected" }
+    // { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/attr4.C w/gcc/testsuite/g++.dg/parse/attr4.C
index 7713fc96c64..160c33e2625 100644
--- i/gcc/testsuite/g++.dg/parse/attr4.C
+++ w/gcc/testsuite/g++.dg/parse/attr4.C
@@ -1,3 +1,4 @@
 // PR c++/93684 - ICE-on-invalid with broken attribute.
 
-[[a:: // { dg-error "expected|expected" }
+[[a:: // { dg-error "expected" }
+  // { dg-error "-:expected" "" { target c++14 } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/cond4.C w/gcc/testsuite/g++.dg/parse/cond4.C
index ae210e0d750..893caeaa571 100644
--- i/gcc/testsuite/g++.dg/parse/cond4.C
+++ w/gcc/testsuite/g++.dg/parse/cond4.C
@@ -4,3 +4,4 @@
 void foo()                                                                                                                              
 {                                                                                                                                       
   if (struct A{}// { dg-error "types may not be defined|expected" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash10.C w/gcc/testsuite/g++.dg/parse/crash10.C
index 0a1a70349f1..7e2dec6bcb3 100644
--- i/gcc/testsuite/g++.dg/parse/crash10.C
+++ w/gcc/testsuite/g++.dg/parse/crash10.C
@@ -9,4 +9,4 @@ class
 {
   typename::
 ; // { dg-error "expected" }
- // { dg-error "-:expected" }
+ // { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash18.C w/gcc/testsuite/g++.dg/parse/crash18.C
index bf68be1a73c..596d3109ccc 100644
--- i/gcc/testsuite/g++.dg/parse/crash18.C
+++ w/gcc/testsuite/g++.dg/parse/crash18.C
@@ -4,4 +4,4 @@
 // PR 18095: ICE
 // Origin: Volker Reichelt <reichelt@gcc.gnu.org>
 
-struct A // { dg-error "-:expected" }
+struct A // { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash27.C w/gcc/testsuite/g++.dg/parse/crash27.C
index 217928781d3..08977b2a4a8 100644
--- i/gcc/testsuite/g++.dg/parse/crash27.C
+++ w/gcc/testsuite/g++.dg/parse/crash27.C
@@ -1,4 +1,5 @@
 // Bug: 23225
 
 void Dispatcher()
-	 (__builtin_offsetof (ArgsType, largeMsgLen)) // { dg-error "initialize|end of input" }
+	 (__builtin_offsetof (ArgsType, largeMsgLen)) // { dg-error "initialize" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash34.C w/gcc/testsuite/g++.dg/parse/crash34.C
index 181e5841747..86f79cc4aef 100644
--- i/gcc/testsuite/g++.dg/parse/crash34.C
+++ w/gcc/testsuite/g++.dg/parse/crash34.C
@@ -3,4 +3,5 @@
 
 void foo()
 {
-  namespace N { /* { dg-error "is not allowed|at end of input" } */
+  namespace N { /* { dg-error "is not allowed" } */
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash35.C w/gcc/testsuite/g++.dg/parse/crash35.C
index 3cae70949db..05f0a631a31 100644
--- i/gcc/testsuite/g++.dg/parse/crash35.C
+++ w/gcc/testsuite/g++.dg/parse/crash35.C
@@ -4,4 +4,4 @@
 struct a {};
 
 class foo : public a, a		// { dg-error "duplicate base" }
-{ // { dg-error "-:at end of input" } 
+{ // { dg-error "-:at end of input" "" { target *-*-* } .+1 } 
diff --git i/gcc/testsuite/g++.dg/parse/crash52.C w/gcc/testsuite/g++.dg/parse/crash52.C
index bc7f03c8d97..5dfb69c41d6 100644
--- i/gcc/testsuite/g++.dg/parse/crash52.C
+++ w/gcc/testsuite/g++.dg/parse/crash52.C
@@ -1,3 +1,4 @@
 // PR c++/39053
 
-void foo() = // { dg-error "initialized|expected" }
+void foo() = // { dg-error "initialized" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash59.C w/gcc/testsuite/g++.dg/parse/crash59.C
index 59947515943..7526b08e105 100644
--- i/gcc/testsuite/g++.dg/parse/crash59.C
+++ w/gcc/testsuite/g++.dg/parse/crash59.C
@@ -1,4 +1,4 @@
 // PR c++/53003
 
 struct A{ void a{} return b  // { dg-error "16:function definition" }
-// { dg-error "-:expected" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash61.C w/gcc/testsuite/g++.dg/parse/crash61.C
index e41e15105af..713fe9f15e1 100644
--- i/gcc/testsuite/g++.dg/parse/crash61.C
+++ w/gcc/testsuite/g++.dg/parse/crash61.C
@@ -5,4 +5,4 @@
 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 } }
+// { dg-error "-:expected" "" { target c++11 } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/crash67.C w/gcc/testsuite/g++.dg/parse/crash67.C
index 8ae6e32aa50..2a5bb3f1d91 100644
--- i/gcc/testsuite/g++.dg/parse/crash67.C
+++ w/gcc/testsuite/g++.dg/parse/crash67.C
@@ -4,4 +4,4 @@
 class x0;
 template <x1> x2() {  // { dg-error "declared|type" }
 x0 x3 = x3. // { dg-error "incomplete type" }
-// { dg-error "-:expected" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/error14.C w/gcc/testsuite/g++.dg/parse/error14.C
index 15ebe24f4d7..fd654180007 100644
--- i/gcc/testsuite/g++.dg/parse/error14.C
+++ w/gcc/testsuite/g++.dg/parse/error14.C
@@ -20,4 +20,4 @@ struct X
 		  //    }
 
 };   // { dg-error "1:expected primary-expression before '.' token" "primary"  }
-// { dg-error "-:expected" "at end of input" }
+// { dg-error "-:expected" "at end of input" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/error56.C w/gcc/testsuite/g++.dg/parse/error56.C
index aa0b5d2bed2..11d31973138 100644
--- i/gcc/testsuite/g++.dg/parse/error56.C
+++ w/gcc/testsuite/g++.dg/parse/error56.C
@@ -4,4 +4,4 @@ template <0> int __copy_streambufs_eof; // { dg-error "" }
 class {
 // { dg-error "forbids" "" { target *-*-* } .+1 }
     friend __copy_streambufs_eof <> ( // { dg-error "" }
- // { dg-error "-:expected" }
+ // { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/invalid1.C w/gcc/testsuite/g++.dg/parse/invalid1.C
index 72bc720bedc..cb4ef1a6902 100644
--- i/gcc/testsuite/g++.dg/parse/invalid1.C
+++ w/gcc/testsuite/g++.dg/parse/invalid1.C
@@ -3,4 +3,4 @@
 // { dg-options "-w" }
 
 int foo ( foo += *[ // { dg-error "expected" }
-// { dg-error "-:invalid|expected" }
+// { dg-error "-:invalid|expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/parameter-declaration-1.C w/gcc/testsuite/g++.dg/parse/parameter-declaration-1.C
index 98e82c89223..c6106d5206e 100644
--- i/gcc/testsuite/g++.dg/parse/parameter-declaration-1.C
+++ w/gcc/testsuite/g++.dg/parse/parameter-declaration-1.C
@@ -4,4 +4,4 @@
 
 struct {
   a(void = 0; a(0), a(0) // { dg-error "" }
-// { dg-error "-:expected" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C w/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C
index bf329248f6b..28048bd1a9a 100644
--- i/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C
+++ w/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C
@@ -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" }
+  // { dg-error "-:at end of input" "end" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/parser-pr28152.C w/gcc/testsuite/g++.dg/parse/parser-pr28152.C
index 048cb501a57..34617340fab 100644
--- i/gcc/testsuite/g++.dg/parse/parser-pr28152.C
+++ w/gcc/testsuite/g++.dg/parse/parser-pr28152.C
@@ -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" }
+  // { dg-error "-:at end of input" "end" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/parse/pr68722.C w/gcc/testsuite/g++.dg/parse/pr68722.C
index 2901cbfe191..26f6d11cfe1 100644
--- i/gcc/testsuite/g++.dg/parse/pr68722.C
+++ w/gcc/testsuite/g++.dg/parse/pr68722.C
@@ -6,4 +6,4 @@ 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" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/pr46852.C w/gcc/testsuite/g++.dg/pr46852.C
index 9be1b92413c..5cfeaf96e19 100644
--- i/gcc/testsuite/g++.dg/pr46852.C
+++ w/gcc/testsuite/g++.dg/pr46852.C
@@ -5,4 +5,4 @@ template
 <
 class
 { // { dg-error "" }
-// { dg-error "-:"  }
+// { dg-error "-:" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/pr46868.C w/gcc/testsuite/g++.dg/pr46868.C
index dec79aaf114..25b8c966f4d 100644
--- i/gcc/testsuite/g++.dg/pr46868.C
+++ w/gcc/testsuite/g++.dg/pr46868.C
@@ -2,4 +2,4 @@
 // { dg-do compile }
 
 template < int > struct S { S < // { dg-error "" }
-  // { dg-error "-:expected" }
+  // { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/template/crash115.C w/gcc/testsuite/g++.dg/template/crash115.C
index 84b284770ee..c1a72352714 100644
--- i/gcc/testsuite/g++.dg/template/crash115.C
+++ w/gcc/testsuite/g++.dg/template/crash115.C
@@ -1,4 +1,4 @@
 // PR c++/56534
 
 template < struct template rebind < > // { dg-error "expected|must follow" }
-// { dg-error "-:expected"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/template/crash43.C w/gcc/testsuite/g++.dg/template/crash43.C
index a5161d887b9..3647a17cad8 100644
--- i/gcc/testsuite/g++.dg/template/crash43.C
+++ w/gcc/testsuite/g++.dg/template/crash43.C
@@ -5,4 +5,4 @@ extern "C" {
   struct ___is_pod {
     enum {
       __value = (sizeof(__gnu_internal::__test_type<_Tp>(0)))}; // { dg-error "expected|declared"  }
-// { dg-error "-:expected"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/template/crash90.C w/gcc/testsuite/g++.dg/template/crash90.C
index 4cfc40822a8..e2a58e31819 100644
--- i/gcc/testsuite/g++.dg/template/crash90.C
+++ w/gcc/testsuite/g++.dg/template/crash90.C
@@ -4,4 +4,6 @@ template < unsigned >
 struct A ;
 template < typename >
 struct B ;
-template < typename T , A < B < T > {}// { dg-error "initializer|parse error|type|expected" }
+template < typename T , A < B < T > {} // { dg-error "parse error|non-type|initializer" }
+
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/template/error-recovery1.C w/gcc/testsuite/g++.dg/template/error-recovery1.C
index 05f39803071..6f9ce6d6bc2 100644
--- i/gcc/testsuite/g++.dg/template/error-recovery1.C
+++ w/gcc/testsuite/g++.dg/template/error-recovery1.C
@@ -7,4 +7,4 @@ template < typename > struct T
   template < bool > struct T < S > // { dg-error "" }
   {
     void f () { // { dg-error "expected" }
-// { dg-error "-:expected"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.dg/template/error57.C w/gcc/testsuite/g++.dg/template/error57.C
index f3d87c53bca..121fbb1d523 100644
--- i/gcc/testsuite/g++.dg/template/error57.C
+++ w/gcc/testsuite/g++.dg/template/error57.C
@@ -2,4 +2,4 @@
 
 template <int()> struct a;
 template <int(b)> a < b		// { dg-error "int" }
-// { dg-error "-:expected"  }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/g++.old-deja/g++.other/crash31.C w/gcc/testsuite/g++.old-deja/g++.other/crash31.C
index 734c3f4e31a..610dfe11270 100644
--- i/gcc/testsuite/g++.old-deja/g++.other/crash31.C
+++ w/gcc/testsuite/g++.old-deja/g++.other/crash31.C
@@ -7,4 +7,4 @@ struct foo
 {
   foo();
 };
-// { dg-error "-:expected" }
+// { dg-error "-:expected" "" { target *-*-* } .+1 }
diff --git i/gcc/testsuite/gcc.dg/empty-source-2.c w/gcc/testsuite/gcc.dg/empty-source-2.c
index e0180ec9475..67906f9e8dd 100644
--- i/gcc/testsuite/gcc.dg/empty-source-2.c
+++ w/gcc/testsuite/gcc.dg/empty-source-2.c
@@ -3,4 +3,4 @@
 /* { dg-do compile } */
 /* { dg-options "-pedantic" } */
 
-/* { dg-warning "-:ISO C forbids an empty translation unit" "empty" } */
+/* { dg-warning "-:ISO C forbids an empty translation unit" "empty" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/gcc.dg/empty-source-3.c w/gcc/testsuite/gcc.dg/empty-source-3.c
index f8c58b3ef3f..f2877159fe4 100644
--- i/gcc/testsuite/gcc.dg/empty-source-3.c
+++ w/gcc/testsuite/gcc.dg/empty-source-3.c
@@ -4,4 +4,4 @@
 /* { dg-do compile } */
 /* { dg-options "-pedantic-errors" } */
 
-/* { dg-error "-:ISO C forbids an empty translation unit" "empty" } */
+/* { dg-error "-:ISO C forbids an empty translation unit" "empty" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/gcc.dg/noncompile/pr30552-3.c w/gcc/testsuite/gcc.dg/noncompile/pr30552-3.c
index 7b48e763ece..23cc7e6b253 100644
--- i/gcc/testsuite/gcc.dg/noncompile/pr30552-3.c
+++ w/gcc/testsuite/gcc.dg/noncompile/pr30552-3.c
@@ -12,4 +12,5 @@ int main()
   int g()
     int a[( {int b} )]; /* { dg-error "braced-group within expression allowed only inside a function|declaration for parameter" } */
   return 0; /* { dg-error "expected declaration specifiers before" } */
-} /* { dg-error "expected declaration specifiers before|end of input|expected declaration or statement at end of input" } */
+} /* { dg-error "expected declaration" } */
+/* { dg-error "-:expected" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/gcc.dg/noncompile/pr35447-1.c w/gcc/testsuite/gcc.dg/noncompile/pr35447-1.c
index b9bbb733fae..499b9595f3c 100644
--- i/gcc/testsuite/gcc.dg/noncompile/pr35447-1.c
+++ w/gcc/testsuite/gcc.dg/noncompile/pr35447-1.c
@@ -4,4 +4,5 @@
 void foo()
 {
   ({ int i().; }); /* { dg-error "expected" } */
-} /* { dg-error "-:expected" } */
+} /* { dg-error "expected declaration" }
+/* { dg-error "-:expected" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/gcc.dg/pr20245-1.c w/gcc/testsuite/gcc.dg/pr20245-1.c
index b5767d88b7b..ac880740662 100644
--- i/gcc/testsuite/gcc.dg/pr20245-1.c
+++ w/gcc/testsuite/gcc.dg/pr20245-1.c
@@ -2,4 +2,5 @@
 /* { dg-do compile } */
 /* { dg-options "" } */
 
-void foo() x; /* { dg-error "-:expected" } */
+void foo() x; /* { dg-error "expected" } */
+/* { dg-error "-:expected" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/gcc.dg/pr28419.c w/gcc/testsuite/gcc.dg/pr28419.c
index 9974864034b..d418a165b1e 100644
--- i/gcc/testsuite/gcc.dg/pr28419.c
+++ w/gcc/testsuite/gcc.dg/pr28419.c
@@ -1,4 +1,4 @@
 /* { dg-do compile } */
 void foo() 
 const char* p = __FUNCTION__; /* { dg-error "" } */
-/* { dg-error "-:expected" "" } */
+/* { dg-error "-:expected" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c w/gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c
index fffb4d7011a..28d898bba92 100644
--- i/gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c
+++ w/gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c
@@ -1,2 +1,2 @@
 void __RTL test (void)
-{ /* { dg-error "-:no closing brace" } */
+{ /* { dg-error "-:no closing brace" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/gcc.dg/unclosed-init.c w/gcc/testsuite/gcc.dg/unclosed-init.c
index 3deb88e777c..16c42c43e55 100644
--- i/gcc/testsuite/gcc.dg/unclosed-init.c
+++ w/gcc/testsuite/gcc.dg/unclosed-init.c
@@ -1,3 +1,3 @@
 int unclosed[] = { /* { dg-message "18: to match this '.'" } */
   42
- /* { dg-error "-: expected '.' at end of input" } */
+ /* { dg-error "-: expected '.' at end of input" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/obj-c++.dg/property/property-neg-6.mm w/gcc/testsuite/obj-c++.dg/property/property-neg-6.mm
index c4a22eb6d20..1db6f0ba1b8 100644
--- i/gcc/testsuite/obj-c++.dg/property/property-neg-6.mm
+++ w/gcc/testsuite/obj-c++.dg/property/property-neg-6.mm
@@ -6,4 +6,4 @@
   int iVar;
 }
 @property int FooBar /* { dg-error "expected ';' at end of input" } */
-		     /* { dg-error "expected '@end' at end of input" "" { target *-*-* } .-1 } */
+		     /* { dg-error "-:expected '@end' at end of input" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/obj-c++.dg/syntax-error-10.mm w/gcc/testsuite/obj-c++.dg/syntax-error-10.mm
index e45abccfc7d..6fcf96f769e 100644
--- i/gcc/testsuite/obj-c++.dg/syntax-error-10.mm
+++ w/gcc/testsuite/obj-c++.dg/syntax-error-10.mm
@@ -1 +1,2 @@
-@interface /* { dg-error "expected identifier" } */
+@interface
+/* { dg-error "-:expected identifier" "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/obj-c++.dg/syntax-error-8.mm w/gcc/testsuite/obj-c++.dg/syntax-error-8.mm
index 731ffda5f5e..f7cfe0e0895 100644
--- i/gcc/testsuite/obj-c++.dg/syntax-error-8.mm
+++ w/gcc/testsuite/obj-c++.dg/syntax-error-8.mm
@@ -1 +1 @@
-@interface A /* { dg-error "expected ..end." } */
\ No newline at end of file
+@interface A /* { dg-error "-:expected ..end." "" { target *-*-* } .+1 } */
diff --git i/gcc/testsuite/obj-c++.dg/syntax-error-9.mm w/gcc/testsuite/obj-c++.dg/syntax-error-9.mm
index 352dd34cf94..ae104e5c140 100644
--- i/gcc/testsuite/obj-c++.dg/syntax-error-9.mm
+++ w/gcc/testsuite/obj-c++.dg/syntax-error-9.mm
@@ -1,3 +1,3 @@
 @implementation SaturnDoc /* { dg-warning "cannot find interface declaration" } */
 - read: (void*)aStream ggg /* { dg-error "expected .:. at end of input" } */
-/* { dg-error "expected ..end. at end of input" "" { target *-*-* } .-1 } */
\ No newline at end of file
+/* { dg-error "-:expected ..end. at end of input" "" { target *-*-* } .+1 } */
