[LLVMbugs] [Bug 9279] New: Macro expansion stack trace seriously broken with function-style macros

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Feb 21 01:12:24 PST 2011


http://llvm.org/bugs/show_bug.cgi?id=9279

           Summary: Macro expansion stack trace seriously broken with
                    function-style macros
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: -New Bugs
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: chandlerc at gmail.com
                CC: llvmbugs at cs.uiuc.edu


Pretty simple examples like:
% cat t.cc
#define M1(x) int arr[x]
#define M2(x) M1(x)
#define M3(x) M2(x)

M3(-1);

Lead to horrible diagnostics like:
% ./bin/clang++ -fsyntax-only t.cc
t.cc:5:1: error: 'arr' declared as an array with a negative size
M3(-1);
^~~~~~
t.cc:3:15: note: instantiated from:
#define M3(x) M2(x)
              ^
t.cc:2:15: note: instantiated from:
#define M2(x) M1(x)
              ^
t.cc:5:1: note: instantiated from:
M3(-1);
^  ~~
t.cc:3:15: note: instantiated from:
#define M3(x) M2(x)
              ^
t.cc:5:1: note: instantiated from:
M3(-1);
^  ~~
t.cc:5:4: note: instantiated from:
M3(-1);
   ^~
1 error generated.


Whereas plain macros yield a much nicer diagnostic:
% cat t2.cc 
#define M1 int arr[-
#define M2 M1
#define M3 M2

M3 1];

% ./bin/clang++ -fsyntax-only t2.cc
t2.cc:5:1: error: 'arr' declared as an array with a negative size
M3 1];
^~~~
t2.cc:3:12: note: instantiated from:
#define M3 M2
~~~~~~~~~~~^~
t2.cc:2:12: note: instantiated from:
#define M2 M1
~~~~~~~~~~~^~
t2.cc:1:20: note: instantiated from:
#define M1 int arr[-
                   ^
1 error generated.


There are a couple of distinct symptoms here, but likely they stem from the
same core issue:

- We generate a stack for each note in the original stack, making the total
diagnostic far longer than necessary.
- We don't ever show the bottom of the stack
- The source ranges for the secondary stacks are superior to those of the
initial stack

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list