[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