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

            Bug ID: 57934
           Summary: spurious definition of preprocessor CAT in
                    gcc-interface/ada.h for traditional (replaces ##)
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: ada
          Assignee: unassigned at gcc dot gnu.org
          Reporter: georggcc at googlemail dot com

IIUC, the definition of CAT in ada.h should replace a##b not
present in traditional C compilers. If still applicable, the
definition doesn't seem to work, though, perhaps because it
defines "_ECHO" but then uses "ECHO":

#ifdef __STDC__
#define CAT(A,B) A##B
#else
#define _ECHO(A) A
#define CAT(A,B) ECHO(A)B
#endif

$ cat test.c
#include "ada.h"

static int CAT(var,iable) = 42;

$ gcc -traditional  -W -c -E -I ~/src/gcc/gcc/ada/gcc-interface test.c
# 1 "test.c"
# 1 "<command-line>"
# 1 "test.c"

# 1 "/Users/bauhaus/src/gcc/gcc/ada/gcc-interface/ada.h" 1

# 25 "/Users/bauhaus/src/gcc/gcc/ada/gcc-interface/ada.h"

...

# 2 "test.c" 2

static int ECHO(var)iable = 42;


Compilation finished at Fri Jul 19 11:43:12

Defining ECHO to be _ECHO produces the expected, catenated "variable".

Reply via email to