]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/26785 ("extra qualification" error gives line number of end of declaration)
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Wed, 6 Aug 2008 16:37:06 +0000 (16:37 +0000)
committerManuel López-Ibáñez <manu@gcc.gnu.org>
Wed, 6 Aug 2008 16:37:06 +0000 (16:37 +0000)
2008-08-06  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>

PR 26785
* diagnostic.c (permerror_at): New.
* toplev.h (permerror_at): Declare.
cp/
* decl.c (grokdeclarator): Use explicit location with
        permerror_at.
testsuite/
* g++.dg/warn/pr26785.C: New.

From-SVN: r138816

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/diagnostic.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/pr26785.C [new file with mode: 0644]
gcc/toplev.h

index e9a060604c08d80aec7b93ad359325312036c85d..00b3b7dabdb1b829a8a03675160832133df1cd4b 100644 (file)
@@ -1,3 +1,9 @@
+2008-08-06  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+       
+       PR 26785
+       * diagnostic.c (permerror_at): New.
+       * toplev.h (permerror_at): Declare.
+       
 2008-08-06  Victor Kaplansky  <victork@il.ibm.com>
            Ira Rosen  <irar@il.ibm.com>
 
index c55e4b5c3066c940cc61050d170d43b3efd95874..4dfd564a7ec582fbf7d50ebd5bdd24c2d1eceae5 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-06  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR 26785
+       * decl.c (grokdeclarator): Use explicit location with permerror_at.
+       
 2008-08-06  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
 
        PR 8715
index 69fa647881c16f38bd7dd94d65731cbf38a12a71..4c340e28a915eb074fa21a5d65740c91d4d9af3e 100644 (file)
@@ -8437,8 +8437,9 @@ grokdeclarator (const cp_declarator *declarator,
              friendp = 0;
            }
          else
-           permerror ("extra qualification %<%T::%> on member %qs",
-                      ctype, name);
+           permerror_at (declarator->id_loc, 
+                         "extra qualification %<%T::%> on member %qs",
+                         ctype, name);
        }
       else if (/* If the qualifying type is already complete, then we
                  can skip the following checks.  */
index 49b3f9a058ff5c4a2fb8d2071360a21dc183b142..69b7e4b534e9e8235c9275e6ce899d8d8499bc98 100644 (file)
@@ -554,10 +554,26 @@ pedwarn0 (const char *gmsgid, ...)
   va_end (ap);
 }
 
-/* A "permissive" error: issues an error unless -fpermissive was given
-   on the command line, in which case it issues a warning.  Use this
-   for things that really should be errors but we want to support
-   legacy code.  */
+/* A "permissive" error at LOCATION: issues an error unless
+   -fpermissive was given on the command line, in which case it issues
+   a warning.  Use this for things that really should be errors but we
+   want to support legacy code.  */
+
+void
+permerror_at (location_t location, const char *gmsgid, ...)
+{
+  diagnostic_info diagnostic;
+  va_list ap;
+
+  va_start (ap, gmsgid);
+  diagnostic_set_info (&diagnostic, gmsgid, &ap, location,
+                      permissive_error_kind ());
+  diagnostic.option_index = OPT_fpermissive;
+  report_diagnostic (&diagnostic);
+  va_end (ap);
+}
+
+/* Equivalent to permerror_at (input_location, ...).  */
 
 void
 permerror (const char *gmsgid, ...)
index ea0a55b2af9f7ca6fbe9fcab69f6367bf1ea68c4..d1bed88f968c2f78984e4e0f131050839a420af5 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-06  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
+
+       PR 26785
+       * g++.dg/warn/pr26785.C: New.
+               
 2008-08-06  Victor Kaplansky  <victork@il.ibm.com>
 
        * gcc.dg/vect/costmodel/ppc/costmodel-slp-34.c: New test.
diff --git a/gcc/testsuite/g++.dg/warn/pr26785.C b/gcc/testsuite/g++.dg/warn/pr26785.C
new file mode 100644 (file)
index 0000000..b3c0313
--- /dev/null
@@ -0,0 +1,10 @@
+// PR 26785
+// { dg-do compile }
+// { dg-options "-fshow-column" }
+
+class foo {
+  foo::foo // { dg-error "3: error: extra qualification" }
+  (int a, 
+   int b,
+   int c);
+};
index f1e4fe500f6330725b30fdec3e2203fb4ef18512..1a015e69e0eb112ed034f8c992ecaaf440ac4727 100644 (file)
@@ -68,6 +68,8 @@ extern void pedwarn0 (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
 /* Pass one of the OPT_W* from options.h as the first parameter.  */
 extern void pedwarn (int, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
 extern void permerror (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
+extern void permerror_at (location_t, const char *, ...)
+     ATTRIBUTE_GCC_DIAG(2,3);
 extern void sorry (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
 extern void inform (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
 extern void verbatim (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);