summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2011-10-17 18:40:02 +0000
committerJohn McCall <rjmccall@apple.com>2011-10-17 18:40:02 +0000
commit4124c4924d6349e2d8ddfe2b4df57030d23e4c4e (patch)
tree3204ea3f05dd96408cadbc06bc5d04fbf729a6e7 /clang/lib/Sema/SemaInit.cpp
parent3634f34659968deb782e319abdf6298616911b3d (diff)
downloadbcm5719-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.cpp23
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;
OpenPOWER on IntegriCloud