]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c/61861 (Incorrect column number for -Wdiscarded-qualifiers)
authorMarek Polacek <polacek@redhat.com>
Sun, 27 Jul 2014 17:09:38 +0000 (17:09 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Sun, 27 Jul 2014 17:09:38 +0000 (17:09 +0000)
PR c/61861
* macro.c (builtin_macro): Add location parameter.  Set
location of builtin macro to the expansion point.
(enter_macro_context): Pass location to builtin_macro.

* gcc.dg/pr61861.c: New test.

From-SVN: r213102

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr61861.c [new file with mode: 0644]
libcpp/ChangeLog
libcpp/macro.c

index 9f2311b33cd8b5bd817ae3da65ae411f125444a1..48717fc3e8c26a37d7289bb9aef32a38f9188d68 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-27  Marek Polacek  <polacek@redhat.com>
+
+       PR c/61861
+       * gcc.dg/pr61861.c: New test.
+
 2014-07-27  Petr Murzin  <petr.murzin@intel.com>
 
        * gcc.target/i386/avx512f-vbroadcastf64x4-2.c: Fix the uninitialized
diff --git a/gcc/testsuite/gcc.dg/pr61861.c b/gcc/testsuite/gcc.dg/pr61861.c
new file mode 100644 (file)
index 0000000..d902868
--- /dev/null
@@ -0,0 +1,37 @@
+/* { dg-do compile } */
+/* { dg-prune-output "expected" } */
+
+extern void foo (int);
+extern void bar (int, char *);
+
+#define F __FILE__ /* { dg-error "11:passing argument" } */
+#define T __TIME__ /* { dg-error "11:passing argument" } */
+#define D __DATE__ /* { dg-error "11:passing argument" } */
+#define L __LINE__ /* { dg-error "11:passing argument" } */
+
+#define F2 "foo" /* { dg-error "12:passing argument" } */
+#define T2 "foo" /* { dg-error "12:passing argument" } */
+#define D2 "foo" /* { dg-error "12:passing argument" } */
+#define L2 42 /* { dg-error "12:passing argument" } */
+
+void
+f (void)
+{
+  foo (__FILE__); /* { dg-error "8:passing argument" } */
+  foo (__BASE_FILE__); /* { dg-error "8:passing argument" } */
+  foo (__TIME__); /* { dg-error "8:passing argument" } */
+  foo (__DATE__); /* { dg-error "8:passing argument" } */
+  foo (__TIMESTAMP__); /* { dg-error "8:passing argument" } */
+  bar (1, __LINE__); /* { dg-error "11:passing argument" } */
+  bar (__COUNTER__, __COUNTER__); /* { dg-error "21:passing argument" } */
+
+  foo (F); /* { dg-message "8:in expansion of" } */
+  foo (T); /* { dg-message "8:in expansion of" } */
+  foo (D); /* { dg-message "8:in expansion of" } */
+  bar (1, L); /* { dg-message "11:in expansion of" } */
+
+  foo (F2); /* { dg-message "8:in expansion of" } */
+  foo (T2); /* { dg-message "8:in expansion of" } */
+  foo (D2); /* { dg-message "8:in expansion of" } */
+  bar (1, L2); /* { dg-message "11:in expansion of" } */
+}
index 7a6b8e3a5cc18b1a7ab07f807bd8a0a7802381ec..e550d177c26fbad228b9a8a4ebbeaa0c1dd27741 100644 (file)
@@ -1,3 +1,10 @@
+2014-07-27  Marek Polacek  <polacek@redhat.com>
+
+       PR c/61861
+       * macro.c (builtin_macro): Add location parameter.  Set
+       location of builtin macro to the expansion point.
+       (enter_macro_context): Pass location to builtin_macro.
+
 2014-07-16  Dodji Seketeli  <dodji@redhat.com>
 
        Support location tracking for built-in macro tokens
index 3b8fa4069352918166dc1cbf434d1de5028ea677..556628ba7c787989f77f7ab47fd5813e8f8f232f 100644 (file)
@@ -84,7 +84,7 @@ struct macro_arg_token_iter
 
 static int enter_macro_context (cpp_reader *, cpp_hashnode *,
                                const cpp_token *, source_location);
-static int builtin_macro (cpp_reader *, cpp_hashnode *);
+static int builtin_macro (cpp_reader *, cpp_hashnode *, source_location);
 static void push_ptoken_context (cpp_reader *, cpp_hashnode *, _cpp_buff *,
                                 const cpp_token **, unsigned int);
 static void push_extended_tokens_context (cpp_reader *, cpp_hashnode *,
@@ -399,9 +399,10 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node)
 /* Convert builtin macros like __FILE__ to a token and push it on the
    context stack.  Also handles _Pragma, for which a new token may not
    be created.  Returns 1 if it generates a new token context, 0 to
-   return the token to the caller.  */
+   return the token to the caller.  LOC is the location of the expansion
+   point of the macro.  */
 static int
-builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
+builtin_macro (cpp_reader *pfile, cpp_hashnode *node, source_location loc)
 {
   const uchar *buf;
   size_t len;
@@ -429,6 +430,8 @@ builtin_macro (cpp_reader *pfile, cpp_hashnode *node)
   /* Set pfile->cur_token as required by _cpp_lex_direct.  */
   pfile->cur_token = _cpp_temp_token (pfile);
   cpp_token *token = _cpp_lex_direct (pfile);
+  /* We should point to the expansion point of the builtin macro.  */
+  token->src_loc = loc;
   if (pfile->context->tokens_kind == TOKENS_KIND_EXTENDED)
     {
       /* We are tracking tokens resulting from macro expansion.
@@ -1212,7 +1215,7 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
 
   pfile->about_to_expand_macro_p = false;
   /* Handle built-in macros and the _Pragma operator.  */
-  return builtin_macro (pfile, node);
+  return builtin_macro (pfile, node, location);
 }
 
 /* De-allocate the memory used by BUFF which is an array of instances