re PR c++/71238 (Undeclared function message imprecisely points to error column)
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 30 May 2016 19:18:13 +0000 (19:18 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 30 May 2016 19:18:13 +0000 (19:18 +0000)
/cp
2016-05-30  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/71238
* lex.c (unqualified_name_lookup_error): Take a location too.
(unqualified_fn_lookup_error): Take a cp_expr.
* cp-tree.h (unqualified_name_lookup_error,
unqualified_fn_lookup_error): Adjust declarations.
* semantics.c (perform_koenig_lookup): Adjust
unqualified_fn_lookup_error call, pass the location of
the identifier too as part of a cp_expr.

/testsuite
2016-05-30  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/71238
* g++.dg/parse/pr71238.C: New.
* g++.dg/concepts/friend1.C: Test column numbers too.
* g++.dg/cpp0x/initlist31.C: Likewise.
* g++.dg/cpp0x/pr51420.C: Likewise.
* g++.dg/cpp0x/udlit-declare-neg.C: Likewise.
* g++.dg/cpp0x/udlit-member-neg.C: Likewise.
* g++.dg/ext/builtin3.C: Likewise.
* g++.dg/lookup/friend12.C: Likewise.
* g++.dg/lookup/friend7.C: Likewise.
* g++.dg/lookup/koenig1.C: Likewise.
* g++.dg/lookup/koenig5.C: Likewise.
* g++.dg/lookup/used-before-declaration.C: Likewise.
* g++.dg/overload/koenig1.C: Likewise.
* g++.dg/template/crash65.C: Likewise.
* g++.dg/template/friend57.C: Likewise.
* g++.dg/warn/Wshadow-5.C: Likewise.
* g++.dg/warn/Wunused-8.C: Likewise.
* g++.old-deja/g++.bugs/900211_01.C: Likewise.
* g++.old-deja/g++.jason/lineno5.C: Likewise.
* g++.old-deja/g++.jason/member.C: Likewise.
* g++.old-deja/g++.jason/report.C: Likewise.
* g++.old-deja/g++.jason/scoping12.C: Likewise.
* g++.old-deja/g++.law/visibility20.C: Likewise.
* g++.old-deja/g++.ns/koenig5.C: Likewise.
* g++.old-deja/g++.other/static5.C: Likewise.
* g++.old-deja/g++.pt/overload2.C: Likewise.

From-SVN: r236896

31 files changed:
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/lex.c
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/concepts/friend1.C
gcc/testsuite/g++.dg/cpp0x/initlist31.C
gcc/testsuite/g++.dg/cpp0x/pr51420.C
gcc/testsuite/g++.dg/cpp0x/udlit-declare-neg.C
gcc/testsuite/g++.dg/cpp0x/udlit-member-neg.C
gcc/testsuite/g++.dg/ext/builtin3.C
gcc/testsuite/g++.dg/lookup/friend12.C
gcc/testsuite/g++.dg/lookup/friend7.C
gcc/testsuite/g++.dg/lookup/koenig1.C
gcc/testsuite/g++.dg/lookup/koenig5.C
gcc/testsuite/g++.dg/lookup/used-before-declaration.C
gcc/testsuite/g++.dg/overload/koenig1.C
gcc/testsuite/g++.dg/parse/pr71238.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/crash65.C
gcc/testsuite/g++.dg/template/friend57.C
gcc/testsuite/g++.dg/warn/Wshadow-5.C
gcc/testsuite/g++.dg/warn/Wunused-8.C
gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C
gcc/testsuite/g++.old-deja/g++.jason/lineno5.C
gcc/testsuite/g++.old-deja/g++.jason/member.C
gcc/testsuite/g++.old-deja/g++.jason/report.C
gcc/testsuite/g++.old-deja/g++.jason/scoping12.C
gcc/testsuite/g++.old-deja/g++.law/visibility20.C
gcc/testsuite/g++.old-deja/g++.ns/koenig5.C
gcc/testsuite/g++.old-deja/g++.other/static5.C
gcc/testsuite/g++.old-deja/g++.pt/overload2.C

index 9b35abc66bc922dc6da4b0dafcde158feccc3385..84d7e0ac7ff23ffa456811a87740545e037f5491 100644 (file)
@@ -1,3 +1,14 @@
+2016-05-30  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/71238
+       * lex.c (unqualified_name_lookup_error): Take a location too.
+       (unqualified_fn_lookup_error): Take a cp_expr.
+       * cp-tree.h (unqualified_name_lookup_error,
+       unqualified_fn_lookup_error): Adjust declarations.
+       * semantics.c (perform_koenig_lookup): Adjust
+       unqualified_fn_lookup_error call, pass the location of
+       the identifier too as part of a cp_expr.
+
 2016-05-30  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/71099
index f562a5255b1f44d90f8ee258903da4175ebe41f9..14ba12073eec85bb5180eebca3c9ebf294184729 100644 (file)
@@ -5974,8 +5974,9 @@ extern tree build_vtbl_address                  (tree);
 extern void cxx_dup_lang_specific_decl         (tree);
 extern void yyungetc                           (int, int);
 
-extern tree unqualified_name_lookup_error      (tree);
-extern tree unqualified_fn_lookup_error                (tree);
+extern tree unqualified_name_lookup_error      (tree,
+                                                location_t = UNKNOWN_LOCATION);
+extern tree unqualified_fn_lookup_error                (cp_expr);
 extern tree build_lang_decl                    (enum tree_code, tree, tree);
 extern tree build_lang_decl_loc                        (location_t, enum tree_code, tree, tree);
 extern void retrofit_lang_decl                 (tree);
index e69793e7f3592dc252c78ca0341e41525d78fe92..43827e5717906fa3a618c4e850fa7c5715d8d054 100644 (file)
@@ -443,27 +443,29 @@ handle_pragma_java_exceptions (cpp_reader* /*dfile*/)
    IDENTIFIER_NODE) failed.  Returns the ERROR_MARK_NODE.  */
 
 tree
-unqualified_name_lookup_error (tree name)
+unqualified_name_lookup_error (tree name, location_t loc)
 {
+  if (loc == UNKNOWN_LOCATION)
+    loc = EXPR_LOC_OR_LOC (name, input_location);
+
   if (IDENTIFIER_OPNAME_P (name))
     {
       if (name != ansi_opname (ERROR_MARK))
-       error ("%qD not defined", name);
+       error_at (loc, "%qD not defined", name);
     }
   else
     {
       if (!objc_diagnose_private_ivar (name))
        {
-         error ("%qD was not declared in this scope", name);
-         suggest_alternatives_for (location_of (name), name);
+         error_at (loc, "%qD was not declared in this scope", name);
+         suggest_alternatives_for (loc, name);
        }
       /* Prevent repeated error messages by creating a VAR_DECL with
         this NAME in the innermost block scope.  */
       if (local_bindings_p ())
        {
          tree decl;
-         decl = build_decl (input_location,
-                            VAR_DECL, name, error_mark_node);
+         decl = build_decl (loc, VAR_DECL, name, error_mark_node);
          DECL_CONTEXT (decl) = current_function_decl;
          push_local_binding (name, decl, 0);
          /* Mark the variable as used so that we do not get warnings
@@ -475,13 +477,18 @@ unqualified_name_lookup_error (tree name)
   return error_mark_node;
 }
 
-/* Like unqualified_name_lookup_error, but NAME is an unqualified-id
-   used as a function.  Returns an appropriate expression for
-   NAME.  */
+/* Like unqualified_name_lookup_error, but NAME_EXPR is an unqualified-id
+   NAME, encapsulated with its location in a CP_EXPR, used as a function.
+   Returns an appropriate expression for NAME.  */
 
 tree
-unqualified_fn_lookup_error (tree name)
+unqualified_fn_lookup_error (cp_expr name_expr)
 {
+  tree name = name_expr.get_value ();
+  location_t loc = name_expr.get_location ();
+  if (loc == UNKNOWN_LOCATION)
+    loc = input_location;
+
   if (processing_template_decl)
     {
       /* In a template, it is invalid to write "f()" or "f(3)" if no
@@ -494,7 +501,7 @@ unqualified_fn_lookup_error (tree name)
         Note that we have the exact wording of the following message in
         the manual (trouble.texi, node "Name lookup"), so they need to
         be kept in synch.  */
-      permerror (input_location, "there are no arguments to %qD that depend on a template "
+      permerror (loc, "there are no arguments to %qD that depend on a template "
                 "parameter, so a declaration of %qD must be available",
                 name, name);
 
@@ -503,7 +510,7 @@ unqualified_fn_lookup_error (tree name)
          static bool hint;
          if (!hint)
            {
-             inform (input_location, "(if you use %<-fpermissive%>, G++ will accept your "
+             inform (loc, "(if you use %<-fpermissive%>, G++ will accept your "
                     "code, but allowing the use of an undeclared name is "
                     "deprecated)");
              hint = true;
@@ -512,7 +519,7 @@ unqualified_fn_lookup_error (tree name)
       return name;
     }
 
-  return unqualified_name_lookup_error (name);
+  return unqualified_name_lookup_error (name, loc);
 }
 
 /* Wrapper around build_lang_decl_loc(). Should gradually move to
index 253d31a4f4a7251a6b0f705f272fc2c17efa0910..8e682c537955456dd69a54f71c3ee2754f795fce 100644 (file)
@@ -2210,6 +2210,7 @@ perform_koenig_lookup (cp_expr fn, vec<tree, va_gc> *args,
   tree functions = NULL_TREE;
   tree tmpl_args = NULL_TREE;
   bool template_id = false;
+  location_t loc = fn.get_location ();
 
   if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
     {
@@ -2245,7 +2246,7 @@ perform_koenig_lookup (cp_expr fn, vec<tree, va_gc> *args,
        {
          /* The unqualified name could not be resolved.  */
          if (complain)
-           fn = unqualified_fn_lookup_error (identifier);
+           fn = unqualified_fn_lookup_error (cp_expr (identifier, loc));
          else
            fn = identifier;
        }
index 67cab5797a500c051d4b2478f90c9b54bac3493f..4859224ed56be65ef88571399c42d4cd693b67ba 100644 (file)
@@ -1,3 +1,33 @@
+2016-05-30  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/71238
+       * g++.dg/parse/pr71238.C: New.
+       * g++.dg/concepts/friend1.C: Test column numbers too.
+       * g++.dg/cpp0x/initlist31.C: Likewise.
+       * g++.dg/cpp0x/pr51420.C: Likewise.
+       * g++.dg/cpp0x/udlit-declare-neg.C: Likewise.
+       * g++.dg/cpp0x/udlit-member-neg.C: Likewise.
+       * g++.dg/ext/builtin3.C: Likewise.
+       * g++.dg/lookup/friend12.C: Likewise.
+       * g++.dg/lookup/friend7.C: Likewise.
+       * g++.dg/lookup/koenig1.C: Likewise.
+       * g++.dg/lookup/koenig5.C: Likewise.
+       * g++.dg/lookup/used-before-declaration.C: Likewise.
+       * g++.dg/overload/koenig1.C: Likewise.
+       * g++.dg/template/crash65.C: Likewise.
+       * g++.dg/template/friend57.C: Likewise.
+       * g++.dg/warn/Wshadow-5.C: Likewise.
+       * g++.dg/warn/Wunused-8.C: Likewise.
+       * g++.old-deja/g++.bugs/900211_01.C: Likewise.
+       * g++.old-deja/g++.jason/lineno5.C: Likewise.
+       * g++.old-deja/g++.jason/member.C: Likewise.
+       * g++.old-deja/g++.jason/report.C: Likewise.
+       * g++.old-deja/g++.jason/scoping12.C: Likewise.
+       * g++.old-deja/g++.law/visibility20.C: Likewise.
+       * g++.old-deja/g++.ns/koenig5.C: Likewise.
+       * g++.old-deja/g++.other/static5.C: Likewise.
+       * g++.old-deja/g++.pt/overload2.C: Likewise.
+
 2016-05-30  Jan Hubicka  <hubicka@ucw.cz>
 
        * gcc.dg/tree-ssa/peel1.c: New testcase.
index 5c418cbf76cfb054c3e97d79f9c336cc7ff757fe..c78940ce813704c8c7714d5a38e780d99de6f29b 100644 (file)
@@ -24,7 +24,7 @@ struct X { } x;
 int main() {
   // f(0); // OK
   f(nt); // { dg-error "cannot call" }
-  f(x);  // { dg-error "not declared" }
+  f(x);  // { dg-error "3:'f' was not declared" }
 
   S<int> si;
   si == si; // OK
index f34a0ca18ab165985db822eef8b6401df0588827..a8a29f9c853d10b2b667673dbc8ef0527e63696b 100644 (file)
@@ -8,6 +8,6 @@ struct string { string(std::initializer_list<char>) { } };
 void f() {
   auto y =
   {
-    string(Equation()) // { dg-error "not declared" }
+    string(Equation()) // { dg-error "12:'Equation' was not declared" }
   }; // { dg-error "unable to deduce" }
 }
index 7aa80e53637741dbdd686686c030015d044a2c90..fc70d46cc90ed24ce4940faeaebcca0707972e74 100644 (file)
@@ -3,6 +3,6 @@
 void
 foo()
 {
-  float x = operator"" _F();  //  { dg-error  "was not declared in this scope" }
+  float x = operator"" _F();  //  { dg-error  "13:'operator\"\"_F' was not declared in this scope" }
   float y = 0_F;  //  { dg-error  "unable to find numeric literal operator" }
 }
index a68e2e020b92613dd3301c67d1cc43059b019643..721f87d4e66ec63e60959ee9768bd3a440ee4c85 100644 (file)
@@ -2,14 +2,14 @@
 
 //  Check that undeclared literal operator calls and literals give appropriate errors.
 
-int i = operator"" _Bar('x');  // { dg-error "was not declared in this scope" }
+int i = operator"" _Bar('x');  // { dg-error "9:'operator\"\"_Bar' was not declared in this scope" }
 int j = 'x'_Bar;  // { dg-error "unable to find character literal operator|with|argument" }
 
-int ii = operator"" _BarCharStr("Howdy, Pardner!");  // { dg-error "was not declared in this scope" }
+int ii = operator"" _BarCharStr("Howdy, Pardner!");  // { dg-error "10:'operator\"\"_BarCharStr' was not declared in this scope" }
 int jj = "Howdy, Pardner!"_BarCharStr;  // { dg-error "unable to find string literal operator|Possible missing length argument" }
 
-unsigned long long iULL = operator"" _BarULL(666ULL);  // { dg-error "was not declared in this scope" }
+unsigned long long iULL = operator"" _BarULL(666ULL);  // { dg-error "27:'operator\"\"_BarULL' was not declared in this scope" }
 unsigned long long jULL = 666_BarULL;  // { dg-error "unable to find numeric literal operator" }
 
-long double iLD = operator"" _BarLD(666.0L);  // { dg-error "was not declared in this scope" }
+long double iLD = operator"" _BarLD(666.0L);  // { dg-error "19:'operator\"\"_BarLD' was not declared in this scope" }
 long double jLD = 666.0_BarLD;  // { dg-error "unable to find numeric literal operator" }
index 2a3145254575d57dd7aff44d5b59e838d3d7f032..b6820661e22c391657caca7d2708f8da08c62c7a 100644 (file)
@@ -7,7 +7,7 @@ public:
   int operator"" _Bar(char32_t);  // { dg-error "must be a non-member function" }
 };
 
-int i = operator"" _Bar(U'x');  // { dg-error "was not declared in this scope" }
+int i = operator"" _Bar(U'x');  // { dg-error "9:'operator\"\"_Bar' was not declared in this scope" }
 int j = U'x'_Bar;  // { dg-error "unable to find character literal operator" }
 
 int
index 001d5f784d27d7f028094f756a524daffde704bd..f168db62488da51ad3b9e956bc1296f36997fe8e 100644 (file)
@@ -9,6 +9,6 @@ extern "C" int printf(char*, ...); // { dg-message "std::printf" }
 }
 
 void foo() {
-  printf("abc");               // { dg-error "not declared" }
+  printf("abc");               // { dg-error "3:'printf' was not declared" }
   // { dg-message "suggested alternative" "suggested alternative" { target *-*-* } 12 }
 }
index 95cfd5fb4d3e33c4ef3b6816b1e0c28a02e48e49..98f508bbe86bf1630e8d853339dfa3c21fb8fc91 100644 (file)
@@ -6,5 +6,5 @@ void foo()
   {
     friend void bar();         // { dg-error "without prior declaration" }
   };
-  bar();                       // { dg-error "not declared" }
+  bar();                       // { dg-error "3:'bar' was not declared" }
 }
index ce9b79f8fe4c1c42a096276b6db08f2fa6f20065..a1e1f3ee9a8471d161011a7235336578139d530e 100644 (file)
@@ -11,7 +11,7 @@ int main()
 struct S { friend void g(); friend void h(S); };
 struct T { friend void g(); friend void h(T); };
 void i() {
-  g();                 // { dg-error "not declared" }
+  g();                 // { dg-error "3:'g' was not declared" }
   S s;
   h(s);
   T t;
index 7273727194c915f527e4201c717c7300e894232f..081211bab1a588234ef8756e3f344255023f9c57 100644 (file)
@@ -9,5 +9,5 @@ class X;
 
 void foo() {
   X x(1); // { dg-error "incomplete type" "" }
-  bar(x); // { dg-error "not declared" "" }
+  bar(x); // { dg-error "3:'bar' was not declared" "" }
 }
index 15fb6cc90a9f69dd8f39b9f48557a4972a18034c..ac35165e618fcfdd4aea0831cda76653a1664c0b 100644 (file)
@@ -31,12 +31,12 @@ void g (N::A *a, M::B *b, O::C *c)
 {
   One (a); // ok
   One (a, b); // ok
-  One (b); // { dg-error "not declared" }
+  One (b); // { dg-error "3:'One' was not declared" }
   // { dg-message "suggested alternatives" "suggested alternative for One" { target *-*-* } 34 }
 
   Two (c); // ok
   Two (a, c); // ok
-  Two (a); // { dg-error "not declared" }
+  Two (a); // { dg-error "3:'Two' was not declared" }
   // { dg-message "suggested alternatives" "suggested alternative for Two" { target *-*-* } 39 }
   Two (a, a); // error masked by earlier error
   Two (b); // error masked by earlier error
@@ -44,6 +44,6 @@ void g (N::A *a, M::B *b, O::C *c)
   
   Three (b); // ok
   Three (a, b); // ok
-  Three (a); // { dg-error "not declared" }
+  Three (a); // { dg-error "3:'Three' was not declared" }
   // { dg-message "suggested alternatives" "suggested alternative for Three" { target *-*-* } 47 }
 }
index b51d270c74abb2abc36bb44c3ef1db0897634cfa..f5dd6efe6ff248d2c13d7bac74e02d6659982335 100644 (file)
@@ -1,5 +1,5 @@
 // Copyroght (C) 2003 Free Software Foundation
 // Origin: PR/12832, Jonathan Wakely <redi@gcc.gnu.org>
 
-void f() { g(); }               // { dg-error "not declared" "" }
+void f() { g(); }               // { dg-error "12:'g' was not declared" "" }
 void g() { }
index a4612591967416a437c8fb727a2979c7115f1104..cd82bf25af34e41e72dcdc56e0349fcfbc1eb228 100644 (file)
@@ -13,7 +13,7 @@ void g ()
 {
   B *bp;
   N::A *ap;
-  f (bp);                      // { dg-error "not declared" }
+  f (bp);                      // { dg-error "3:'f' was not declared" }
   // { dg-message "suggested alternative" "suggested alternative" { target *-*-* } 16 }
   f (ap);
 }
diff --git a/gcc/testsuite/g++.dg/parse/pr71238.C b/gcc/testsuite/g++.dg/parse/pr71238.C
new file mode 100644 (file)
index 0000000..894e828
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/71238
+
+int main()
+{
+    int x=myFunc(3234);  // { dg-error "11:'myFunc' was not declared" }
+}
index 4d49ecf3145ab0ed540a8465b57b529c3132d5d9..68878c525aca2e12282db074cda6e00ff30888bf 100644 (file)
@@ -3,5 +3,5 @@
 struct A
 {
   template<int> template<typename T> friend void foo(T) {} // { dg-error "parameter" }
-  void bar() { foo(0); } // { dg-error "foo" }
+  void bar() { foo(0); } // { dg-error "16:'foo' was not declared" }
 };
index 7077d5e53cb810058a72693796e8eba6262274ec..92c786718af1605458bcbc186db4b359ff595580 100644 (file)
@@ -15,7 +15,7 @@ int
 main ()
 {
   f(1);
-  g(1); // { dg-error "'g' was not declared in this scope" }
+  g(1); // { dg-error "3:'g' was not declared in this scope" }
   g(S());
   h(1);
 }
index 66232913f0e64a7f810bc84ad41ff642c259ecfa..7a90ec9c99760dfbcb2c4c2751f1495132cc88c9 100644 (file)
@@ -7,7 +7,7 @@
 int f (int n)
 {
     int bar (int n) { return n++; } // { dg-error "a function-definition is not allowed here" }
-    return bar (n); // { dg-error "was not declared in this scope" }
+    return bar (n); // { dg-error "12:'bar' was not declared in this scope" }
 }
 
 int g (int i)
index a1c8a1fb4268b8ad7f845f0d41ca11cfe5040d18..db9583bab3d76bc7adea52566c8f0de31d7b9d37 100644 (file)
@@ -5,5 +5,5 @@ int main ()
 {
   // We should not see an "unused" warning about "whatever" on the
   // next line.
-  return whatever (); // { dg-error "declared" }
+  return whatever (); // { dg-error "10:'whatever' was not declared" }
 }
index 3312d3fcab89945244a46164c4c6432d1013eee5..08a5c0ed1bf847605958b411a686ff36a00da341 100644 (file)
@@ -10,7 +10,7 @@
 
 void global_function_0 ()
 {
-  global_function_1 ();                /* { dg-error "" } */
+  global_function_1 ();                /* { dg-error "3:'global_function_1' was not declared" } */
 }
 
 int main () { return 0; }
index f723a222b8c08cce9c2af915feb1545fb200b5c7..aa278070146b7fe58e824f439b54ed769470fef3 100644 (file)
@@ -6,5 +6,5 @@ template <class T> class A;
 int main()
 {
   A<int> *p;
-  undef1();// { dg-error "" } 
+  undef1();// { dg-error "3:'undef1' was not declared" } 
 }
index 1abbdec1fe3d9cf31b52e42c1dff9750a69c1905..af800b1f2a6f12527607cab5a90652063bded464 100644 (file)
@@ -5,31 +5,31 @@ struct Y
   struct X
     {
       int A;
-      int Y::X::* foo () { undef1(1); return &Y::X::A; }// { dg-error "" } foo().*
+      int Y::X::* foo () { undef1(1); return &Y::X::A; }// { dg-error "28:'undef1' was not declared" } foo().*
       int bar () { return A; }
     };
 };
 
 int Y::X::* foo ()
 {
-  undef2(1);// { dg-error "" } foo().*
+  undef2(1);// { dg-error "3:'undef2' was not declared" } foo().*
   return &Y::X::A;
 }
 
 int Y::X::* (* foo2 ())()
 {
-  undef3(1);// { dg-error "" } foo().*
+  undef3(1);// { dg-error "3:'undef3' was not declared" } foo().*
   return foo;
 }
 
 int (Y::X::* bar2 ()) ()
 {
-  undef4(1);// { dg-error "" } foo\(\).*
+  undef4(1);// { dg-error "3:'undef4' was not declared" } foo\(\).*
   return Y::X::bar;// { dg-error "" } foo\(\).*
 }
 
 int Y::X::* (Y::X::* foo3 ())()
 {
-  undef5(1);// { dg-error "" } foo().*
+  undef5(1);// { dg-error "3:'undef5' was not declared" } foo().*
   return Y::X::foo;// { dg-error "" } foo().*
 }
index d78dcc133f9b9a3942d55e64c0500a6a3572a928..7faf30bcb9949ba13e106d10707bac1a99538504 100644 (file)
@@ -37,7 +37,7 @@ int foo (int a = (**bar) (s))
 
 int foo2 (int (*a)(int) = &foo)
 {
-   undef4 (1); // { dg-error "" } implicit declaration
+   undef4 (1); // { dg-error "4:'undef4' was not declared" } implicit declaration
   return 1;
 }
 
@@ -55,7 +55,7 @@ bar2 baz (X::Y y)             // { dg-error "" } in this context
   X::Y f;                      // { dg-error "" } in this context
   bar2 wa [5];
   wa[0] = baz(f);
-  undef2 (1); // { dg-error "" } implicit declaration
+  undef2 (1); // { dg-error "3:'undef2' was not declared" } implicit declaration
 }                              // { dg-warning "no return statement" }
 
 int ninny ()
@@ -70,5 +70,5 @@ int ninny ()
 
 int darg (char X::*p)
 {
-   undef3 (1); // { dg-error "" } implicit declaration
+   undef3 (1); // { dg-error "4:'undef3' was not declared" } implicit declaration
 }                              // { dg-warning "no return statement" }
index a7834163bcf69ae7d5c9f440bbb3c433bb24f5fb..35731e78f67180d091f56d002202727f9c0e3957 100644 (file)
@@ -6,5 +6,5 @@ void f ()
   };
 }
 void h () {
-  g ();                                // { dg-error "" } no g in scope
+  g ();                                // { dg-error "3:'g' was not declared" } no g in scope
 }
index 802274d80aea362050658026c1f74d99aa939319..9edb03c947a5ebf74a99ae0db18c2c1e56b26304 100644 (file)
@@ -31,6 +31,6 @@ int main() {
     Base b;
     Derived d;
     d.noticeThisFunction(&b);
-    printf("gpptest run\n");// { dg-error "" } .*
+    printf("gpptest run\n");// { dg-error "5:'printf' was not declared" } .*
 }
 
index 7c56d5cbc5e1f9df26cd5ed14d2494313f364ab3..635f35e011840dd173cd4569c7a38fa849dfbc03 100644 (file)
@@ -14,6 +14,6 @@ void g()
   foo(new X);            // ok -- DR 218 says that we find the global
                         // foo variable first, and therefore do not
                         // perform argument-dependent lookup.
-  bar(new X);            // { dg-error "not declared" }
+  bar(new X);            // { dg-error "3:'bar' was not declared" }
   // { dg-message "suggested alternative" "suggested alternative" { target *-*-* } 17 }
 }
index b4032bed2bbb761b3f3de78a08f809404105e84e..50e5c4acb0e158ec679216b20a826a35cf41fbe4 100644 (file)
@@ -9,7 +9,7 @@ struct S
 inline void f()
 {
   static S s;
-  atexit (0); // { dg-error "" } implicit declaration
+  atexit (0); // { dg-error "3:'atexit' was not declared" } implicit declaration
 }
 
 
index e53df3e35b1247277a13c7b60d6076261b46ae1c..b438543d445e4e0d5a7791ca3e71df38ccb2061d 100644 (file)
@@ -12,5 +12,5 @@ int
 main()
 {
        C<char*>        c;
-       char*           p = Z(c.O); //{ dg-error "" } ambiguous c.O
+       char*           p = Z(c.O); //{ dg-error "13:'Z' was not declared" } ambiguous c.O
 }