[Lldb-commits] [lldb] r304510 - [TypeSystem] Handle Clang AttributedTypes
Sean Callanan via lldb-commits
lldb-commits at lists.llvm.org
Thu Jun 1 18:24:19 PDT 2017
Author: spyffe
Date: Thu Jun 1 20:24:18 2017
New Revision: 304510
URL: http://llvm.org/viewvc/llvm-project?rev=304510&view=rev
Log:
[TypeSystem] Handle Clang AttributedTypes
When parsing types originating in modules, it is possible to encounter AttributedTypes
(such as the type generated for NSString *_Nonnull). Some of LLDB's ClangASTContext
methods deal with them; others do not. In particular, one function that did not was
GetTypeInfo, causing TestObjCNewSyntax to fail.
This fixes that, treating AttributedType as essentially transparent and getting the
information for the modified type.
In addition, however, TestObjCNewSyntax is a monolithic test that verifies a bunch of
different things, all of which can break independently of one another. I broke it
apart into smaller tests so that we get more precise failures when something (like
this) breaks.
Differential Revision: https://reviews.llvm.org/D33812
Modified:
lldb/trunk/packages/Python/lldbsuite/test/lang/objc/objc-new-syntax/TestObjCNewSyntax.py
lldb/trunk/source/Symbol/ClangASTContext.cpp
Modified: lldb/trunk/packages/Python/lldbsuite/test/lang/objc/objc-new-syntax/TestObjCNewSyntax.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/objc/objc-new-syntax/TestObjCNewSyntax.py?rev=304510&r1=304509&r2=304510&view=diff
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lang/objc/objc-new-syntax/TestObjCNewSyntax.py (original)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/objc/objc-new-syntax/TestObjCNewSyntax.py Thu Jun 1 20:24:18 2017
@@ -26,16 +26,7 @@ class ObjCNewSyntaxTestCase(TestBase):
# Find the line number to break inside main().
self.line = line_number('main.m', '// Set breakpoint 0 here.')
- @skipUnlessDarwin
- @expectedFailureAll(
- oslist=['macosx'],
- compiler='clang',
- compiler_version=[
- '<',
- '7.0.0'])
- @skipIf(macos_version=["<", "10.12"])
- @expectedFailureAll(archs=["i[3-6]86"])
- def test_expr(self):
+ def runToBreakpoint(self):
self.build()
exe = os.path.join(os.getcwd(), "a.out")
self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
@@ -55,6 +46,18 @@ class ObjCNewSyntaxTestCase(TestBase):
self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
substrs=[' resolved, hit count = 1'])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_read_array(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- immutable_array[0]",
VARIABLES_DISPLAYED_CORRECTLY,
@@ -65,6 +68,18 @@ class ObjCNewSyntaxTestCase(TestBase):
VARIABLES_DISPLAYED_CORRECTLY,
substrs=["foo"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_update_array(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- mutable_array[0] = @\"bar\"",
VARIABLES_DISPLAYED_CORRECTLY,
@@ -75,6 +90,18 @@ class ObjCNewSyntaxTestCase(TestBase):
VARIABLES_DISPLAYED_CORRECTLY,
substrs=["bar"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_read_dictionary(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- immutable_dictionary[@\"key\"]",
VARIABLES_DISPLAYED_CORRECTLY,
@@ -85,6 +112,18 @@ class ObjCNewSyntaxTestCase(TestBase):
VARIABLES_DISPLAYED_CORRECTLY,
substrs=["value"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_update_dictionary(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- mutable_dictionary[@\"key\"] = @\"object\"",
VARIABLES_DISPLAYED_CORRECTLY,
@@ -95,6 +134,18 @@ class ObjCNewSyntaxTestCase(TestBase):
VARIABLES_DISPLAYED_CORRECTLY,
substrs=["object"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_array_literal(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- @[ @\"foo\", @\"bar\" ]",
VARIABLES_DISPLAYED_CORRECTLY,
@@ -103,6 +154,18 @@ class ObjCNewSyntaxTestCase(TestBase):
"foo",
"bar"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_dictionary_literal(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- @{ @\"key\" : @\"object\" }",
VARIABLES_DISPLAYED_CORRECTLY,
@@ -110,9 +173,33 @@ class ObjCNewSyntaxTestCase(TestBase):
"key",
"object"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_char_literal(self):
+ self.runToBreakpoint()
+
self.expect("expr --object-description -- @'a'",
VARIABLES_DISPLAYED_CORRECTLY, substrs=[str(ord('a'))])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_integer_literals(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- @1",
VARIABLES_DISPLAYED_CORRECTLY,
@@ -138,9 +225,33 @@ class ObjCNewSyntaxTestCase(TestBase):
VARIABLES_DISPLAYED_CORRECTLY,
substrs=["1"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_float_literal(self):
+ self.runToBreakpoint()
+
self.expect("expr -- @123.45", VARIABLES_DISPLAYED_CORRECTLY,
substrs=["NSNumber", "123.45"])
+ @skipUnlessDarwin
+ @expectedFailureAll(
+ oslist=['macosx'],
+ compiler='clang',
+ compiler_version=[
+ '<',
+ '7.0.0'])
+ @skipIf(macos_version=["<", "10.12"])
+ @expectedFailureAll(archs=["i[3-6]86"])
+ def test_expressions_in_literals(self):
+ self.runToBreakpoint()
+
self.expect(
"expr --object-description -- @( 1 + 3 )",
VARIABLES_DISPLAYED_CORRECTLY,
Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=304510&r1=304509&r2=304510&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp Thu Jun 1 20:24:18 2017
@@ -3938,6 +3938,11 @@ ClangASTContext::GetTypeInfo(lldb::opaqu
const clang::Type::TypeClass type_class = qual_type->getTypeClass();
switch (type_class) {
+ case clang::Type::Attributed:
+ return GetTypeInfo(
+ qual_type->getAs<clang::AttributedType>()
+ ->getModifiedType().getAsOpaquePtr(),
+ pointee_or_element_clang_type);
case clang::Type::Builtin: {
const clang::BuiltinType *builtin_type = llvm::dyn_cast<clang::BuiltinType>(
qual_type->getCanonicalTypeInternal());
More information about the lldb-commits
mailing list