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
This commit is contained in:
Sean Callanan 2014-12-11 19:33:57 +00:00
parent cf81121877
commit d919698caa
1 changed files with 8 additions and 1 deletions

View File

@ -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();
}