diff options
author | Ewan Crawford <ewan@codeplay.com> | 2016-03-15 13:02:11 +0000 |
---|---|---|
committer | Ewan Crawford <ewan@codeplay.com> | 2016-03-15 13:02:11 +0000 |
commit | fae436326559f3e93944dc4d150fb945dc12097b (patch) | |
tree | e7f502d2c3bfdef2a5c56f96f337f02e7345d46e /lldb/packages/Python/lldbsuite/test/expression_command | |
parent | 6c78974b298d619ec11e243fb6fdea0b16f87a66 (diff) | |
download | bcm5719-llvm-fae436326559f3e93944dc4d150fb945dc12097b.tar.gz bcm5719-llvm-fae436326559f3e93944dc4d150fb945dc12097b.zip |
Add regression test for expressions calling functions taking anonymous struct typedef arguments
This CL adds a regression test for the bug listed at https://llvm.org/bugs/show_bug.cgi?id=26790
Functionality was implemented in commit r263544
Author: Luke Drummond <luke.drummond@codeplay.com>
Differential Revision: http://reviews.llvm.org/D17777
llvm-svn: 263547
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/expression_command')
3 files changed, 78 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile b/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile new file mode 100644 index 00000000000..7df664ac43e --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile @@ -0,0 +1,12 @@ +LEVEL = ../../make + +CXX_SOURCES := main.cpp + +# clang-3.5+ outputs FullDebugInfo by default for Darwin/FreeBSD +# targets. Other targets do not, which causes this test to fail. +# This flag enables FullDebugInfo for all targets. +ifneq (,$(findstring clang,$(CC))) + CFLAGS_EXTRAS += -fno-limit-debug-info +endif + +include $(LEVEL)/Makefile.rules diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/TestCallUserAnonTypedef.py b/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/TestCallUserAnonTypedef.py new file mode 100644 index 00000000000..4ee08d4f857 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/TestCallUserAnonTypedef.py @@ -0,0 +1,40 @@ +""" +Test calling user defined functions using expression evaluation. +This test checks that typesystem lookup works correctly for typedefs of +untagged structures. + +Ticket: https://llvm.org/bugs/show_bug.cgi?id=26790 +""" + +from __future__ import print_function + +import lldb + +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestExprLookupAnonStructTypedef(TestBase): + mydir = TestBase.compute_mydir(__file__) + + def setUp(self): + TestBase.setUp(self) + # Find the breakpoint + self.line = line_number('main.cpp', '// lldb testsuite break') + + def test(self): + """Test typedeffed untagged struct arguments for function call expressions""" + self.build() + + self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) + lldbutil.run_break_set_by_file_and_line( + self, + "main.cpp", + self.line, + num_expected_locations=-1, + loc_exact=True + ) + + self.runCmd("run", RUN_SUCCEEDED) + self.expect("expr multiply(&s)", substrs=['$0 = 1']) diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp b/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp new file mode 100644 index 00000000000..5b170c5f943 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp @@ -0,0 +1,26 @@ +#include <tgmath.h> + +typedef struct { + float f; + int i; +} my_untagged_struct; + +double multiply(my_untagged_struct *s) +{ + return s->f * s->i; +} + +double multiply(my_untagged_struct *s, int x) +{ + return multiply(s) * x; +} + +int main(int argc, char **argv) +{ + my_untagged_struct s = { + .f = (float)argc, + .i = argc, + }; + // lldb testsuite break + return !(multiply(&s, argc) == pow(argc, 3)); +} |