summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/expression_command
diff options
context:
space:
mode:
authorEwan Crawford <ewan@codeplay.com>2016-03-15 13:02:11 +0000
committerEwan Crawford <ewan@codeplay.com>2016-03-15 13:02:11 +0000
commitfae436326559f3e93944dc4d150fb945dc12097b (patch)
treee7f502d2c3bfdef2a5c56f96f337f02e7345d46e /lldb/packages/Python/lldbsuite/test/expression_command
parent6c78974b298d619ec11e243fb6fdea0b16f87a66 (diff)
downloadbcm5719-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')
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile12
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/TestCallUserAnonTypedef.py40
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp26
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));
+}
OpenPOWER on IntegriCloud