-
Notifications
You must be signed in to change notification settings - Fork 12.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Wrong debug info generated at -O3 (-O0 is correct) #43302
Comments
Going into LiveDebugVariables:
Coming out of VirtRegRewriter:
It looks like LiveDebugVariables loses the original order of locations; it should be only preserving the last location given in each block of DBG_VALUEs. (CC Orlando, who's wrestling with relevant LiveDebugVariables code in bug 41992) |
I wrote:
Actually, this might be bug 41992. Because LiveDebugVariables incorrectly distinguishes variables by their whole expression, those DBG_VALUEs will be interpreted as two different variables, and LiveDebugVariables probably tries to preserve both. Orlandos WIP patch should be up today, we can test with that. |
This looks likely. With my upcoming patch, diffing the output of the following commands (pre-patch, patch): $ clang -O3 -emit-llvm -S -g abc.c gives: bb.0 (%ir-block.0): [- DBG_VALUE 36901, $noreg, !18, !DIExpression(), debug-location !24-]
|
WIP patch here https://reviews.llvm.org/D70121 |
Fixed with D74053 (1e40799). |
Extended Description
The expected output from lldb should be 36902. However, compiled with "-O3", lldb outputs 36901.
$ clang-trunk -v
clang version 10.0.0 (trunk 375507)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/9
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.4.7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.6.4
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/4.8.5
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/9
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@MX32
Selected multilib: .;@m64
$ clang-trunk -g abc.c -O3
$ lldb-trunk -s cmds -b a.out
(lldb) target create "a.out"
Current executable set to '/home/sding/LLDB-testing/reduce/30986/report/a.out' (x86_64).
(lldb) command source -s 0 'cmds'
Executing commands in '/home/sding/LLDB-testing/reduce/30986/report/cmds'.
(lldb) b 6
Breakpoint 1: where = a.out`main + 10 at abc.c:6:7, address = 0x000000000040048a
(lldb) r
Process 10166 stopped
frame #0: 0x000000000040048a a.out`main at abc.c:6:7
3 --b;
4 unsigned l_801 = 36901;
5 ++l_801;
-> 6 if (a) // optimize_me_not0
7 b = 0;
8 }
Process 10166 launched: '/home/sding/LLDB-testing/reduce/30986/report/a.out' (x86_64)
(lldb) p l_801
(unsigned int) $0 = 36901
(lldb) kill
Process 10166 exited with status = 9 (0x00000009)
(lldb) q
$ clang-trunk -g abc.c -O0
$ lldb-trunk -s cmds -b a.out
(lldb) target create "a.out"
Current executable set to '/home/sding/LLDB-testing/reduce/30986/report/a.out' (x86_64).
(lldb) command source -s 0 'cmds'
Executing commands in '/home/sding/LLDB-testing/reduce/30986/report/cmds'.
(lldb) b 6
Breakpoint 1: where = a.out`main + 43 at abc.c:6:7, address = 0x00000000004004ab
(lldb) r
Process 18492 stopped
frame #0: 0x00000000004004ab a.out`main at abc.c:6:7
3 --b;
4 unsigned l_801 = 36901;
5 ++l_801;
-> 6 if (a) // optimize_me_not0
7 b = 0;
8 }
Process 18492 launched: '/home/sding/LLDB-testing/reduce/30986/report/a.out' (x86_64)
(lldb) p l_801
(unsigned int) $0 = 36902
(lldb) kill
Process 18492 exited with status = 9 (0x00000009)
(lldb) q
$ cat abc.c
char a, b;
int main() {
--b;
unsigned l_801 = 36901;
++l_801;
if (a) // optimize_me_not0
b = 0;
}
$ cat cmds
b 6
r
p l_801
kill
q
The text was updated successfully, but these errors were encountered: