Author: Michael Buch Date: 2024-06-19T07:54:51+01:00 New Revision: dadf960607bb429baebd3f523ce5b93260a154d2
URL: https://github.com/llvm/llvm-project/commit/dadf960607bb429baebd3f523ce5b93260a154d2 DIFF: https://github.com/llvm/llvm-project/commit/dadf960607bb429baebd3f523ce5b93260a154d2.diff LOG: [lldb][ObjC] Don't query objective-c runtime for decls in C++ contexts (#95963) Added: lldb/test/Shell/Expr/TestObjCInCXXContext.test Modified: lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp lldb/test/API/lang/objcxx/objc-from-cpp-frames-without-debuginfo/TestObjCFromCppFramesWithoutDebugInfo.py Removed: ################################################################################ diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp index 82a7a2cc3f1ef..1fdd272dcbece 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp @@ -637,7 +637,7 @@ void ClangASTSource::FindExternalVisibleDecls( FindDeclInModules(context, name); } - if (!context.m_found_type) { + if (!context.m_found_type && m_ast_context->getLangOpts().ObjC) { FindDeclInObjCRuntime(context, name); } } diff --git a/lldb/test/API/lang/objcxx/objc-from-cpp-frames-without-debuginfo/TestObjCFromCppFramesWithoutDebugInfo.py b/lldb/test/API/lang/objcxx/objc-from-cpp-frames-without-debuginfo/TestObjCFromCppFramesWithoutDebugInfo.py index ef8d5540fa4ef..497c0dd128f48 100644 --- a/lldb/test/API/lang/objcxx/objc-from-cpp-frames-without-debuginfo/TestObjCFromCppFramesWithoutDebugInfo.py +++ b/lldb/test/API/lang/objcxx/objc-from-cpp-frames-without-debuginfo/TestObjCFromCppFramesWithoutDebugInfo.py @@ -15,4 +15,11 @@ def test(self): (_, process, _, _) = lldbutil.run_to_name_breakpoint(self, "main") self.assertState(process.GetState(), lldb.eStateStopped) + + # Tests that we can use builtin Objective-C identifiers. self.expect("expr id", error=False) + + # Tests that we can lookup Objective-C decls in the ObjC runtime plugin. + self.expect_expr( + "NSString *c; c == nullptr", result_value="true", result_type="bool" + ) diff --git a/lldb/test/Shell/Expr/TestObjCInCXXContext.test b/lldb/test/Shell/Expr/TestObjCInCXXContext.test new file mode 100644 index 0000000000000..8537799bdeb67 --- /dev/null +++ b/lldb/test/Shell/Expr/TestObjCInCXXContext.test @@ -0,0 +1,21 @@ +// UNSUPPORTED: system-linux, system-windows + +// Tests that we don't consult the the Objective-C runtime +// plugin when in a purely C++ context. +// +// RUN: %clangxx_host %p/Inputs/objc-cast.cpp -g -o %t +// RUN: %lldb %t \ +// RUN: -o "b main" -o run \ +// RUN: -o "expression --language objective-c -- NSString * a; a" \ +// RUN: -o "expression --language objective-c++ -- NSString * b; b" \ +// RUN: -o "expression NSString" \ +// RUN: 2>&1 | FileCheck %s + +// CHECK: (lldb) expression --language objective-c -- NSString * a; a +// CHECK-NEXT: (NSString *){{.*}}= nil + +// CHECK: (lldb) expression --language objective-c++ -- NSString * b; b +// CHECK-NEXT: (NSString *){{.*}}= nil + +// CHECK: (lldb) expression NSString +// CHECK-NEXT: error:{{.*}} use of undeclared identifier 'NSString' _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits