diff options
author | John McCall <rjmccall@apple.com> | 2011-10-17 18:40:02 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2011-10-17 18:40:02 +0000 |
commit | 4124c4924d6349e2d8ddfe2b4df57030d23e4c4e (patch) | |
tree | 3204ea3f05dd96408cadbc06bc5d04fbf729a6e7 /clang/lib/Sema/SemaInit.cpp | |
parent | 3634f34659968deb782e319abdf6298616911b3d (diff) | |
download | bcm5719-llvm-4124c4924d6349e2d8ddfe2b4df57030d23e4c4e.tar.gz bcm5719-llvm-4124c4924d6349e2d8ddfe2b4df57030d23e4c4e.zip |
Teach the ARC compiler to not require __bridge casts when
passing/receiving CF objects at +0 to/from Objective-C methods
or audited C functions.
llvm-svn: 142219
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index c566b236e4f..f449c7d70d5 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -2427,6 +2427,7 @@ bool InitializationSequence::isAmbiguous() const { case FK_ArrayTypeMismatch: case FK_NonConstantArrayInit: case FK_ListInitializationFailed: + case FK_PlaceholderType: return false; case FK_ReferenceInitOverloadFailed: @@ -3793,8 +3794,20 @@ InitializationSequence::InitializationSequence(Sema &S, return; } Args[I] = Result.take(); + } else if (const BuiltinType *PlaceholderTy + = Args[I]->getType()->getAsPlaceholderType()) { + // FIXME: should we be doing this here? + if (PlaceholderTy->getKind() != BuiltinType::Overload) { + ExprResult result = S.CheckPlaceholderExpr(Args[I]); + if (result.isInvalid()) { + SetFailed(FK_PlaceholderType); + return; + } + Args[I] = result.take(); + } } + QualType SourceType; Expr *Initializer = 0; if (NumArgs == 1) { @@ -5200,6 +5213,11 @@ bool InitializationSequence::Diagnose(Sema &S, "Inconsistent init list check result."); break; } + + case FK_PlaceholderType: { + // FIXME: Already diagnosed! + break; + } } PrintInitLocationNote(S, Entity); @@ -5297,6 +5315,11 @@ void InitializationSequence::dump(raw_ostream &OS) const { case FK_ListInitializationFailed: OS << "list initialization checker failure"; + break; + + case FK_PlaceholderType: + OS << "initializer expression isn't contextually valid"; + break; } OS << '\n'; return; |