diff options
author | Pavel Labath <labath@google.com> | 2018-05-14 11:02:23 +0000 |
---|---|---|
committer | Pavel Labath <labath@google.com> | 2018-05-14 11:02:23 +0000 |
commit | f639eb055330ee52bcf5d7acef628f4bab3158a0 (patch) | |
tree | 6dccb28aefe3775ed31ccaaa88f1ea010472a75f /lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp | |
parent | fba03620968065984d5eb183de55b83a8ce21c4c (diff) | |
download | llvm-f639eb055330ee52bcf5d7acef628f4bab3158a0.zip llvm-f639eb055330ee52bcf5d7acef628f4bab3158a0.tar.gz llvm-f639eb055330ee52bcf5d7acef628f4bab3158a0.tar.bz2 |
[CodeGen] Disable aggressive structor optimizations at -O0
Summary:
Removing the full structor and replacing all usages with the base one
can degrade debug quality as it will leave the debugger unable to locate
the full object structor. This is apparent when evaluating an expression
in the debugger which requires constructing an object of class which has
had this optimization applied to it. When compiling the expression, we
pretend that the class and its methods have been defined in another
compilation unit, so the expression compiler assumes the structor
definition must be available. This didn't use to be the case for
structors with internal linkage. Less aggressive optimizations like
emitting the full structor as an alias remain in place, as they do not
cause the structor symbol to disappear completely.
This improves debug quality on non-darwin platforms (darwin does not
have -mconstructor-aliases on by default, so it is spared these
problems) and enable us to remove some workarounds from LLDB which attempt to
mitigate this issue.
Reviewers: rjmccall, aprantl
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D46685
llvm-svn: 332228
Diffstat (limited to 'lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp')
0 files changed, 0 insertions, 0 deletions