diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Sema/SemaCast.cpp')
| -rw-r--r-- | contrib/llvm/tools/clang/lib/Sema/SemaCast.cpp | 120 | 
1 files changed, 60 insertions, 60 deletions
diff --git a/contrib/llvm/tools/clang/lib/Sema/SemaCast.cpp b/contrib/llvm/tools/clang/lib/Sema/SemaCast.cpp index b7f4629fbab7..57aac80f5ad2 100644 --- a/contrib/llvm/tools/clang/lib/Sema/SemaCast.cpp +++ b/contrib/llvm/tools/clang/lib/Sema/SemaCast.cpp @@ -205,13 +205,13 @@ static TryCastResult TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExp                                                 CXXCastPath &BasePath);  static TryCastResult TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, -                                           QualType DestType,  +                                           QualType DestType,                                             Sema::CheckedConversionKind CCK,                                             SourceRange OpRange,                                             unsigned &msg, CastKind &Kind,                                             bool ListInitialization);  static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, -                                   QualType DestType,  +                                   QualType DestType,                                     Sema::CheckedConversionKind CCK,                                     SourceRange OpRange,                                     unsigned &msg, CastKind &Kind, @@ -319,7 +319,7 @@ Sema::BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind,          return ExprError();        DiscardMisalignedMemberAddress(DestType.getTypePtr(), E);      } -     +      return Op.complete(CXXStaticCastExpr::Create(Context, Op.ResultType,                                     Op.ValueKind, Op.Kind, Op.SrcExpr.get(),                                                   &Op.BasePath, DestTInfo, @@ -573,11 +573,11 @@ CastsAwayConstness(Sema &Self, QualType SrcType, QualType DestType,             "Destination type is not pointer or pointer to member.");    } -  QualType UnwrappedSrcType = Self.Context.getCanonicalType(SrcType),  +  QualType UnwrappedSrcType = Self.Context.getCanonicalType(SrcType),             UnwrappedDestType = Self.Context.getCanonicalType(DestType); -  // Find the qualifiers. We only care about cvr-qualifiers for the  -  // purpose of this check, because other qualifiers (address spaces,  +  // Find the qualifiers. We only care about cvr-qualifiers for the +  // purpose of this check, because other qualifiers (address spaces,    // Objective-C GC, etc.) are part of the type's identity.    QualType PrevUnwrappedSrcType = UnwrappedSrcType;    QualType PrevUnwrappedDestType = UnwrappedDestType; @@ -719,7 +719,7 @@ void CastOperation::CheckDynamicCast() {    // C++0x 5.2.7p2: If T is a pointer type, v shall be an rvalue of a pointer to    //   complete class type, [...]. If T is an lvalue reference type, v shall be -  //   an lvalue of a complete class type, [...]. If T is an rvalue reference  +  //   an lvalue of a complete class type, [...]. If T is an rvalue reference    //   type, v shall be an expression having a complete class type, [...]    QualType SrcType = Self.Context.getCanonicalType(OrigSrcType);    QualType SrcPointee; @@ -788,7 +788,7 @@ void CastOperation::CheckDynamicCast() {    if (DestRecord &&        Self.IsDerivedFrom(OpRange.getBegin(), SrcPointee, DestPointee)) {      if (Self.CheckDerivedToBaseConversion(SrcPointee, DestPointee, -                                           OpRange.getBegin(), OpRange,  +                                           OpRange.getBegin(), OpRange,                                             &BasePath)) {        SrcExpr = ExprError();        return; @@ -950,15 +950,15 @@ void CastOperation::CheckReinterpretCast() {      return;    unsigned msg = diag::err_bad_cxx_cast_generic; -  TryCastResult tcr =  -    TryReinterpretCast(Self, SrcExpr, DestType,  +  TryCastResult tcr = +    TryReinterpretCast(Self, SrcExpr, DestType,                         /*CStyle*/false, OpRange, msg, Kind);    if (tcr != TC_Success && msg != 0) {      if (SrcExpr.isInvalid()) // if conversion failed, don't report another error        return;      if (SrcExpr.get()->getType() == Self.Context.OverloadTy) { -      //FIXME: &f<int>; is overloaded and resolvable  -      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload)  +      //FIXME: &f<int>; is overloaded and resolvable +      Self.Diag(OpRange.getBegin(), diag::err_bad_reinterpret_cast_overload)          << OverloadExpr::find(SrcExpr.get()).Expression->getName()          << DestType << OpRange;        Self.NoteAllOverloadCandidates(SrcExpr.get()); @@ -996,8 +996,8 @@ void CastOperation::CheckStaticCast() {      Kind = CK_ToVoid;      if (claimPlaceholder(BuiltinType::Overload)) { -      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr,  -                false, // Decay Function to ptr  +      Self.ResolveAndFixSingleFunctionTemplateSpecialization(SrcExpr, +                false, // Decay Function to ptr                  true, // Complain                  OpRange, DestType, diag::err_bad_static_cast_overload);        if (SrcExpr.isInvalid()) @@ -1025,7 +1025,7 @@ void CastOperation::CheckStaticCast() {      if (SrcExpr.get()->getType() == Self.Context.OverloadTy) {        OverloadExpr* oe = OverloadExpr::find(SrcExpr.get()).Expression;        Self.Diag(OpRange.getBegin(), diag::err_bad_static_cast_overload) -        << oe->getName() << DestType << OpRange  +        << oe->getName() << DestType << OpRange          << oe->getQualifierLoc().getSourceRange();        Self.NoteAllOverloadCandidates(SrcExpr.get());      } else { @@ -1048,15 +1048,15 @@ void CastOperation::CheckStaticCast() {  /// possible. If @p CStyle, ignore access restrictions on hierarchy casting  /// and casting away constness.  static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr, -                                   QualType DestType,  +                                   QualType DestType,                                     Sema::CheckedConversionKind CCK,                                     SourceRange OpRange, unsigned &msg,                                     CastKind &Kind, CXXCastPath &BasePath,                                     bool ListInitialization) {    // Determine whether we have the semantics of a C-style cast. -  bool CStyle  +  bool CStyle      = (CCK == Sema::CCK_CStyleCast || CCK == Sema::CCK_FunctionalCast); -   +    // The order the tests is not entirely arbitrary. There is one conversion    // that can be handled in two different ways. Given:    // struct A {}; @@ -1082,7 +1082,7 @@ static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,    if (tcr != TC_NotApplicable)      return tcr; -  // C++11 [expr.static.cast]p3:  +  // C++11 [expr.static.cast]p3:    //   A glvalue of type "cv1 T1" can be cast to type "rvalue reference to cv2    //   T2" if "cv2 T2" is reference-compatible with "cv1 T1".    tcr = TryLValueToRValueCast(Self, SrcExpr.get(), DestType, CStyle, Kind, @@ -1098,7 +1098,7 @@ static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,      return TC_Failed;    if (tcr != TC_NotApplicable)      return tcr; -   +    // C++ 5.2.9p6: May apply the reverse of any standard conversion, except    // lvalue-to-rvalue, array-to-pointer, function-to-pointer, and boolean    // conversions, subject to further restrictions. @@ -1126,7 +1126,7 @@ static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,        }      }    } -   +    // Reverse integral promotion/conversion. All such conversions are themselves    // again integral promotions or conversions and are thus already handled by    // p2 (TryDirectInitialization above). @@ -1199,7 +1199,7 @@ static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,          }        }        else if (DestType->isObjCObjectPointerType()) { -        // allow both c-style cast and static_cast of objective-c pointers as  +        // allow both c-style cast and static_cast of objective-c pointers as          // they are pervasive.          Kind = CK_CPointerToObjCPointerCast;          return TC_Success; @@ -1230,7 +1230,7 @@ static TryCastResult TryStaticCast(Sema &Self, ExprResult &SrcExpr,        if (SrcPointer->getPointeeType()->getAs<RecordType>() &&            DestPointer->getPointeeType()->getAs<RecordType>())         msg = diag::err_bad_cxx_cast_unrelated_class; -   +    // We tried everything. Everything! Nothing works! :-(    return TC_NotApplicable;  } @@ -1284,11 +1284,11 @@ TryCastResult TryLValueToRValueCast(Sema &Self, Expr *SrcExpr,      if (!Self.IsDerivedFrom(SrcExpr->getLocStart(), SrcExpr->getType(),                              R->getPointeeType(), Paths))        return TC_NotApplicable; -   +      Self.BuildBasePathArray(Paths, BasePath);    } else      Kind = CK_NoOp; -   +    return TC_Success;  } @@ -1323,8 +1323,8 @@ TryStaticReferenceDowncast(Sema &Self, Expr *SrcExpr, QualType DestType,    // FIXME: If the source is a prvalue, we should issue a warning (because the    // cast always has undefined behavior), and for AST consistency, we should    // materialize a temporary. -  return TryStaticDowncast(Self,  -                           Self.Context.getCanonicalType(SrcExpr->getType()),  +  return TryStaticDowncast(Self, +                           Self.Context.getCanonicalType(SrcExpr->getType()),                             Self.Context.getCanonicalType(DestPointee), CStyle,                             OpRange, SrcExpr->getType(), DestType, msg, Kind,                             BasePath); @@ -1355,9 +1355,9 @@ TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType,      return TC_NotApplicable;    } -  return TryStaticDowncast(Self,  +  return TryStaticDowncast(Self,                     Self.Context.getCanonicalType(SrcPointer->getPointeeType()), -                  Self.Context.getCanonicalType(DestPointer->getPointeeType()),  +                  Self.Context.getCanonicalType(DestPointer->getPointeeType()),                             CStyle, OpRange, SrcType, DestType, msg, Kind,                             BasePath);  } @@ -1368,7 +1368,7 @@ TryStaticPointerDowncast(Sema &Self, QualType SrcType, QualType DestType,  TryCastResult  TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType,                    bool CStyle, SourceRange OpRange, QualType OrigSrcType, -                  QualType OrigDestType, unsigned &msg,  +                  QualType OrigDestType, unsigned &msg,                    CastKind &Kind, CXXCastPath &BasePath) {    // We can only work with complete types. But don't complain if it doesn't work    if (!Self.isCompleteType(OpRange.getBegin(), SrcType) || @@ -1434,7 +1434,7 @@ TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType,      }      Self.Diag(OpRange.getBegin(), diag::err_ambiguous_base_to_derived_cast) -      << QualType(SrcType).getUnqualifiedType()  +      << QualType(SrcType).getUnqualifiedType()        << QualType(DestType).getUnqualifiedType()        << PathDisplayStr << OpRange;      msg = 0; @@ -1478,8 +1478,8 @@ TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType,  ///   where B is a base class of D [...].  ///  TryCastResult -TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType,  -                             QualType DestType, bool CStyle,  +TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType, +                             QualType DestType, bool CStyle,                               SourceRange OpRange,                               unsigned &msg, CastKind &Kind,                               CXXCastPath &BasePath) { @@ -1499,7 +1499,7 @@ TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType,        WasOverloadedFunction = true;      }    } -   +    const MemberPointerType *SrcMemPtr = SrcType->getAs<MemberPointerType>();    if (!SrcMemPtr) {      msg = diag::err_bad_static_cast_member_pointer_nonmp; @@ -1569,8 +1569,8 @@ TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType,    if (WasOverloadedFunction) {      // Resolve the address of the overloaded function again, this time      // allowing complaints if something goes wrong. -    FunctionDecl *Fn = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(),  -                                                               DestType,  +    FunctionDecl *Fn = Self.ResolveAddressOfOverloadedFunction(SrcExpr.get(), +                                                               DestType,                                                                 true,                                                                 FoundOverload);      if (!Fn) { @@ -1597,7 +1597,7 @@ TryStaticMemberPointerUpcast(Sema &Self, ExprResult &SrcExpr, QualType SrcType,  ///   @c static_cast if the declaration "T t(e);" is well-formed [...].  TryCastResult  TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType, -                      Sema::CheckedConversionKind CCK,  +                      Sema::CheckedConversionKind CCK,                        SourceRange OpRange, unsigned &msg,                        CastKind &Kind, bool ListInitialization) {    if (DestType->isRecordType()) { @@ -1625,26 +1625,26 @@ TryStaticImplicitCast(Sema &Self, ExprResult &SrcExpr, QualType DestType,    InitializationSequence InitSeq(Self, Entity, InitKind, SrcExprRaw);    // At this point of CheckStaticCast, if the destination is a reference, -  // or the expression is an overload expression this has to work.  +  // or the expression is an overload expression this has to work.    // There is no other way that works.    // On the other hand, if we're checking a C-style cast, we've still got    // the reinterpret_cast way. -  bool CStyle  +  bool CStyle      = (CCK == Sema::CCK_CStyleCast || CCK == Sema::CCK_FunctionalCast);    if (InitSeq.Failed() && (CStyle || !DestType->isReferenceType()))      return TC_NotApplicable; -     +    ExprResult Result = InitSeq.Perform(Self, Entity, InitKind, SrcExprRaw);    if (Result.isInvalid()) {      msg = 0;      return TC_Failed;    } -   +    if (InitSeq.isConstructorInitialization())      Kind = CK_ConstructorConversion;    else      Kind = CK_NoOp; -   +    SrcExpr = Result;    return TC_Success;  } @@ -1976,7 +1976,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,                                          unsigned &msg,                                          CastKind &Kind) {    bool IsLValueCast = false; -   +    DestType = Self.Context.getCanonicalType(DestType);    QualType SrcType = SrcExpr.get()->getType(); @@ -2019,7 +2019,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,        // FIXME: Use a specific diagnostic for the rest of these cases.      case OK_VectorComponent: inappropriate = "vector element";      break;      case OK_ObjCProperty:    inappropriate = "property expression"; break; -    case OK_ObjCSubscript:   inappropriate = "container subscripting expression";  +    case OK_ObjCSubscript:   inappropriate = "container subscripting expression";                               break;      }      if (inappropriate) { @@ -2033,7 +2033,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,      // This code does this transformation for the checked types.      DestType = Self.Context.getPointerType(DestTypeTmp->getPointeeType());      SrcType = Self.Context.getPointerType(SrcType); -     +      IsLValueCast = true;    } @@ -2121,18 +2121,18 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,        msg = diag::err_bad_cxx_cast_scalar_to_vector_different_size;      else        msg = diag::err_bad_cxx_cast_vector_to_vector_different_size; -     +      return TC_Failed;    }    if (SrcType == DestType) {      // C++ 5.2.10p2 has a note that mentions that, subject to all other      // restrictions, a cast to the same type is allowed so long as it does not -    // cast away constness. In C++98, the intent was not entirely clear here,  +    // cast away constness. In C++98, the intent was not entirely clear here,      // since all other paragraphs explicitly forbid casts to the same type.      // C++11 clarifies this case with p2.      // -    // The only allowed types are: integral, enumeration, pointer, or  +    // The only allowed types are: integral, enumeration, pointer, or      // pointer-to-member types.  We also won't restrict Obj-C pointers either.      Kind = CK_NoOp;      TryCastResult Result = TC_NotApplicable; @@ -2260,7 +2260,7 @@ static TryCastResult TryReinterpretCast(Sema &Self, ExprResult &SrcExpr,        << OpRange;      return SuccessResult;    } -   +    // C++ 5.2.10p7: A pointer to an object can be explicitly converted to    //   a pointer to an object of different type.    // Void pointers are not specified, but supported by every compiler out there. @@ -2296,7 +2296,7 @@ void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle,      if (claimPlaceholder(BuiltinType::Overload)) {        Self.ResolveAndFixSingleFunctionTemplateSpecialization( -                  SrcExpr, /* Decay Function to ptr */ false,  +                  SrcExpr, /* Decay Function to ptr */ false,                    /* Complain */ true, DestRange, DestType,                    diag::err_bad_cstyle_cast_overload);        if (SrcExpr.isInvalid()) @@ -2404,7 +2404,7 @@ void CastOperation::CheckCXXCStyleCast(bool FunctionalStyle,    }  } -/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a  +/// DiagnoseBadFunctionCast - Warn whenever a function call is cast to a  ///  non-matching type. Such as enum function call to int, int call to  /// pointer; etc. Cast to 'void' is an exception.  static void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr, @@ -2412,10 +2412,10 @@ static void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr,    if (Self.Diags.isIgnored(diag::warn_bad_function_cast,                             SrcExpr.get()->getExprLoc()))      return; -   +    if (!isa<CallExpr>(SrcExpr.get()))      return; -   +    QualType SrcType = SrcExpr.get()->getType();    if (DestType.getUnqualifiedType()->isVoidType())      return; @@ -2434,7 +2434,7 @@ static void DiagnoseBadFunctionCast(Sema &Self, const ExprResult &SrcExpr,      return;    if (SrcType->isComplexIntegerType() && DestType->isComplexIntegerType())      return; -   +    Self.Diag(SrcExpr.get()->getExprLoc(),              diag::warn_bad_function_cast)              << SrcType << DestType << SrcExpr.get()->getSourceRange(); @@ -2641,26 +2641,26 @@ void CastOperation::CheckCStyleCast() {        if (const PointerType *ExprPtr = SrcType->getAs<PointerType>()) {          Qualifiers CastQuals = CastPtr->getPointeeType().getQualifiers();          Qualifiers ExprQuals = ExprPtr->getPointeeType().getQualifiers(); -        if (CastPtr->getPointeeType()->isObjCLifetimeType() &&  +        if (CastPtr->getPointeeType()->isObjCLifetimeType() &&              ExprPtr->getPointeeType()->isObjCLifetimeType() &&              !CastQuals.compatiblyIncludesObjCLifetime(ExprQuals)) { -          Self.Diag(SrcExpr.get()->getLocStart(),  +          Self.Diag(SrcExpr.get()->getLocStart(),                      diag::err_typecheck_incompatible_ownership)              << SrcType << DestType << Sema::AA_Casting              << SrcExpr.get()->getSourceRange();            return;          }        } -    }  +    }      else if (!Self.CheckObjCARCUnavailableWeakConversion(DestType, SrcType)) { -      Self.Diag(SrcExpr.get()->getLocStart(),  +      Self.Diag(SrcExpr.get()->getLocStart(),                  diag::err_arc_convesion_of_weak_unavailable)          << 1 << SrcType << DestType << SrcExpr.get()->getSourceRange();        SrcExpr = ExprError();        return;      }    } -   +    DiagnoseCastOfObjCSEL(Self, SrcExpr, DestType);    DiagnoseCallingConvCast(Self, SrcExpr, DestType, OpRange);    DiagnoseBadFunctionCast(Self, SrcExpr, DestType); @@ -2714,7 +2714,7 @@ ExprResult Sema::BuildCStyleCastExpr(SourceLocation LPLoc,                                       TypeSourceInfo *CastTypeInfo,                                       SourceLocation RPLoc,                                       Expr *CastExpr) { -  CastOperation Op(*this, CastTypeInfo->getType(), CastExpr);   +  CastOperation Op(*this, CastTypeInfo->getType(), CastExpr);    Op.DestRange = CastTypeInfo->getTypeLoc().getSourceRange();    Op.OpRange = SourceRange(LPLoc, CastExpr->getLocEnd());  | 
