PR preprocessor/58844
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Feb 2014 06:05:55 +0000 (06:05 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 19 Feb 2014 06:05:55 +0000 (06:05 +0000)
* macro.c (enter_macro_context): Only push
macro_real_token_count (macro) tokens rather than
macro->count tokens, regardless of
CPP_OPTION (pfile, track-macro-expansion).

* c-c++-common/cpp/pr58844-1.c: New test.
* c-c++-common/cpp/pr58844-2.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@207871 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/cpp/pr58844-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/cpp/pr58844-2.c [new file with mode: 0644]
libcpp/ChangeLog
libcpp/macro.c

index 6ca2560..f64bb4f 100644 (file)
@@ -1,3 +1,9 @@
+2014-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/58844
+       * c-c++-common/cpp/pr58844-1.c: New test.
+       * c-c++-common/cpp/pr58844-2.c: New test.
+
 2014-02-18  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/60225
diff --git a/gcc/testsuite/c-c++-common/cpp/pr58844-1.c b/gcc/testsuite/c-c++-common/cpp/pr58844-1.c
new file mode 100644 (file)
index 0000000..3abf8a7
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR preprocessor/58844 */
+/* { dg-do compile } */
+/* { dg-options "-ftrack-macro-expansion=0" } */
+
+#define A x######x
+int A = 1;
+#define A x######x     /* { dg-message "previous definition" } */
+#define A x##x         /* { dg-warning "redefined" } */
diff --git a/gcc/testsuite/c-c++-common/cpp/pr58844-2.c b/gcc/testsuite/c-c++-common/cpp/pr58844-2.c
new file mode 100644 (file)
index 0000000..1e21915
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR preprocessor/58844 */
+/* { dg-do compile } */
+/* { dg-options "-ftrack-macro-expansion=2" } */
+
+#define A x######x
+int A = 1;
+#define A x######x     /* { dg-message "previous definition" } */
+#define A x##x         /* { dg-warning "redefined" } */
index b7f2011..44736e0 100644 (file)
@@ -1,3 +1,11 @@
+2014-02-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR preprocessor/58844
+       * macro.c (enter_macro_context): Only push
+       macro_real_token_count (macro) tokens rather than
+       macro->count tokens, regardless of
+       CPP_OPTION (pfile, track-macro-expansion).
+
 2014-02-07  Jakub Jelinek  <jakub@redhat.com>
 
        PR preprocessor/56824
index 1700ac0..11e50f4 100644 (file)
@@ -1115,21 +1115,22 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
 
       if (macro->paramc == 0)
        {
+         unsigned tokens_count = macro_real_token_count (macro);
          if (CPP_OPTION (pfile, track_macro_expansion))
            {
-             unsigned int i, count = macro->count;
+             unsigned int i;
              const cpp_token *src = macro->exp.tokens;
              const struct line_map *map;
              source_location *virt_locs = NULL;
-             _cpp_buff *macro_tokens =
-               tokens_buff_new (pfile, count, &virt_locs);
+             _cpp_buff *macro_tokens
+               = tokens_buff_new (pfile, tokens_count, &virt_locs);
 
              /* Create a macro map to record the locations of the
                 tokens that are involved in the expansion. LOCATION
                 is the location of the macro expansion point.  */
-             map  = linemap_enter_macro (pfile->line_table,
-                                         node, location, count);
-             for (i = 0; i < count; ++i)
+             map = linemap_enter_macro (pfile->line_table,
+                                        node, location, tokens_count);
+             for (i = 0; i < tokens_count; ++i)
                {
                  tokens_buff_add_token (macro_tokens, virt_locs,
                                         src, src->src_loc,
@@ -1141,16 +1142,12 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
                                            virt_locs,
                                            (const cpp_token **)
                                            macro_tokens->base,
-                                           count);
-             num_macro_tokens_counter += count;
+                                           tokens_count);
            }
          else
-           {
-             unsigned tokens_count = macro_real_token_count (macro);
-             _cpp_push_token_context (pfile, node, macro->exp.tokens,
-                                      tokens_count);
-             num_macro_tokens_counter += tokens_count;
-           }
+           _cpp_push_token_context (pfile, node, macro->exp.tokens,
+                                    tokens_count);
+         num_macro_tokens_counter += tokens_count;
        }
 
       if (pragma_buff)