public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug preprocessor/52998] New: caret and -ftrack-macro-expansion don't mix well
@ 2012-04-15 20:21 manu at gcc dot gnu.org
  2012-04-15 20:35 ` [Bug preprocessor/52998] " manu at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: manu at gcc dot gnu.org @ 2012-04-15 20:21 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52998

             Bug #: 52998
           Summary: caret and -ftrack-macro-expansion don't mix well
    Classification: Unclassified
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: preprocessor
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: manu@gcc.gnu.org


With GCC 4.8 and -ftrack-macro-expansion, we get:

manuel@gcc12:~$ cat macro-caret.c
#define OPERATE(OPRD1, OPRT, OPRD2) \
  OPRD1 OPRT OPRD2;

#define SHIFTL(A,B) \
  OPERATE (A,<<,B)

#define MULT(A) \
  SHIFTL (A,1)

void
g ()
{
  MULT (1.0);// 1.0 << 1; <-- so this is an error.
}

manuel@gcc12:~$ ~/trunk/186353M/build/gcc/cc1plus macro-caret.c
-ftrack-macro-expansion
macro-caret.c:8:13: error: invalid operands of types ‘double’ and ‘int’ to
binary ‘operator<<’
   SHIFTL (A,1)
             ^
macro-caret.c:2:14: note: in expansion of macro 'OPERATE'
   OPRD1 OPRT OPRD2;
              ^
macro-caret.c:5:3: note: expanded from here
   OPERATE (A,<<,B)
   ^
macro-caret.c:5:17: note: in expansion of macro 'SHIFTL'
   OPERATE (A,<<,B)
                 ^
macro-caret.c:8:3: note: expanded from here
   SHIFTL (A,1)
   ^
macro-caret.c:8:13: note: in expansion of macro 'MULT'
   SHIFTL (A,1)
             ^
macro-caret.c:13:3: note: expanded from here
   MULT (1.0);// 1.0 << 1; <-- so this is an error.
   ^

And with GCC:

manuel@gcc12:~$ ~/trunk/186353M/build/gcc/cc1 macro-caret.c
-ftrack-macro-expansion
macro-caret.c: In function ‘g’:
macro-caret.c:5:14: error: invalid operands to binary << (have ‘double’ and
‘int’)
   OPERATE (A,<<,B)
              ^
macro-caret.c:2:9: note: in expansion of macro 'OPERATE'
   OPRD1 OPRT OPRD2;
         ^
macro-caret.c:5:3: note: expanded from here
   OPERATE (A,<<,B)
   ^
macro-caret.c:5:14: note: in expansion of macro 'SHIFTL'
   OPERATE (A,<<,B)
              ^
macro-caret.c:8:3: note: expanded from here
   SHIFTL (A,1)
   ^
macro-caret.c:8:3: note: in expansion of macro 'MULT'
   SHIFTL (A,1)
   ^
macro-caret.c:13:3: note: expanded from here
   MULT (1.0);// 1.0 << 1; <-- so this is an error.
   ^

Note that cc1plus prints the error at 8:13 and cc1 at 5:14. Without
-ftrac-macro-expansion, both give 13:3.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug preprocessor/52998] caret and -ftrack-macro-expansion don't mix well
  2012-04-15 20:21 [Bug preprocessor/52998] New: caret and -ftrack-macro-expansion don't mix well manu at gcc dot gnu.org
@ 2012-04-15 20:35 ` manu at gcc dot gnu.org
  2012-04-15 20:38 ` manu at gcc dot gnu.org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: manu at gcc dot gnu.org @ 2012-04-15 20:35 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52998

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
           Priority|P3                          |P4
                 CC|                            |dodji at gcc dot gnu.org
            Version|unknown                     |4.8.0

--- Comment #1 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2012-04-15 20:35:08 UTC ---
I think with and without macro expansion, the error should be given at 13:3,
and unwind from outermost to innermost. Innermost to outermost makes sense if
we show preprocessed lines:

macro-caret.c:5:14: error: invalid operands to binary << (have ‘double’ and
‘int’)
   1.0 << 1
       ^
macro-caret.c:2:9: note: in expansion of macro 'OPERATE' [with OPRD1=0.1,
OPRT=<<, OPRD2=1]
   OPRD1 OPRT OPRD2;
         ^
macro-caret.c:5:3: note: expanded from here
   OPERATE (1.0,<<,1)
   ^
macro-caret.c:5:14: note: in expansion of macro 'SHIFTL' [with A=1.0, B=1]
   OPERATE (A,<<,B)
              ^
macro-caret.c:8:3: note: expanded from here
   SHIFTL (1.0,1)
   ^
macro-caret.c:8:3: note: in expansion of macro 'MULT' [with A=1.0]
   SHIFTL (A,1)
   ^
macro-caret.c:13:3: note: expanded from here
   MULT (1.0);// 1.0 << 1; <-- so this is an error.


Otherwise, the error is shown at some code the user has not typed, and that
shows no obvious error (OPERATE (A,<<,B)) . Hence, the user has to read the
output once to find the source of the error (MULT), and then again to unwind
the macro expansion. In that case, it is better to go outermost to innermost,
so the user can follow the macro expansion as it occurs.

What do you think Dodji?


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug preprocessor/52998] caret and -ftrack-macro-expansion don't mix well
  2012-04-15 20:21 [Bug preprocessor/52998] New: caret and -ftrack-macro-expansion don't mix well manu at gcc dot gnu.org
  2012-04-15 20:35 ` [Bug preprocessor/52998] " manu at gcc dot gnu.org
@ 2012-04-15 20:38 ` manu at gcc dot gnu.org
  2012-04-24  4:37 ` pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: manu at gcc dot gnu.org @ 2012-04-15 20:38 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52998

--- Comment #2 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2012-04-15 20:37:44 UTC ---
(In reply to comment #1)
> I think with and without macro expansion, the error should be given at 13:3,
> and unwind from outermost to innermost. Innermost to outermost makes sense if
> we show preprocessed lines:
> 
> macro-caret.c:5:14: error: invalid operands to binary << (have ‘double’ and
> ‘int’)
>    1.0 << 1
>        ^

But with preprocessed source lines, the best location is 5:14, because this way
the user can compare what is in that line with the preprocessed line shown by
GCC. So, in some sense, cc1 is right, and cc1plus is wrong.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug preprocessor/52998] caret and -ftrack-macro-expansion don't mix well
  2012-04-15 20:21 [Bug preprocessor/52998] New: caret and -ftrack-macro-expansion don't mix well manu at gcc dot gnu.org
  2012-04-15 20:35 ` [Bug preprocessor/52998] " manu at gcc dot gnu.org
  2012-04-15 20:38 ` manu at gcc dot gnu.org
@ 2012-04-24  4:37 ` pinskia at gcc dot gnu.org
  2012-04-30 17:28 ` [Bug preprocessor/52998] different macro unwinder for C and C++ (-ftrack-macro-expansion) manu at gcc dot gnu.org
  2021-08-02  3:35 ` pinskia at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2012-04-24  4:37 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52998

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2012-04-24
     Ever Confirmed|0                           |1

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-04-24 04:36:42 UTC ---
Confirmed.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug preprocessor/52998] different macro unwinder for C and C++ (-ftrack-macro-expansion)
  2012-04-15 20:21 [Bug preprocessor/52998] New: caret and -ftrack-macro-expansion don't mix well manu at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2012-04-24  4:37 ` pinskia at gcc dot gnu.org
@ 2012-04-30 17:28 ` manu at gcc dot gnu.org
  2021-08-02  3:35 ` pinskia at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: manu at gcc dot gnu.org @ 2012-04-30 17:28 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52998

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|caret and                   |different macro unwinder
                   |-ftrack-macro-expansion     |for C and C++
                   |don't mix well              |(-ftrack-macro-expansion)

--- Comment #4 from Manuel López-Ibáñez <manu at gcc dot gnu.org> 2012-04-30 17:28:05 UTC ---
Just a note that the recent commits about tracking macro locations haven't
changed this issue.

I change the summary to reflect that this has nothing to do with caret
diagnostics, just that it becomes evident thanks to it.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug preprocessor/52998] different macro unwinder for C and C++ (-ftrack-macro-expansion)
  2012-04-15 20:21 [Bug preprocessor/52998] New: caret and -ftrack-macro-expansion don't mix well manu at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2012-04-30 17:28 ` [Bug preprocessor/52998] different macro unwinder for C and C++ (-ftrack-macro-expansion) manu at gcc dot gnu.org
@ 2021-08-02  3:35 ` pinskia at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-08-02  3:35 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52998

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
C++ and C match up in GCC 6+.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-08-02  3:35 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-15 20:21 [Bug preprocessor/52998] New: caret and -ftrack-macro-expansion don't mix well manu at gcc dot gnu.org
2012-04-15 20:35 ` [Bug preprocessor/52998] " manu at gcc dot gnu.org
2012-04-15 20:38 ` manu at gcc dot gnu.org
2012-04-24  4:37 ` pinskia at gcc dot gnu.org
2012-04-30 17:28 ` [Bug preprocessor/52998] different macro unwinder for C and C++ (-ftrack-macro-expansion) manu at gcc dot gnu.org
2021-08-02  3:35 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).