diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2013-01-04 18:45:40 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2013-01-04 18:45:40 +0000 |
commit | f7992132207d7ddc8810a135cec97ebe5805e500 (patch) | |
tree | 3ad4b172708a775ade4dceefdaebea071dc09c95 /lib/Sema/SemaDecl.cpp | |
parent | 2d5c133d3dd95507db63147997109f06e8cfa833 (diff) |
Fix up various builtin declaration of objc_msgSend families
to match those foung in objc.h an avoid spurious warnings.
// rdar://12489098
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171492 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 61791b2aa5..3bbb9a4cfd 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1464,6 +1464,24 @@ Scope *Sema::getNonFieldDeclScope(Scope *S) { return S; } +/// \brief Looks up the declaration of "struct objc_super" and +/// saves it for later use in building builtin declaration of +/// objc_msgSendSuper and objc_msgSendSuper_stret. If no such +/// pre-existing declaration exists no action takes place. +static void LookupPredefedObjCSuperType(Sema &ThisSema, Scope *S, + IdentifierInfo *II) { + if (!II->isStr("objc_msgSendSuper")) + return; + ASTContext &Context = ThisSema.Context; + + LookupResult Result(ThisSema, &Context.Idents.get("objc_super"), + SourceLocation(), Sema::LookupTagName); + ThisSema.LookupName(Result, S); + if (Result.getResultKind() == LookupResult::Found) + if (const TagDecl *TD = Result.getAsSingle<TagDecl>()) + Context.setObjCSuperType(Context.getTagDeclType(TD)); +} + /// LazilyCreateBuiltin - The specified Builtin-ID was first used at /// file scope. lazily create a decl for it. ForRedeclaration is true /// if we're creating this built-in in anticipation of redeclaring the @@ -1471,6 +1489,8 @@ Scope *Sema::getNonFieldDeclScope(Scope *S) { NamedDecl *Sema::LazilyCreateBuiltin(IdentifierInfo *II, unsigned bid, Scope *S, bool ForRedeclaration, SourceLocation Loc) { + LookupPredefedObjCSuperType(*this, S, II); + Builtin::ID BID = (Builtin::ID)bid; ASTContext::GetBuiltinTypeError Error; |