diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-04-03 21:31:22 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-04-03 21:31:22 +0000 |
commit | 306809f292c9dd26e1a901b139f65976cdd5a4b2 (patch) | |
tree | b22cc9af74e85c1ab680b7ad5a8ac035fda72f5e /lldb/lit/tools/lldb-instr | |
parent | 7c711ccf36e0a818f76d711715956ffe831f53b6 (diff) | |
download | bcm5719-llvm-306809f292c9dd26e1a901b139f65976cdd5a4b2.tar.gz bcm5719-llvm-306809f292c9dd26e1a901b139f65976cdd5a4b2.zip |
[Reproducers] Capture return values of functions returning by ptr/ref
For some reason I had convinced myself that functions returning by
pointer or reference do not require recording their result. However,
after further considering I don't see how that could work, at least not
with the current implementation. Interestingly enough, the reproducer
instrumentation already (mostly) accounts for this, though the
lldb-instr tool did not.
This patch adds the missing macros and updates the lldb-instr tool.
Differential revision: https://reviews.llvm.org/D60178
llvm-svn: 357639
Diffstat (limited to 'lldb/lit/tools/lldb-instr')
4 files changed, 15 insertions, 0 deletions
diff --git a/lldb/lit/tools/lldb-instr/Inputs/foo.cpp b/lldb/lit/tools/lldb-instr/Inputs/foo.cpp index 36a73236a42..981b911eee2 100644 --- a/lldb/lit/tools/lldb-instr/Inputs/foo.cpp +++ b/lldb/lit/tools/lldb-instr/Inputs/foo.cpp @@ -16,3 +16,11 @@ Foo Foo::H() { return Foo(); } void Foo::I() const { MACRO_FOO; } Bar Foo::J() const { return MACRO_BAR(Bar()); } Bar Foo::K(void *v) const { return Bar(); } +Bar &Foo::L() const { + Bar *b = new Bar(); + return *b; +}; +Bar *Foo::M() const { + Bar *b = new Bar(); + return b; +}; diff --git a/lldb/lit/tools/lldb-instr/Inputs/foo.h b/lldb/lit/tools/lldb-instr/Inputs/foo.h index 9e2608e2b9e..fb76e046e02 100644 --- a/lldb/lit/tools/lldb-instr/Inputs/foo.h +++ b/lldb/lit/tools/lldb-instr/Inputs/foo.h @@ -14,4 +14,6 @@ struct Foo { void I() const; Bar J() const; Bar K(void *v) const; + Bar &L() const; + Bar *M() const; }; diff --git a/lldb/lit/tools/lldb-instr/TestInstrumentationRecord.test b/lldb/lit/tools/lldb-instr/TestInstrumentationRecord.test index cd294140172..a75a3fcecff 100644 --- a/lldb/lit/tools/lldb-instr/TestInstrumentationRecord.test +++ b/lldb/lit/tools/lldb-instr/TestInstrumentationRecord.test @@ -20,3 +20,5 @@ # CHECK-NOT: LLDB_RECORD_RESULT(Bar()); # CHECK: LLDB_RECORD_DUMMY(Bar, Foo, K, (void *), v); # CHECK-NOT: LLDB_RECORD_RESULT(Bar()); +# CHECK: LLDB_RECORD_RESULT(*b) +# CHECK: LLDB_RECORD_RESULT(b) diff --git a/lldb/lit/tools/lldb-instr/TestInstrumentationRegister.test b/lldb/lit/tools/lldb-instr/TestInstrumentationRegister.test index 0b15944a9a7..aa8af5b8fe2 100644 --- a/lldb/lit/tools/lldb-instr/TestInstrumentationRegister.test +++ b/lldb/lit/tools/lldb-instr/TestInstrumentationRegister.test @@ -11,6 +11,9 @@ # CHECK: LLDB_REGISTER_METHOD_CONST(int, Foo, D, (bool)); # CHECK: LLDB_REGISTER_STATIC_METHOD(void, Foo, E, ()); # CHECK: LLDB_REGISTER_STATIC_METHOD(int, Foo, F, (int)); +# CHECK: LLDB_REGISTER_METHOD_CONST(Bar, Foo, J, ()); +# CHECK: LLDB_REGISTER_METHOD_CONST(Bar &, Foo, L, ()); +# CHECK: LLDB_REGISTER_METHOD_CONST(Bar *, Foo, M, ()); # CHECK-NOT: LLDB_REGISTER_STATIC_METHOD(void, Foo, G # CHECK-NOT: LLDB_REGISTER_METHOD_CONST(void, Foo, I, ()); # CHECK-NOT: LLDB_REGISTER_METHOD_CONST(Bar, Foo, K, (void*)); |