summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2014-12-11 19:33:57 +0000
committerSean Callanan <scallanan@apple.com>2014-12-11 19:33:57 +0000
commitd919698caaa57cc8ed9667f75cf3bee7b1779f0e (patch)
treeca1a36bc07b3dcc417aa06ff376a8563e94b1e9b
parentcf8112187740ebd5fc61ca6c7ed49d1ce62361fa (diff)
downloadbcm5719-llvm-d919698caaa57cc8ed9667f75cf3bee7b1779f0e.tar.gz
bcm5719-llvm-d919698caaa57cc8ed9667f75cf3bee7b1779f0e.zip
Removed the assertion that we can find any named
Objective-C type in the runtime. This is not actually true, it's entirely possible to say @class DoesntExist; @interface DoesExist { DoesntExist *whyyyyy; } @end and this code will not only compile but also run. So this assertion will fire in situations users might encounter. I left the assertion enabled in debug mode, because we could still catch a case we're not aware of (i.e., a class that we *ought* to have found but where somehow we mis-parsed the name). <rdar://problem/19151914> llvm-svn: 224038
-rw-r--r--lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp
index 197bdc01fcf..57d6d548965 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp
@@ -253,7 +253,14 @@ AppleObjCTypeEncodingParser::BuildObjCObjectPointerType (clang::ASTContext &ast_
max_matches,
decls);
- assert(num_types); // how can a type be mentioned in runtime type signatures and not be in the runtime?
+ // The user can forward-declare something that has no definition. The runtime doesn't prohibit this at all.
+ // This is a rare and very weird case. We keep this assert in debug builds so we catch other weird cases.
+#ifdef LLDB_CONFIGURATION_DEBUG
+ assert(num_types);
+#else
+ if (!num_types)
+ return ast_ctx.getObjCIdType();
+#endif
return ClangASTContext::GetTypeForDecl(decls[0]).GetPointerType().GetQualType();
}
OpenPOWER on IntegriCloud