<html>
<head>
<base href="http://llvm.org/bugs/" />
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW --- - lldb incorreclty shows virtual base object members"
href="http://llvm.org/bugs/show_bug.cgi?id=17722">17722</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>lldb incorreclty shows virtual base object members
</td>
</tr>
<tr>
<th>Product</th>
<td>lldb
</td>
</tr>
<tr>
<th>Version</th>
<td>unspecified
</td>
</tr>
<tr>
<th>Hardware</th>
<td>Macintosh
</td>
</tr>
<tr>
<th>OS</th>
<td>MacOS X
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>All Bugs
</td>
</tr>
<tr>
<th>Assignee</th>
<td>lldb-dev@cs.uiuc.edu
</td>
</tr>
<tr>
<th>Reporter</th>
<td>olga.a.chupina@gmail.com
</td>
</tr>
<tr>
<th>Classification</th>
<td>Unclassified
</td>
</tr></table>
<p>
<div>
<pre>Created <span class=""><a href="attachment.cgi?id=11438" name="attach_11438" title="test case">attachment 11438</a> <a href="attachment.cgi?id=11438&action=edit" title="test case">[details]</a></span>
test case
Consider the test:
$ cat test.cpp
class A {
public:
int a;
void f() {a=11;};
};
class BA : public virtual A {
public:
void f() {a=22;};
};
class CA : public virtual A {
public:
void f() {a=33;};
};
class CBA : public BA, public CA {
public:
void f() {a=44;};
};
int main()
{
CBA* ptr = new CBA;
ptr->f();
return ptr->a;
}
If I compile it with clang 3.4 compiler with "-g -O0" and debug it with lldb -
I see the following ouput:
$ clang++ -c -O0 -g test.cpp
$ clang++ -o test.exe -O0 -g test.o
$ lldb test.exe
Current executable set to 'test.exe' (x86_64).
(lldb) b 27
Breakpoint 1: where = test.exe`main + 59 at test.cpp:27, address =
0x0000000100000d9b
(lldb) r
Process 76925 launched: '/private/tmp/test_clang/test.exe' (x86_64)
Process 76925 stopped
* thread #1: tid = 0x1d03, 0x0000000100000d9b test.exe`main + 59 at
test.cpp:27, stop reason = breakpoint 1.1
frame #0: 0x0000000100000d9b test.exe`main + 59 at test.cpp:27
24 {
25 CBA* ptr = new CBA;
26 ptr->f();
-> 27 return ptr->a;
28 }
(lldb) p *ptr
(CBA) $0 = {
(BA) BA = {
(A) A = {
(int) a = 4224 <---- this looks incorrect
}
}
(CA) CA = {
(A) A = {
(int) a = 44
}
}
}
(lldb)
The same binary works with gdb.
The test is attached.
Olga Chupina
---
Software Engineer
Intel Compiler Team
Intel Corp.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>