Re: Macros active in error messages

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/22/20 8:34 AM, emre brookes wrote:
I was compiling a project and received an odd message that took some digging.
e.g.

file.cpp:#:#: error: expected unqualified-id before numeric constant
# | if ( inttype == MyClass::ERROR )
                              ^~~~~
where MyClass::ERROR is an enum.

Took some digging to find out ERROR was somewhere #define'd and the cure was to #undef ERROR Could never find out *where* it was defined - recursively searched all include files of the project and /usr/include etc. Regardless, it would have been very helpful to know in the error messages that a #define was active or to have the ERROR replaced by the macro substitution.

Is it possible to get any macro expansion information in error messages?
I didn't see a compiler flag for to get this information, but I might have missed it.
If not, it would be a nice feature to have.

I'd expect to see output similar to the below where the error points
to the macro.  I'm not sure under what conditions it won't (with some
specific options perhaps?)  If you can create an isolated test case
showing it doesn't I'd recommend to open a bug in Bugzilla (or just
follow up here).

Martin

$ cat a.C && gcc -S a.C
struct MyClass { enum { ERROR = 1 }; };

#define ERROR 1

int f (int inttype)
{
  if (inttype == MyClass::ERROR)
    return 0;
  return 1;
}
a.C: In function ‘int f(int)’:
a.C:3:15: error: expected unqualified-id before numeric constant
    3 | #define ERROR 1
      |               ^
a.C:7:27: note: in expansion of macro ‘ERROR’
    7 |   if (inttype == MyClass::ERROR)
      |                           ^~~~~
a.C:7:25: error: expected ‘)’ before numeric constant
    7 |   if (inttype == MyClass::ERROR)
      |      ~                  ^
      |                         )



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux