[Lldb-commits] [PATCH] D17777: Add regression test for expressions calling functions taking anonymous struct typedef arguments
Luke Drummond via lldb-commits
lldb-commits at lists.llvm.org
Tue Mar 1 11:56:35 PST 2016
ldrumm created this revision.
ldrumm added reviewers: clayborg, zturner, tberghammer, spyffe.
ldrumm added a subscriber: lldb-commits.
This CL adds a regression test for the bug listed at https://llvm.org/bugs/show_bug.cgi?id=26790
http://reviews.llvm.org/D17777
Files:
packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile
packages/Python/lldbsuite/test/expression_command/anonymous-struct/TestCallUserAnonTypedef.py
packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp
Index: packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp
===================================================================
--- /dev/null
+++ 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));
+}
Index: packages/Python/lldbsuite/test/expression_command/anonymous-struct/TestCallUserAnonTypedef.py
===================================================================
--- /dev/null
+++ 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=26694
+"""
+
+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 = 0'])
Index: packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile
===================================================================
--- /dev/null
+++ packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile
@@ -0,0 +1,15 @@
+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
+
+clean::
+ rm -rf $(wildcard *.o *.d *.dSYM)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17777.49524.patch
Type: text/x-patch
Size: 2832 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20160301/bdf257ae/attachment.bin>
More information about the lldb-commits
mailing list