From fae436326559f3e93944dc4d150fb945dc12097b Mon Sep 17 00:00:00 2001 From: Ewan Crawford Date: Tue, 15 Mar 2016 13:02:11 +0000 Subject: [PATCH] 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 Differential Revision: http://reviews.llvm.org/D17777 llvm-svn: 263547 --- .../expression_command/anonymous-struct/Makefile | 12 +++++++ .../anonymous-struct/TestCallUserAnonTypedef.py | 40 ++++++++++++++++++++++ .../expression_command/anonymous-struct/main.cpp | 26 ++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/Makefile create mode 100644 lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/TestCallUserAnonTypedef.py create mode 100644 lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp 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 0000000..7df664a --- /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 0000000..4ee08d4 --- /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 0000000..5b170c5 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/expression_command/anonymous-struct/main.cpp @@ -0,0 +1,26 @@ +#include + +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)); +} -- 2.7.4