[LLVMdev] Bug with debug information generation?

Matt Pharr matt.pharr at gmail.com
Mon Apr 23 15:14:04 PDT 2012


I'm seeing some strange behavior with generating debugging information from a simple program.  (LLVM top of tree, minus a couple of days.)

I suspect that there is a bug in LLVM, but thought I'd check in here to see if perhaps I'm doing something wrong or misunderstanding something.  In short, if I add a single (totally unused) alloca of an <8 x i32> to a function, then the debugger prints garbage for the values of other variables in the function.  I'm seeing this with the ispc compiler, but just to eliminate that as a factor, here is an example of what I'm seeing via clang.

Given this simple function in the file bug.cpp:

float foo() {
    float r = 0;
    r = 1;
    ++r;
    r *= 3;
    return r;
}

and then a separate main.cpp:

extern float foo();

int main() {
    foo();
}

If we compile and link an executable:

% clang -c bug.cpp -g -emit-llvm -o bug.bc
% llvm-dis bug.bc
% llc bug.ll -o bug.o -filetype=obj
% clang -g bug.o main.cpp

Then debugging works fine and the value of r can be printed correctly if one steps through the function (GNU gdb 6.3.50-20050815 (Apple version gdb-1708)).

However, if I edit bug.ll and add the single line:

  %internal_mask_memory = alloca <8 x i32>

Right after the entry: label and then recompile and run gdb, then when stepping through "foo", the value "0" is always printed for "r".

One other piece of possibly relevant information is that if I run "dwarfdump" on both of the corresponding object files, the output is almost entirely the same, though in the working case, it had AT_frame_base( rsp ), while the broken case had AT_frame_base( rbp ).  Some of the PC extents are different, but in ways that look reasonable. For the location of "r" in the working case, it has AT_location( fbreg -4 ), with AT_location( fbreg +28 ) in the broken case.  These locations both seem correct, based on an eyeballing of the assembly output, so there's nothing obviously wrong there, either.

I'd be delighted to hear any suggestions or pointers!

Thanks,
-matt







More information about the llvm-dev mailing list