diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-12-02 21:47:04 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-12-02 21:47:04 +0000 |
commit | a3998bd364f8c6b4a520f479083da1d6e30482a1 (patch) | |
tree | 4dcfb989b1c25985d27161dca983d3510996ed66 /lib | |
parent | a9e9144f481111255c8a45731d3266ccd7660e95 (diff) |
When we're performing an explicit cast of some sort, don't complain
about deprecated Objective-C pointer conversions. Plus, make sure to
actually set an appropriate AssignmentAction when performing an
implicit conversion from an InitializationSequence. Fixes regressions
in the GCC DejaGNU testsuite.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120744 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 4 | ||||
-rw-r--r-- | lib/Sema/SemaInit.cpp | 10 |
2 files changed, 6 insertions, 8 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index f6bfee91ee..fceb542c79 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -1732,7 +1732,7 @@ Sema::PerformImplicitConversion(Expr *&From, QualType ToType, } else assert(0 && "Unknown conversion function kind!"); - // Whatch out for elipsis conversion. + // Watch out for elipsis conversion. if (!ICS.UserDefined.EllipsisConversion) { if (PerformImplicitConversion(From, BeforeToType, ICS.UserDefined.Before, AA_Converting, @@ -1925,7 +1925,7 @@ Sema::PerformImplicitConversion(Expr *&From, QualType ToType, break; case ICK_Pointer_Conversion: { - if (SCS.IncompatibleObjC) { + if (SCS.IncompatibleObjC && Action != AA_Casting) { // Diagnose incompatible Objective-C conversions Diag(From->getSourceRange().getBegin(), diag::ext_typecheck_convert_incompatible_pointer) diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 455f7bbba7..26826aa87b 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -3233,6 +3233,8 @@ getAssignmentAction(const InitializedEntity &Entity) { switch(Entity.getKind()) { case InitializedEntity::EK_Variable: case InitializedEntity::EK_New: + case InitializedEntity::EK_Exception: + case InitializedEntity::EK_Base: return Sema::AA_Initializing; case InitializedEntity::EK_Parameter: @@ -3245,11 +3247,6 @@ getAssignmentAction(const InitializedEntity &Entity) { case InitializedEntity::EK_Result: return Sema::AA_Returning; - case InitializedEntity::EK_Exception: - case InitializedEntity::EK_Base: - llvm_unreachable("No assignment action for C++-specific initialization"); - break; - case InitializedEntity::EK_Temporary: // FIXME: Can we tell apart casting vs. converting? return Sema::AA_Casting; @@ -3868,7 +3865,8 @@ InitializationSequence::Perform(Sema &S, bool IgnoreBaseAccess = Kind.isCStyleOrFunctionalCast(); if (S.PerformImplicitConversion(CurInitExpr, Step->Type, *Step->ICS, - Sema::AA_Converting, IgnoreBaseAccess)) + getAssignmentAction(Entity), + IgnoreBaseAccess)) return ExprError(); CurInit.release(); |