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

            Bug ID: 61165
           Summary: unfriendly diagnostic from macro expansion
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: preprocessor
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tromey at gcc dot gnu.org

Consider this source:

extern void *allocate (int);

#define my_alloc(X) allocate (X)

int *alloc_int(void)
{
  int *result = my_alloc(sizeof (int));
  return result;
}


Now compile with -Wc++-compat:

barimba. gcc --syntax-only -Wc++-compat r.c
r.c: In function ‘alloc_int’:
r.c:3:21: warning: request for implicit conversion from ‘void *’ to ‘int *’ not
permitted in C++ [-Wc++-compat]
 #define my_alloc(X) allocate (X)
                     ^
r.c:7:17: note: in expansion of macro ‘my_alloc’
   int *result = my_alloc(sizeof (int));
                 ^


I find this a bit strange.  The actual "warning:" line points to
the #define -- but here I think I would have expected this to
point to the call instead, with a "note:" pointing to the macro
definition.

Reply via email to