http://llvm.org/bugs/show_bug.cgi?id=3224
Summary: Debug information says all members at offset 0
Product: tools
Version: trunk
Platform: PC
OS/Version: Linux
Status: NEW
Severity: major
Priority: P2
Component: llvm-gcc
AssignedTo: [email protected]
ReportedBy: [email protected]
CC: [email protected]
Created an attachment (id=2309)
--> (http://llvm.org/bugs/attachment.cgi?id=2309)
Sample program showing incorrect debug information
$ ~/opensource/llvm-gcc/trunk/install/bin/llvm-gcc -g -o bad_types bad_types.c
$ gdb bad_types
GNU gdb 6.8-gg11
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux"...
(gdb) b main
Breakpoint 1 at 0x400438: file bad_types.c, line 7.
(gdb) run
Starting program: /home/jyasskin/tmp/bad_types
Breakpoint 1, main () at bad_types.c:7
7 struct Foo f = {4, 7};
(gdb) n
8 return 0;
(gdb) p /x f
$1 = {
bar = 0x4,
baz = 0x959e0004
}
(gdb) p &f
$2 = (struct Foo *) 0x7fff959e9a20
(gdb) p &f.bar
$3 = (short int *) 0x7fff959e9a20
(gdb) p &f.baz
$4 = (int *) 0x7fff959e9a20
(gdb)
Notice that Foo::bar and Foo::baz are claimed to be at the same address despite
being different members.
Needless to say, this makes it very hard to debug programs. You can work around
it by manually computing the offset of the member you want, adding some number
of bytes to a pointer by hand, and then casting it back to the right type, but
that's not really reasonable.
This is an llvm-gcc built from svn r60958. The 2.4 release did not have this
problem.
--
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.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs