diff options
author | Sean Callanan <scallanan@apple.com> | 2017-04-24 23:14:04 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2017-04-24 23:14:04 +0000 |
commit | c02a1c03124014ad6781b1b881dbce4f114f0f1b (patch) | |
tree | 162c8e515ea3b6517b188f32484a21970144fe2a /lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style | |
parent | 453f74556976d8183b27eb78279cfa107d7aefe6 (diff) | |
download | bcm5719-llvm-c02a1c03124014ad6781b1b881dbce4f114f0f1b.tar.gz bcm5719-llvm-c02a1c03124014ad6781b1b881dbce4f114f0f1b.zip |
[Expression parser] Return both types and variables
Many times a user wants to access a type when there's a variable of
the same name, or a variable when there's a type of the same name.
Depending on the precise context, currently the expression parser
can fail to resolve one or the other.
This is because ClangExpressionDeclMap has logic to limit the
amount of information it searches, and that logic sometimes cuts
down the search prematurely. This patch removes some of those early
exits.
In that sense, this patch trades performance (early exit is faster)
for correctness.
I've also included two new test cases showing examples of this
behavior – as well as modifying an existing test case that gets it
wrong.
llvm-svn: 301273
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style')
3 files changed, 46 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/Makefile b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/Makefile new file mode 100644 index 00000000000..f11f126fa64 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/Makefile @@ -0,0 +1,3 @@ +LEVEL = ../../../make +C_SOURCES := main.c +include $(LEVEL)/Makefile.rules
\ No newline at end of file diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py new file mode 100644 index 00000000000..8e83a3ab1a4 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py @@ -0,0 +1,7 @@ +from lldbsuite.test import lldbinline +from lldbsuite.test import decorators + +lldbinline.MakeInlineTest( + __file__, globals(), [ + decorators.expectedFailureAll( + oslist=["windows"], bugnumber="llvm.org/pr24764")])
\ No newline at end of file diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/main.cc b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/main.cc new file mode 100644 index 00000000000..040cf44defd --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/main.cc @@ -0,0 +1,36 @@ +//===-- main.cc -------------------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LIDENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +namespace n { + struct D { + int i; + static int anInt() { return 2; } + int dump() { return i; } + }; + + class C { + public: + int foo(D *D); + }; +} + +using namespace n; + +int C::foo(D* D) { + return D->dump(); //% self.expect("expression -- D->dump()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["int", "2"]) + //% self.expect("expression -- D::anInt()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["int", "2"]) + +} + +int main (int argc, char const *argv[]) +{ + D myD { D::anInt() }; + C().foo(&myD); + return 0; +} |