Home | History | Annotate | Download | only in Sema
      1 //===--- SemaChecking.cpp - Extra Semantic Checking -----------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 //  This file implements extra semantic analysis beyond what is enforced
     11 //  by the C type system.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #include "clang/Sema/SemaInternal.h"
     16 #include "clang/AST/ASTContext.h"
     17 #include "clang/AST/CharUnits.h"
     18 #include "clang/AST/DeclCXX.h"
     19 #include "clang/AST/DeclObjC.h"
     20 #include "clang/AST/EvaluatedExprVisitor.h"
     21 #include "clang/AST/Expr.h"
     22 #include "clang/AST/ExprCXX.h"
     23 #include "clang/AST/ExprObjC.h"
     24 #include "clang/AST/StmtCXX.h"
     25 #include "clang/AST/StmtObjC.h"
     26 #include "clang/Analysis/Analyses/FormatString.h"
     27 #include "clang/Basic/CharInfo.h"
     28 #include "clang/Basic/TargetBuiltins.h"
     29 #include "clang/Basic/TargetInfo.h"
     30 #include "clang/Lex/Lexer.h" // TODO: Extract static functions to fix layering.
     31 #include "clang/Sema/Initialization.h"
     32 #include "clang/Sema/Lookup.h"
     33 #include "clang/Sema/ScopeInfo.h"
     34 #include "clang/Sema/Sema.h"
     35 #include "llvm/ADT/STLExtras.h"
     36 #include "llvm/ADT/SmallBitVector.h"
     37 #include "llvm/ADT/SmallString.h"
     38 #include "llvm/Support/ConvertUTF.h"
     39 #include "llvm/Support/raw_ostream.h"
     40 #include <limits>
     41 using namespace clang;
     42 using namespace sema;
     43 
     44 SourceLocation Sema::getLocationOfStringLiteralByte(const StringLiteral *SL,
     45                                                     unsigned ByteNo) const {
     46   return SL->getLocationOfByte(ByteNo, getSourceManager(), LangOpts,
     47                                Context.getTargetInfo());
     48 }
     49 
     50 /// Checks that a call expression's argument count is the desired number.
     51 /// This is useful when doing custom type-checking.  Returns true on error.
     52 static bool checkArgCount(Sema &S, CallExpr *call, unsigned desiredArgCount) {
     53   unsigned argCount = call->getNumArgs();
     54   if (argCount == desiredArgCount) return false;
     55 
     56   if (argCount < desiredArgCount)
     57     return S.Diag(call->getLocEnd(), diag::err_typecheck_call_too_few_args)
     58         << 0 /*function call*/ << desiredArgCount << argCount
     59         << call->getSourceRange();
     60 
     61   // Highlight all the excess arguments.
     62   SourceRange range(call->getArg(desiredArgCount)->getLocStart(),
     63                     call->getArg(argCount - 1)->getLocEnd());
     64 
     65   return S.Diag(range.getBegin(), diag::err_typecheck_call_too_many_args)
     66     << 0 /*function call*/ << desiredArgCount << argCount
     67     << call->getArg(1)->getSourceRange();
     68 }
     69 
     70 /// Check that the first argument to __builtin_annotation is an integer
     71 /// and the second argument is a non-wide string literal.
     72 static bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {
     73   if (checkArgCount(S, TheCall, 2))
     74     return true;
     75 
     76   // First argument should be an integer.
     77   Expr *ValArg = TheCall->getArg(0);
     78   QualType Ty = ValArg->getType();
     79   if (!Ty->isIntegerType()) {
     80     S.Diag(ValArg->getLocStart(), diag::err_builtin_annotation_first_arg)
     81       << ValArg->getSourceRange();
     82     return true;
     83   }
     84 
     85   // Second argument should be a constant string.
     86   Expr *StrArg = TheCall->getArg(1)->IgnoreParenCasts();
     87   StringLiteral *Literal = dyn_cast<StringLiteral>(StrArg);
     88   if (!Literal || !Literal->isAscii()) {
     89     S.Diag(StrArg->getLocStart(), diag::err_builtin_annotation_second_arg)
     90       << StrArg->getSourceRange();
     91     return true;
     92   }
     93 
     94   TheCall->setType(Ty);
     95   return false;
     96 }
     97 
     98 /// Check that the argument to __builtin_addressof is a glvalue, and set the
     99 /// result type to the corresponding pointer type.
    100 static bool SemaBuiltinAddressof(Sema &S, CallExpr *TheCall) {
    101   if (checkArgCount(S, TheCall, 1))
    102     return true;
    103 
    104   ExprResult Arg(TheCall->getArg(0));
    105   QualType ResultType = S.CheckAddressOfOperand(Arg, TheCall->getLocStart());
    106   if (ResultType.isNull())
    107     return true;
    108 
    109   TheCall->setArg(0, Arg.get());
    110   TheCall->setType(ResultType);
    111   return false;
    112 }
    113 
    114 ExprResult
    115 Sema::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
    116   ExprResult TheCallResult(TheCall);
    117 
    118   // Find out if any arguments are required to be integer constant expressions.
    119   unsigned ICEArguments = 0;
    120   ASTContext::GetBuiltinTypeError Error;
    121   Context.GetBuiltinType(BuiltinID, Error, &ICEArguments);
    122   if (Error != ASTContext::GE_None)
    123     ICEArguments = 0;  // Don't diagnose previously diagnosed errors.
    124 
    125   // If any arguments are required to be ICE's, check and diagnose.
    126   for (unsigned ArgNo = 0; ICEArguments != 0; ++ArgNo) {
    127     // Skip arguments not required to be ICE's.
    128     if ((ICEArguments & (1 << ArgNo)) == 0) continue;
    129 
    130     llvm::APSInt Result;
    131     if (SemaBuiltinConstantArg(TheCall, ArgNo, Result))
    132       return true;
    133     ICEArguments &= ~(1 << ArgNo);
    134   }
    135 
    136   switch (BuiltinID) {
    137   case Builtin::BI__builtin___CFStringMakeConstantString:
    138     assert(TheCall->getNumArgs() == 1 &&
    139            "Wrong # arguments to builtin CFStringMakeConstantString");
    140     if (CheckObjCString(TheCall->getArg(0)))
    141       return ExprError();
    142     break;
    143   case Builtin::BI__builtin_stdarg_start:
    144   case Builtin::BI__builtin_va_start:
    145   case Builtin::BI__va_start:
    146     if (SemaBuiltinVAStart(TheCall))
    147       return ExprError();
    148     break;
    149   case Builtin::BI__builtin_isgreater:
    150   case Builtin::BI__builtin_isgreaterequal:
    151   case Builtin::BI__builtin_isless:
    152   case Builtin::BI__builtin_islessequal:
    153   case Builtin::BI__builtin_islessgreater:
    154   case Builtin::BI__builtin_isunordered:
    155     if (SemaBuiltinUnorderedCompare(TheCall))
    156       return ExprError();
    157     break;
    158   case Builtin::BI__builtin_fpclassify:
    159     if (SemaBuiltinFPClassification(TheCall, 6))
    160       return ExprError();
    161     break;
    162   case Builtin::BI__builtin_isfinite:
    163   case Builtin::BI__builtin_isinf:
    164   case Builtin::BI__builtin_isinf_sign:
    165   case Builtin::BI__builtin_isnan:
    166   case Builtin::BI__builtin_isnormal:
    167     if (SemaBuiltinFPClassification(TheCall, 1))
    168       return ExprError();
    169     break;
    170   case Builtin::BI__builtin_shufflevector:
    171     return SemaBuiltinShuffleVector(TheCall);
    172     // TheCall will be freed by the smart pointer here, but that's fine, since
    173     // SemaBuiltinShuffleVector guts it, but then doesn't release it.
    174   case Builtin::BI__builtin_prefetch:
    175     if (SemaBuiltinPrefetch(TheCall))
    176       return ExprError();
    177     break;
    178   case Builtin::BI__builtin_object_size:
    179     if (SemaBuiltinConstantArgRange(TheCall, 1, 0, 3))
    180       return ExprError();
    181     break;
    182   case Builtin::BI__builtin_longjmp:
    183     if (SemaBuiltinLongjmp(TheCall))
    184       return ExprError();
    185     break;
    186 
    187   case Builtin::BI__builtin_classify_type:
    188     if (checkArgCount(*this, TheCall, 1)) return true;
    189     TheCall->setType(Context.IntTy);
    190     break;
    191   case Builtin::BI__builtin_constant_p:
    192     if (checkArgCount(*this, TheCall, 1)) return true;
    193     TheCall->setType(Context.IntTy);
    194     break;
    195   case Builtin::BI__sync_fetch_and_add:
    196   case Builtin::BI__sync_fetch_and_add_1:
    197   case Builtin::BI__sync_fetch_and_add_2:
    198   case Builtin::BI__sync_fetch_and_add_4:
    199   case Builtin::BI__sync_fetch_and_add_8:
    200   case Builtin::BI__sync_fetch_and_add_16:
    201   case Builtin::BI__sync_fetch_and_sub:
    202   case Builtin::BI__sync_fetch_and_sub_1:
    203   case Builtin::BI__sync_fetch_and_sub_2:
    204   case Builtin::BI__sync_fetch_and_sub_4:
    205   case Builtin::BI__sync_fetch_and_sub_8:
    206   case Builtin::BI__sync_fetch_and_sub_16:
    207   case Builtin::BI__sync_fetch_and_or:
    208   case Builtin::BI__sync_fetch_and_or_1:
    209   case Builtin::BI__sync_fetch_and_or_2:
    210   case Builtin::BI__sync_fetch_and_or_4:
    211   case Builtin::BI__sync_fetch_and_or_8:
    212   case Builtin::BI__sync_fetch_and_or_16:
    213   case Builtin::BI__sync_fetch_and_and:
    214   case Builtin::BI__sync_fetch_and_and_1:
    215   case Builtin::BI__sync_fetch_and_and_2:
    216   case Builtin::BI__sync_fetch_and_and_4:
    217   case Builtin::BI__sync_fetch_and_and_8:
    218   case Builtin::BI__sync_fetch_and_and_16:
    219   case Builtin::BI__sync_fetch_and_xor:
    220   case Builtin::BI__sync_fetch_and_xor_1:
    221   case Builtin::BI__sync_fetch_and_xor_2:
    222   case Builtin::BI__sync_fetch_and_xor_4:
    223   case Builtin::BI__sync_fetch_and_xor_8:
    224   case Builtin::BI__sync_fetch_and_xor_16:
    225   case Builtin::BI__sync_add_and_fetch:
    226   case Builtin::BI__sync_add_and_fetch_1:
    227   case Builtin::BI__sync_add_and_fetch_2:
    228   case Builtin::BI__sync_add_and_fetch_4:
    229   case Builtin::BI__sync_add_and_fetch_8:
    230   case Builtin::BI__sync_add_and_fetch_16:
    231   case Builtin::BI__sync_sub_and_fetch:
    232   case Builtin::BI__sync_sub_and_fetch_1:
    233   case Builtin::BI__sync_sub_and_fetch_2:
    234   case Builtin::BI__sync_sub_and_fetch_4:
    235   case Builtin::BI__sync_sub_and_fetch_8:
    236   case Builtin::BI__sync_sub_and_fetch_16:
    237   case Builtin::BI__sync_and_and_fetch:
    238   case Builtin::BI__sync_and_and_fetch_1:
    239   case Builtin::BI__sync_and_and_fetch_2:
    240   case Builtin::BI__sync_and_and_fetch_4:
    241   case Builtin::BI__sync_and_and_fetch_8:
    242   case Builtin::BI__sync_and_and_fetch_16:
    243   case Builtin::BI__sync_or_and_fetch:
    244   case Builtin::BI__sync_or_and_fetch_1:
    245   case Builtin::BI__sync_or_and_fetch_2:
    246   case Builtin::BI__sync_or_and_fetch_4:
    247   case Builtin::BI__sync_or_and_fetch_8:
    248   case Builtin::BI__sync_or_and_fetch_16:
    249   case Builtin::BI__sync_xor_and_fetch:
    250   case Builtin::BI__sync_xor_and_fetch_1:
    251   case Builtin::BI__sync_xor_and_fetch_2:
    252   case Builtin::BI__sync_xor_and_fetch_4:
    253   case Builtin::BI__sync_xor_and_fetch_8:
    254   case Builtin::BI__sync_xor_and_fetch_16:
    255   case Builtin::BI__sync_val_compare_and_swap:
    256   case Builtin::BI__sync_val_compare_and_swap_1:
    257   case Builtin::BI__sync_val_compare_and_swap_2:
    258   case Builtin::BI__sync_val_compare_and_swap_4:
    259   case Builtin::BI__sync_val_compare_and_swap_8:
    260   case Builtin::BI__sync_val_compare_and_swap_16:
    261   case Builtin::BI__sync_bool_compare_and_swap:
    262   case Builtin::BI__sync_bool_compare_and_swap_1:
    263   case Builtin::BI__sync_bool_compare_and_swap_2:
    264   case Builtin::BI__sync_bool_compare_and_swap_4:
    265   case Builtin::BI__sync_bool_compare_and_swap_8:
    266   case Builtin::BI__sync_bool_compare_and_swap_16:
    267   case Builtin::BI__sync_lock_test_and_set:
    268   case Builtin::BI__sync_lock_test_and_set_1:
    269   case Builtin::BI__sync_lock_test_and_set_2:
    270   case Builtin::BI__sync_lock_test_and_set_4:
    271   case Builtin::BI__sync_lock_test_and_set_8:
    272   case Builtin::BI__sync_lock_test_and_set_16:
    273   case Builtin::BI__sync_lock_release:
    274   case Builtin::BI__sync_lock_release_1:
    275   case Builtin::BI__sync_lock_release_2:
    276   case Builtin::BI__sync_lock_release_4:
    277   case Builtin::BI__sync_lock_release_8:
    278   case Builtin::BI__sync_lock_release_16:
    279   case Builtin::BI__sync_swap:
    280   case Builtin::BI__sync_swap_1:
    281   case Builtin::BI__sync_swap_2:
    282   case Builtin::BI__sync_swap_4:
    283   case Builtin::BI__sync_swap_8:
    284   case Builtin::BI__sync_swap_16:
    285     return SemaBuiltinAtomicOverloaded(TheCallResult);
    286 #define BUILTIN(ID, TYPE, ATTRS)
    287 #define ATOMIC_BUILTIN(ID, TYPE, ATTRS) \
    288   case Builtin::BI##ID: \
    289     return SemaAtomicOpsOverloaded(TheCallResult, AtomicExpr::AO##ID);
    290 #include "clang/Basic/Builtins.def"
    291   case Builtin::BI__builtin_annotation:
    292     if (SemaBuiltinAnnotation(*this, TheCall))
    293       return ExprError();
    294     break;
    295   case Builtin::BI__builtin_addressof:
    296     if (SemaBuiltinAddressof(*this, TheCall))
    297       return ExprError();
    298     break;
    299   case Builtin::BI__builtin_operator_new:
    300   case Builtin::BI__builtin_operator_delete:
    301     if (!getLangOpts().CPlusPlus) {
    302       Diag(TheCall->getExprLoc(), diag::err_builtin_requires_language)
    303         << (BuiltinID == Builtin::BI__builtin_operator_new
    304                 ? "__builtin_operator_new"
    305                 : "__builtin_operator_delete")
    306         << "C++";
    307       return ExprError();
    308     }
    309     // CodeGen assumes it can find the global new and delete to call,
    310     // so ensure that they are declared.
    311     DeclareGlobalNewDelete();
    312     break;
    313   }
    314 
    315   // Since the target specific builtins for each arch overlap, only check those
    316   // of the arch we are compiling for.
    317   if (BuiltinID >= Builtin::FirstTSBuiltin) {
    318     switch (Context.getTargetInfo().getTriple().getArch()) {
    319       case llvm::Triple::arm:
    320       case llvm::Triple::armeb:
    321       case llvm::Triple::thumb:
    322       case llvm::Triple::thumbeb:
    323         if (CheckARMBuiltinFunctionCall(BuiltinID, TheCall))
    324           return ExprError();
    325         break;
    326       case llvm::Triple::aarch64:
    327       case llvm::Triple::aarch64_be:
    328       case llvm::Triple::arm64:
    329       case llvm::Triple::arm64_be:
    330         if (CheckAArch64BuiltinFunctionCall(BuiltinID, TheCall))
    331           return ExprError();
    332         break;
    333       case llvm::Triple::mips:
    334       case llvm::Triple::mipsel:
    335       case llvm::Triple::mips64:
    336       case llvm::Triple::mips64el:
    337         if (CheckMipsBuiltinFunctionCall(BuiltinID, TheCall))
    338           return ExprError();
    339         break;
    340       case llvm::Triple::x86:
    341       case llvm::Triple::x86_64:
    342         if (CheckX86BuiltinFunctionCall(BuiltinID, TheCall))
    343           return ExprError();
    344         break;
    345       default:
    346         break;
    347     }
    348   }
    349 
    350   return TheCallResult;
    351 }
    352 
    353 // Get the valid immediate range for the specified NEON type code.
    354 static unsigned RFT(unsigned t, bool shift = false, bool ForceQuad = false) {
    355   NeonTypeFlags Type(t);
    356   int IsQuad = ForceQuad ? true : Type.isQuad();
    357   switch (Type.getEltType()) {
    358   case NeonTypeFlags::Int8:
    359   case NeonTypeFlags::Poly8:
    360     return shift ? 7 : (8 << IsQuad) - 1;
    361   case NeonTypeFlags::Int16:
    362   case NeonTypeFlags::Poly16:
    363     return shift ? 15 : (4 << IsQuad) - 1;
    364   case NeonTypeFlags::Int32:
    365     return shift ? 31 : (2 << IsQuad) - 1;
    366   case NeonTypeFlags::Int64:
    367   case NeonTypeFlags::Poly64:
    368     return shift ? 63 : (1 << IsQuad) - 1;
    369   case NeonTypeFlags::Poly128:
    370     return shift ? 127 : (1 << IsQuad) - 1;
    371   case NeonTypeFlags::Float16:
    372     assert(!shift && "cannot shift float types!");
    373     return (4 << IsQuad) - 1;
    374   case NeonTypeFlags::Float32:
    375     assert(!shift && "cannot shift float types!");
    376     return (2 << IsQuad) - 1;
    377   case NeonTypeFlags::Float64:
    378     assert(!shift && "cannot shift float types!");
    379     return (1 << IsQuad) - 1;
    380   }
    381   llvm_unreachable("Invalid NeonTypeFlag!");
    382 }
    383 
    384 /// getNeonEltType - Return the QualType corresponding to the elements of
    385 /// the vector type specified by the NeonTypeFlags.  This is used to check
    386 /// the pointer arguments for Neon load/store intrinsics.
    387 static QualType getNeonEltType(NeonTypeFlags Flags, ASTContext &Context,
    388                                bool IsPolyUnsigned, bool IsInt64Long) {
    389   switch (Flags.getEltType()) {
    390   case NeonTypeFlags::Int8:
    391     return Flags.isUnsigned() ? Context.UnsignedCharTy : Context.SignedCharTy;
    392   case NeonTypeFlags::Int16:
    393     return Flags.isUnsigned() ? Context.UnsignedShortTy : Context.ShortTy;
    394   case NeonTypeFlags::Int32:
    395     return Flags.isUnsigned() ? Context.UnsignedIntTy : Context.IntTy;
    396   case NeonTypeFlags::Int64:
    397     if (IsInt64Long)
    398       return Flags.isUnsigned() ? Context.UnsignedLongTy : Context.LongTy;
    399     else
    400       return Flags.isUnsigned() ? Context.UnsignedLongLongTy
    401                                 : Context.LongLongTy;
    402   case NeonTypeFlags::Poly8:
    403     return IsPolyUnsigned ? Context.UnsignedCharTy : Context.SignedCharTy;
    404   case NeonTypeFlags::Poly16:
    405     return IsPolyUnsigned ? Context.UnsignedShortTy : Context.ShortTy;
    406   case NeonTypeFlags::Poly64:
    407     return Context.UnsignedLongTy;
    408   case NeonTypeFlags::Poly128:
    409     break;
    410   case NeonTypeFlags::Float16:
    411     return Context.HalfTy;
    412   case NeonTypeFlags::Float32:
    413     return Context.FloatTy;
    414   case NeonTypeFlags::Float64:
    415     return Context.DoubleTy;
    416   }
    417   llvm_unreachable("Invalid NeonTypeFlag!");
    418 }
    419 
    420 bool Sema::CheckNeonBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
    421   llvm::APSInt Result;
    422   uint64_t mask = 0;
    423   unsigned TV = 0;
    424   int PtrArgNum = -1;
    425   bool HasConstPtr = false;
    426   switch (BuiltinID) {
    427 #define GET_NEON_OVERLOAD_CHECK
    428 #include "clang/Basic/arm_neon.inc"
    429 #undef GET_NEON_OVERLOAD_CHECK
    430   }
    431 
    432   // For NEON intrinsics which are overloaded on vector element type, validate
    433   // the immediate which specifies which variant to emit.
    434   unsigned ImmArg = TheCall->getNumArgs()-1;
    435   if (mask) {
    436     if (SemaBuiltinConstantArg(TheCall, ImmArg, Result))
    437       return true;
    438 
    439     TV = Result.getLimitedValue(64);
    440     if ((TV > 63) || (mask & (1ULL << TV)) == 0)
    441       return Diag(TheCall->getLocStart(), diag::err_invalid_neon_type_code)
    442         << TheCall->getArg(ImmArg)->getSourceRange();
    443   }
    444 
    445   if (PtrArgNum >= 0) {
    446     // Check that pointer arguments have the specified type.
    447     Expr *Arg = TheCall->getArg(PtrArgNum);
    448     if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(Arg))
    449       Arg = ICE->getSubExpr();
    450     ExprResult RHS = DefaultFunctionArrayLvalueConversion(Arg);
    451     QualType RHSTy = RHS.get()->getType();
    452 
    453     llvm::Triple::ArchType Arch = Context.getTargetInfo().getTriple().getArch();
    454     bool IsPolyUnsigned =
    455         Arch == llvm::Triple::aarch64 || Arch == llvm::Triple::arm64;
    456     bool IsInt64Long =
    457         Context.getTargetInfo().getInt64Type() == TargetInfo::SignedLong;
    458     QualType EltTy =
    459         getNeonEltType(NeonTypeFlags(TV), Context, IsPolyUnsigned, IsInt64Long);
    460     if (HasConstPtr)
    461       EltTy = EltTy.withConst();
    462     QualType LHSTy = Context.getPointerType(EltTy);
    463     AssignConvertType ConvTy;
    464     ConvTy = CheckSingleAssignmentConstraints(LHSTy, RHS);
    465     if (RHS.isInvalid())
    466       return true;
    467     if (DiagnoseAssignmentResult(ConvTy, Arg->getLocStart(), LHSTy, RHSTy,
    468                                  RHS.get(), AA_Assigning))
    469       return true;
    470   }
    471 
    472   // For NEON intrinsics which take an immediate value as part of the
    473   // instruction, range check them here.
    474   unsigned i = 0, l = 0, u = 0;
    475   switch (BuiltinID) {
    476   default:
    477     return false;
    478 #define GET_NEON_IMMEDIATE_CHECK
    479 #include "clang/Basic/arm_neon.inc"
    480 #undef GET_NEON_IMMEDIATE_CHECK
    481   }
    482 
    483   return SemaBuiltinConstantArgRange(TheCall, i, l, u + l);
    484 }
    485 
    486 bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall,
    487                                         unsigned MaxWidth) {
    488   assert((BuiltinID == ARM::BI__builtin_arm_ldrex ||
    489           BuiltinID == ARM::BI__builtin_arm_ldaex ||
    490           BuiltinID == ARM::BI__builtin_arm_strex ||
    491           BuiltinID == ARM::BI__builtin_arm_stlex ||
    492           BuiltinID == AArch64::BI__builtin_arm_ldrex ||
    493           BuiltinID == AArch64::BI__builtin_arm_ldaex ||
    494           BuiltinID == AArch64::BI__builtin_arm_strex ||
    495           BuiltinID == AArch64::BI__builtin_arm_stlex) &&
    496          "unexpected ARM builtin");
    497   bool IsLdrex = BuiltinID == ARM::BI__builtin_arm_ldrex ||
    498                  BuiltinID == ARM::BI__builtin_arm_ldaex ||
    499                  BuiltinID == AArch64::BI__builtin_arm_ldrex ||
    500                  BuiltinID == AArch64::BI__builtin_arm_ldaex;
    501 
    502   DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
    503 
    504   // Ensure that we have the proper number of arguments.
    505   if (checkArgCount(*this, TheCall, IsLdrex ? 1 : 2))
    506     return true;
    507 
    508   // Inspect the pointer argument of the atomic builtin.  This should always be
    509   // a pointer type, whose element is an integral scalar or pointer type.
    510   // Because it is a pointer type, we don't have to worry about any implicit
    511   // casts here.
    512   Expr *PointerArg = TheCall->getArg(IsLdrex ? 0 : 1);
    513   ExprResult PointerArgRes = DefaultFunctionArrayLvalueConversion(PointerArg);
    514   if (PointerArgRes.isInvalid())
    515     return true;
    516   PointerArg = PointerArgRes.get();
    517 
    518   const PointerType *pointerType = PointerArg->getType()->getAs<PointerType>();
    519   if (!pointerType) {
    520     Diag(DRE->getLocStart(), diag::err_atomic_builtin_must_be_pointer)
    521       << PointerArg->getType() << PointerArg->getSourceRange();
    522     return true;
    523   }
    524 
    525   // ldrex takes a "const volatile T*" and strex takes a "volatile T*". Our next
    526   // task is to insert the appropriate casts into the AST. First work out just
    527   // what the appropriate type is.
    528   QualType ValType = pointerType->getPointeeType();
    529   QualType AddrType = ValType.getUnqualifiedType().withVolatile();
    530   if (IsLdrex)
    531     AddrType.addConst();
    532 
    533   // Issue a warning if the cast is dodgy.
    534   CastKind CastNeeded = CK_NoOp;
    535   if (!AddrType.isAtLeastAsQualifiedAs(ValType)) {
    536     CastNeeded = CK_BitCast;
    537     Diag(DRE->getLocStart(), diag::ext_typecheck_convert_discards_qualifiers)
    538       << PointerArg->getType()
    539       << Context.getPointerType(AddrType)
    540       << AA_Passing << PointerArg->getSourceRange();
    541   }
    542 
    543   // Finally, do the cast and replace the argument with the corrected version.
    544   AddrType = Context.getPointerType(AddrType);
    545   PointerArgRes = ImpCastExprToType(PointerArg, AddrType, CastNeeded);
    546   if (PointerArgRes.isInvalid())
    547     return true;
    548   PointerArg = PointerArgRes.get();
    549 
    550   TheCall->setArg(IsLdrex ? 0 : 1, PointerArg);
    551 
    552   // In general, we allow ints, floats and pointers to be loaded and stored.
    553   if (!ValType->isIntegerType() && !ValType->isAnyPointerType() &&
    554       !ValType->isBlockPointerType() && !ValType->isFloatingType()) {
    555     Diag(DRE->getLocStart(), diag::err_atomic_builtin_must_be_pointer_intfltptr)
    556       << PointerArg->getType() << PointerArg->getSourceRange();
    557     return true;
    558   }
    559 
    560   // But ARM doesn't have instructions to deal with 128-bit versions.
    561   if (Context.getTypeSize(ValType) > MaxWidth) {
    562     assert(MaxWidth == 64 && "Diagnostic unexpectedly inaccurate");
    563     Diag(DRE->getLocStart(), diag::err_atomic_exclusive_builtin_pointer_size)
    564       << PointerArg->getType() << PointerArg->getSourceRange();
    565     return true;
    566   }
    567 
    568   switch (ValType.getObjCLifetime()) {
    569   case Qualifiers::OCL_None:
    570   case Qualifiers::OCL_ExplicitNone:
    571     // okay
    572     break;
    573 
    574   case Qualifiers::OCL_Weak:
    575   case Qualifiers::OCL_Strong:
    576   case Qualifiers::OCL_Autoreleasing:
    577     Diag(DRE->getLocStart(), diag::err_arc_atomic_ownership)
    578       << ValType << PointerArg->getSourceRange();
    579     return true;
    580   }
    581 
    582 
    583   if (IsLdrex) {
    584     TheCall->setType(ValType);
    585     return false;
    586   }
    587 
    588   // Initialize the argument to be stored.
    589   ExprResult ValArg = TheCall->getArg(0);
    590   InitializedEntity Entity = InitializedEntity::InitializeParameter(
    591       Context, ValType, /*consume*/ false);
    592   ValArg = PerformCopyInitialization(Entity, SourceLocation(), ValArg);
    593   if (ValArg.isInvalid())
    594     return true;
    595   TheCall->setArg(0, ValArg.get());
    596 
    597   // __builtin_arm_strex always returns an int. It's marked as such in the .def,
    598   // but the custom checker bypasses all default analysis.
    599   TheCall->setType(Context.IntTy);
    600   return false;
    601 }
    602 
    603 bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
    604   llvm::APSInt Result;
    605 
    606   if (BuiltinID == ARM::BI__builtin_arm_ldrex ||
    607       BuiltinID == ARM::BI__builtin_arm_ldaex ||
    608       BuiltinID == ARM::BI__builtin_arm_strex ||
    609       BuiltinID == ARM::BI__builtin_arm_stlex) {
    610     return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 64);
    611   }
    612 
    613   if (CheckNeonBuiltinFunctionCall(BuiltinID, TheCall))
    614     return true;
    615 
    616   // For intrinsics which take an immediate value as part of the instruction,
    617   // range check them here.
    618   unsigned i = 0, l = 0, u = 0;
    619   switch (BuiltinID) {
    620   default: return false;
    621   case ARM::BI__builtin_arm_ssat: i = 1; l = 1; u = 31; break;
    622   case ARM::BI__builtin_arm_usat: i = 1; u = 31; break;
    623   case ARM::BI__builtin_arm_vcvtr_f:
    624   case ARM::BI__builtin_arm_vcvtr_d: i = 1; u = 1; break;
    625   case ARM::BI__builtin_arm_dmb:
    626   case ARM::BI__builtin_arm_dsb:
    627   case ARM::BI__builtin_arm_isb: l = 0; u = 15; break;
    628   }
    629 
    630   // FIXME: VFP Intrinsics should error if VFP not present.
    631   return SemaBuiltinConstantArgRange(TheCall, i, l, u + l);
    632 }
    633 
    634 bool Sema::CheckAArch64BuiltinFunctionCall(unsigned BuiltinID,
    635                                          CallExpr *TheCall) {
    636   llvm::APSInt Result;
    637 
    638   if (BuiltinID == AArch64::BI__builtin_arm_ldrex ||
    639       BuiltinID == AArch64::BI__builtin_arm_ldaex ||
    640       BuiltinID == AArch64::BI__builtin_arm_strex ||
    641       BuiltinID == AArch64::BI__builtin_arm_stlex) {
    642     return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 128);
    643   }
    644 
    645   if (CheckNeonBuiltinFunctionCall(BuiltinID, TheCall))
    646     return true;
    647 
    648   return false;
    649 }
    650 
    651 bool Sema::CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
    652   unsigned i = 0, l = 0, u = 0;
    653   switch (BuiltinID) {
    654   default: return false;
    655   case Mips::BI__builtin_mips_wrdsp: i = 1; l = 0; u = 63; break;
    656   case Mips::BI__builtin_mips_rddsp: i = 0; l = 0; u = 63; break;
    657   case Mips::BI__builtin_mips_append: i = 2; l = 0; u = 31; break;
    658   case Mips::BI__builtin_mips_balign: i = 2; l = 0; u = 3; break;
    659   case Mips::BI__builtin_mips_precr_sra_ph_w: i = 2; l = 0; u = 31; break;
    660   case Mips::BI__builtin_mips_precr_sra_r_ph_w: i = 2; l = 0; u = 31; break;
    661   case Mips::BI__builtin_mips_prepend: i = 2; l = 0; u = 31; break;
    662   }
    663 
    664   return SemaBuiltinConstantArgRange(TheCall, i, l, u);
    665 }
    666 
    667 bool Sema::CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
    668   switch (BuiltinID) {
    669   case X86::BI_mm_prefetch:
    670     // This is declared to take (const char*, int)
    671     return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3);
    672   }
    673   return false;
    674 }
    675 
    676 /// Given a FunctionDecl's FormatAttr, attempts to populate the FomatStringInfo
    677 /// parameter with the FormatAttr's correct format_idx and firstDataArg.
    678 /// Returns true when the format fits the function and the FormatStringInfo has
    679 /// been populated.
    680 bool Sema::getFormatStringInfo(const FormatAttr *Format, bool IsCXXMember,
    681                                FormatStringInfo *FSI) {
    682   FSI->HasVAListArg = Format->getFirstArg() == 0;
    683   FSI->FormatIdx = Format->getFormatIdx() - 1;
    684   FSI->FirstDataArg = FSI->HasVAListArg ? 0 : Format->getFirstArg() - 1;
    685 
    686   // The way the format attribute works in GCC, the implicit this argument
    687   // of member functions is counted. However, it doesn't appear in our own
    688   // lists, so decrement format_idx in that case.
    689   if (IsCXXMember) {
    690     if(FSI->FormatIdx == 0)
    691       return false;
    692     --FSI->FormatIdx;
    693     if (FSI->FirstDataArg != 0)
    694       --FSI->FirstDataArg;
    695   }
    696   return true;
    697 }
    698 
    699 /// Checks if a the given expression evaluates to null.
    700 ///
    701 /// \brief Returns true if the value evaluates to null.
    702 static bool CheckNonNullExpr(Sema &S,
    703                              const Expr *Expr) {
    704   // As a special case, transparent unions initialized with zero are
    705   // considered null for the purposes of the nonnull attribute.
    706   if (const RecordType *UT = Expr->getType()->getAsUnionType()) {
    707     if (UT->getDecl()->hasAttr<TransparentUnionAttr>())
    708       if (const CompoundLiteralExpr *CLE =
    709           dyn_cast<CompoundLiteralExpr>(Expr))
    710         if (const InitListExpr *ILE =
    711             dyn_cast<InitListExpr>(CLE->getInitializer()))
    712           Expr = ILE->getInit(0);
    713   }
    714 
    715   bool Result;
    716   return (!Expr->isValueDependent() &&
    717           Expr->EvaluateAsBooleanCondition(Result, S.Context) &&
    718           !Result);
    719 }
    720 
    721 static void CheckNonNullArgument(Sema &S,
    722                                  const Expr *ArgExpr,
    723                                  SourceLocation CallSiteLoc) {
    724   if (CheckNonNullExpr(S, ArgExpr))
    725     S.Diag(CallSiteLoc, diag::warn_null_arg) << ArgExpr->getSourceRange();
    726 }
    727 
    728 static void CheckNonNullArguments(Sema &S,
    729                                   const NamedDecl *FDecl,
    730                                   const Expr * const *ExprArgs,
    731                                   SourceLocation CallSiteLoc) {
    732   // Check the attributes attached to the method/function itself.
    733   for (const auto *NonNull : FDecl->specific_attrs<NonNullAttr>()) {
    734     for (const auto &Val : NonNull->args())
    735       CheckNonNullArgument(S, ExprArgs[Val], CallSiteLoc);
    736   }
    737 
    738   // Check the attributes on the parameters.
    739   ArrayRef<ParmVarDecl*> parms;
    740   if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(FDecl))
    741     parms = FD->parameters();
    742   else if (const ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(FDecl))
    743     parms = MD->parameters();
    744 
    745   unsigned argIndex = 0;
    746   for (ArrayRef<ParmVarDecl*>::iterator I = parms.begin(), E = parms.end();
    747        I != E; ++I, ++argIndex) {
    748     const ParmVarDecl *PVD = *I;
    749     if (PVD->hasAttr<NonNullAttr>())
    750       CheckNonNullArgument(S, ExprArgs[argIndex], CallSiteLoc);
    751   }
    752 }
    753 
    754 /// Handles the checks for format strings, non-POD arguments to vararg
    755 /// functions, and NULL arguments passed to non-NULL parameters.
    756 void Sema::checkCall(NamedDecl *FDecl, ArrayRef<const Expr *> Args,
    757                      unsigned NumParams, bool IsMemberFunction,
    758                      SourceLocation Loc, SourceRange Range,
    759                      VariadicCallType CallType) {
    760   // FIXME: We should check as much as we can in the template definition.
    761   if (CurContext->isDependentContext())
    762     return;
    763 
    764   // Printf and scanf checking.
    765   llvm::SmallBitVector CheckedVarArgs;
    766   if (FDecl) {
    767     for (const auto *I : FDecl->specific_attrs<FormatAttr>()) {
    768       // Only create vector if there are format attributes.
    769       CheckedVarArgs.resize(Args.size());
    770 
    771       CheckFormatArguments(I, Args, IsMemberFunction, CallType, Loc, Range,
    772                            CheckedVarArgs);
    773     }
    774   }
    775 
    776   // Refuse POD arguments that weren't caught by the format string
    777   // checks above.
    778   if (CallType != VariadicDoesNotApply) {
    779     for (unsigned ArgIdx = NumParams; ArgIdx < Args.size(); ++ArgIdx) {
    780       // Args[ArgIdx] can be null in malformed code.
    781       if (const Expr *Arg = Args[ArgIdx]) {
    782         if (CheckedVarArgs.empty() || !CheckedVarArgs[ArgIdx])
    783           checkVariadicArgument(Arg, CallType);
    784       }
    785     }
    786   }
    787 
    788   if (FDecl) {
    789     CheckNonNullArguments(*this, FDecl, Args.data(), Loc);
    790 
    791     // Type safety checking.
    792     for (const auto *I : FDecl->specific_attrs<ArgumentWithTypeTagAttr>())
    793       CheckArgumentWithTypeTag(I, Args.data());
    794   }
    795 }
    796 
    797 /// CheckConstructorCall - Check a constructor call for correctness and safety
    798 /// properties not enforced by the C type system.
    799 void Sema::CheckConstructorCall(FunctionDecl *FDecl,
    800                                 ArrayRef<const Expr *> Args,
    801                                 const FunctionProtoType *Proto,
    802                                 SourceLocation Loc) {
    803   VariadicCallType CallType =
    804     Proto->isVariadic() ? VariadicConstructor : VariadicDoesNotApply;
    805   checkCall(FDecl, Args, Proto->getNumParams(),
    806             /*IsMemberFunction=*/true, Loc, SourceRange(), CallType);
    807 }
    808 
    809 /// CheckFunctionCall - Check a direct function call for various correctness
    810 /// and safety properties not strictly enforced by the C type system.
    811 bool Sema::CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,
    812                              const FunctionProtoType *Proto) {
    813   bool IsMemberOperatorCall = isa<CXXOperatorCallExpr>(TheCall) &&
    814                               isa<CXXMethodDecl>(FDecl);
    815   bool IsMemberFunction = isa<CXXMemberCallExpr>(TheCall) ||
    816                           IsMemberOperatorCall;
    817   VariadicCallType CallType = getVariadicCallType(FDecl, Proto,
    818                                                   TheCall->getCallee());
    819   unsigned NumParams = Proto ? Proto->getNumParams() : 0;
    820   Expr** Args = TheCall->getArgs();
    821   unsigned NumArgs = TheCall->getNumArgs();
    822   if (IsMemberOperatorCall) {
    823     // If this is a call to a member operator, hide the first argument
    824     // from checkCall.
    825     // FIXME: Our choice of AST representation here is less than ideal.
    826     ++Args;
    827     --NumArgs;
    828   }
    829   checkCall(FDecl, llvm::makeArrayRef<const Expr *>(Args, NumArgs), NumParams,
    830             IsMemberFunction, TheCall->getRParenLoc(),
    831             TheCall->getCallee()->getSourceRange(), CallType);
    832 
    833   IdentifierInfo *FnInfo = FDecl->getIdentifier();
    834   // None of the checks below are needed for functions that don't have
    835   // simple names (e.g., C++ conversion functions).
    836   if (!FnInfo)
    837     return false;
    838 
    839   CheckAbsoluteValueFunction(TheCall, FDecl, FnInfo);
    840 
    841   unsigned CMId = FDecl->getMemoryFunctionKind();
    842   if (CMId == 0)
    843     return false;
    844 
    845   // Handle memory setting and copying functions.
    846   if (CMId == Builtin::BIstrlcpy || CMId == Builtin::BIstrlcat)
    847     CheckStrlcpycatArguments(TheCall, FnInfo);
    848   else if (CMId == Builtin::BIstrncat)
    849     CheckStrncatArguments(TheCall, FnInfo);
    850   else
    851     CheckMemaccessArguments(TheCall, CMId, FnInfo);
    852 
    853   return false;
    854 }
    855 
    856 bool Sema::CheckObjCMethodCall(ObjCMethodDecl *Method, SourceLocation lbrac,
    857                                ArrayRef<const Expr *> Args) {
    858   VariadicCallType CallType =
    859       Method->isVariadic() ? VariadicMethod : VariadicDoesNotApply;
    860 
    861   checkCall(Method, Args, Method->param_size(),
    862             /*IsMemberFunction=*/false,
    863             lbrac, Method->getSourceRange(), CallType);
    864 
    865   return false;
    866 }
    867 
    868 bool Sema::CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
    869                             const FunctionProtoType *Proto) {
    870   const VarDecl *V = dyn_cast<VarDecl>(NDecl);
    871   if (!V)
    872     return false;
    873 
    874   QualType Ty = V->getType();
    875   if (!Ty->isBlockPointerType() && !Ty->isFunctionPointerType())
    876     return false;
    877 
    878   VariadicCallType CallType;
    879   if (!Proto || !Proto->isVariadic()) {
    880     CallType = VariadicDoesNotApply;
    881   } else if (Ty->isBlockPointerType()) {
    882     CallType = VariadicBlock;
    883   } else { // Ty->isFunctionPointerType()
    884     CallType = VariadicFunction;
    885   }
    886   unsigned NumParams = Proto ? Proto->getNumParams() : 0;
    887 
    888   checkCall(NDecl, llvm::makeArrayRef<const Expr *>(TheCall->getArgs(),
    889                                                     TheCall->getNumArgs()),
    890             NumParams, /*IsMemberFunction=*/false, TheCall->getRParenLoc(),
    891             TheCall->getCallee()->getSourceRange(), CallType);
    892 
    893   return false;
    894 }
    895 
    896 /// Checks function calls when a FunctionDecl or a NamedDecl is not available,
    897 /// such as function pointers returned from functions.
    898 bool Sema::CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto) {
    899   VariadicCallType CallType = getVariadicCallType(/*FDecl=*/nullptr, Proto,
    900                                                   TheCall->getCallee());
    901   unsigned NumParams = Proto ? Proto->getNumParams() : 0;
    902 
    903   checkCall(/*FDecl=*/nullptr,
    904             llvm::makeArrayRef<const Expr *>(TheCall->getArgs(),
    905                                              TheCall->getNumArgs()),
    906             NumParams, /*IsMemberFunction=*/false, TheCall->getRParenLoc(),
    907             TheCall->getCallee()->getSourceRange(), CallType);
    908 
    909   return false;
    910 }
    911 
    912 static bool isValidOrderingForOp(int64_t Ordering, AtomicExpr::AtomicOp Op) {
    913   if (Ordering < AtomicExpr::AO_ABI_memory_order_relaxed ||
    914       Ordering > AtomicExpr::AO_ABI_memory_order_seq_cst)
    915     return false;
    916 
    917   switch (Op) {
    918   case AtomicExpr::AO__c11_atomic_init:
    919     llvm_unreachable("There is no ordering argument for an init");
    920 
    921   case AtomicExpr::AO__c11_atomic_load:
    922   case AtomicExpr::AO__atomic_load_n:
    923   case AtomicExpr::AO__atomic_load:
    924     return Ordering != AtomicExpr::AO_ABI_memory_order_release &&
    925            Ordering != AtomicExpr::AO_ABI_memory_order_acq_rel;
    926 
    927   case AtomicExpr::AO__c11_atomic_store:
    928   case AtomicExpr::AO__atomic_store:
    929   case AtomicExpr::AO__atomic_store_n:
    930     return Ordering != AtomicExpr::AO_ABI_memory_order_consume &&
    931            Ordering != AtomicExpr::AO_ABI_memory_order_acquire &&
    932            Ordering != AtomicExpr::AO_ABI_memory_order_acq_rel;
    933 
    934   default:
    935     return true;
    936   }
    937 }
    938 
    939 ExprResult Sema::SemaAtomicOpsOverloaded(ExprResult TheCallResult,
    940                                          AtomicExpr::AtomicOp Op) {
    941   CallExpr *TheCall = cast<CallExpr>(TheCallResult.get());
    942   DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
    943 
    944   // All these operations take one of the following forms:
    945   enum {
    946     // C    __c11_atomic_init(A *, C)
    947     Init,
    948     // C    __c11_atomic_load(A *, int)
    949     Load,
    950     // void __atomic_load(A *, CP, int)
    951     Copy,
    952     // C    __c11_atomic_add(A *, M, int)
    953     Arithmetic,
    954     // C    __atomic_exchange_n(A *, CP, int)
    955     Xchg,
    956     // void __atomic_exchange(A *, C *, CP, int)
    957     GNUXchg,
    958     // bool __c11_atomic_compare_exchange_strong(A *, C *, CP, int, int)
    959     C11CmpXchg,
    960     // bool __atomic_compare_exchange(A *, C *, CP, bool, int, int)
    961     GNUCmpXchg
    962   } Form = Init;
    963   const unsigned NumArgs[] = { 2, 2, 3, 3, 3, 4, 5, 6 };
    964   const unsigned NumVals[] = { 1, 0, 1, 1, 1, 2, 2, 3 };
    965   // where:
    966   //   C is an appropriate type,
    967   //   A is volatile _Atomic(C) for __c11 builtins and is C for GNU builtins,
    968   //   CP is C for __c11 builtins and GNU _n builtins and is C * otherwise,
    969   //   M is C if C is an integer, and ptrdiff_t if C is a pointer, and
    970   //   the int parameters are for orderings.
    971 
    972   assert(AtomicExpr::AO__c11_atomic_init == 0 &&
    973          AtomicExpr::AO__c11_atomic_fetch_xor + 1 == AtomicExpr::AO__atomic_load
    974          && "need to update code for modified C11 atomics");
    975   bool IsC11 = Op >= AtomicExpr::AO__c11_atomic_init &&
    976                Op <= AtomicExpr::AO__c11_atomic_fetch_xor;
    977   bool IsN = Op == AtomicExpr::AO__atomic_load_n ||
    978              Op == AtomicExpr::AO__atomic_store_n ||
    979              Op == AtomicExpr::AO__atomic_exchange_n ||
    980              Op == AtomicExpr::AO__atomic_compare_exchange_n;
    981   bool IsAddSub = false;
    982 
    983   switch (Op) {
    984   case AtomicExpr::AO__c11_atomic_init:
    985     Form = Init;
    986     break;
    987 
    988   case AtomicExpr::AO__c11_atomic_load:
    989   case AtomicExpr::AO__atomic_load_n:
    990     Form = Load;
    991     break;
    992 
    993   case AtomicExpr::AO__c11_atomic_store:
    994   case AtomicExpr::AO__atomic_load:
    995   case AtomicExpr::AO__atomic_store:
    996   case AtomicExpr::AO__atomic_store_n:
    997     Form = Copy;
    998     break;
    999 
   1000   case AtomicExpr::AO__c11_atomic_fetch_add:
   1001   case AtomicExpr::AO__c11_atomic_fetch_sub:
   1002   case AtomicExpr::AO__atomic_fetch_add:
   1003   case AtomicExpr::AO__atomic_fetch_sub:
   1004   case AtomicExpr::AO__atomic_add_fetch:
   1005   case AtomicExpr::AO__atomic_sub_fetch:
   1006     IsAddSub = true;
   1007     // Fall through.
   1008   case AtomicExpr::AO__c11_atomic_fetch_and:
   1009   case AtomicExpr::AO__c11_atomic_fetch_or:
   1010   case AtomicExpr::AO__c11_atomic_fetch_xor:
   1011   case AtomicExpr::AO__atomic_fetch_and:
   1012   case AtomicExpr::AO__atomic_fetch_or:
   1013   case AtomicExpr::AO__atomic_fetch_xor:
   1014   case AtomicExpr::AO__atomic_fetch_nand:
   1015   case AtomicExpr::AO__atomic_and_fetch:
   1016   case AtomicExpr::AO__atomic_or_fetch:
   1017   case AtomicExpr::AO__atomic_xor_fetch:
   1018   case AtomicExpr::AO__atomic_nand_fetch:
   1019     Form = Arithmetic;
   1020     break;
   1021 
   1022   case AtomicExpr::AO__c11_atomic_exchange:
   1023   case AtomicExpr::AO__atomic_exchange_n:
   1024     Form = Xchg;
   1025     break;
   1026 
   1027   case AtomicExpr::AO__atomic_exchange:
   1028     Form = GNUXchg;
   1029     break;
   1030 
   1031   case AtomicExpr::AO__c11_atomic_compare_exchange_strong:
   1032   case AtomicExpr::AO__c11_atomic_compare_exchange_weak:
   1033     Form = C11CmpXchg;
   1034     break;
   1035 
   1036   case AtomicExpr::AO__atomic_compare_exchange:
   1037   case AtomicExpr::AO__atomic_compare_exchange_n:
   1038     Form = GNUCmpXchg;
   1039     break;
   1040   }
   1041 
   1042   // Check we have the right number of arguments.
   1043   if (TheCall->getNumArgs() < NumArgs[Form]) {
   1044     Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args)
   1045       << 0 << NumArgs[Form] << TheCall->getNumArgs()
   1046       << TheCall->getCallee()->getSourceRange();
   1047     return ExprError();
   1048   } else if (TheCall->getNumArgs() > NumArgs[Form]) {
   1049     Diag(TheCall->getArg(NumArgs[Form])->getLocStart(),
   1050          diag::err_typecheck_call_too_many_args)
   1051       << 0 << NumArgs[Form] << TheCall->getNumArgs()
   1052       << TheCall->getCallee()->getSourceRange();
   1053     return ExprError();
   1054   }
   1055 
   1056   // Inspect the first argument of the atomic operation.
   1057   Expr *Ptr = TheCall->getArg(0);
   1058   Ptr = DefaultFunctionArrayLvalueConversion(Ptr).get();
   1059   const PointerType *pointerType = Ptr->getType()->getAs<PointerType>();
   1060   if (!pointerType) {
   1061     Diag(DRE->getLocStart(), diag::err_atomic_builtin_must_be_pointer)
   1062       << Ptr->getType() << Ptr->getSourceRange();
   1063     return ExprError();
   1064   }
   1065 
   1066   // For a __c11 builtin, this should be a pointer to an _Atomic type.
   1067   QualType AtomTy = pointerType->getPointeeType(); // 'A'
   1068   QualType ValType = AtomTy; // 'C'
   1069   if (IsC11) {
   1070     if (!AtomTy->isAtomicType()) {
   1071       Diag(DRE->getLocStart(), diag::err_atomic_op_needs_atomic)
   1072         << Ptr->getType() << Ptr->getSourceRange();
   1073       return ExprError();
   1074     }
   1075     if (AtomTy.isConstQualified()) {
   1076       Diag(DRE->getLocStart(), diag::err_atomic_op_needs_non_const_atomic)
   1077         << Ptr->getType() << Ptr->getSourceRange();
   1078       return ExprError();
   1079     }
   1080     ValType = AtomTy->getAs<AtomicType>()->getValueType();
   1081   }
   1082 
   1083   // For an arithmetic operation, the implied arithmetic must be well-formed.
   1084   if (Form == Arithmetic) {
   1085     // gcc does not enforce these rules for GNU atomics, but we do so for sanity.
   1086     if (IsAddSub && !ValType->isIntegerType() && !ValType->isPointerType()) {
   1087       Diag(DRE->getLocStart(), diag::err_atomic_op_needs_atomic_int_or_ptr)
   1088         << IsC11 << Ptr->getType() << Ptr->getSourceRange();
   1089       return ExprError();
   1090     }
   1091     if (!IsAddSub && !ValType->isIntegerType()) {
   1092       Diag(DRE->getLocStart(), diag::err_atomic_op_bitwise_needs_atomic_int)
   1093         << IsC11 << Ptr->getType() << Ptr->getSourceRange();
   1094       return ExprError();
   1095     }
   1096   } else if (IsN && !ValType->isIntegerType() && !ValType->isPointerType()) {
   1097     // For __atomic_*_n operations, the value type must be a scalar integral or
   1098     // pointer type which is 1, 2, 4, 8 or 16 bytes in length.
   1099     Diag(DRE->getLocStart(), diag::err_atomic_op_needs_atomic_int_or_ptr)
   1100       << IsC11 << Ptr->getType() << Ptr->getSourceRange();
   1101     return ExprError();
   1102   }
   1103 
   1104   if (!IsC11 && !AtomTy.isTriviallyCopyableType(Context) &&
   1105       !AtomTy->isScalarType()) {
   1106     // For GNU atomics, require a trivially-copyable type. This is not part of
   1107     // the GNU atomics specification, but we enforce it for sanity.
   1108     Diag(DRE->getLocStart(), diag::err_atomic_op_needs_trivial_copy)
   1109       << Ptr->getType() << Ptr->getSourceRange();
   1110     return ExprError();
   1111   }
   1112 
   1113   // FIXME: For any builtin other than a load, the ValType must not be
   1114   // const-qualified.
   1115 
   1116   switch (ValType.getObjCLifetime()) {
   1117   case Qualifiers::OCL_None:
   1118   case Qualifiers::OCL_ExplicitNone:
   1119     // okay
   1120     break;
   1121 
   1122   case Qualifiers::OCL_Weak:
   1123   case Qualifiers::OCL_Strong:
   1124   case Qualifiers::OCL_Autoreleasing:
   1125     // FIXME: Can this happen? By this point, ValType should be known
   1126     // to be trivially copyable.
   1127     Diag(DRE->getLocStart(), diag::err_arc_atomic_ownership)
   1128       << ValType << Ptr->getSourceRange();
   1129     return ExprError();
   1130   }
   1131 
   1132   QualType ResultType = ValType;
   1133   if (Form == Copy || Form == GNUXchg || Form == Init)
   1134     ResultType = Context.VoidTy;
   1135   else if (Form == C11CmpXchg || Form == GNUCmpXchg)
   1136     ResultType = Context.BoolTy;
   1137 
   1138   // The type of a parameter passed 'by value'. In the GNU atomics, such
   1139   // arguments are actually passed as pointers.
   1140   QualType ByValType = ValType; // 'CP'
   1141   if (!IsC11 && !IsN)
   1142     ByValType = Ptr->getType();
   1143 
   1144   // The first argument --- the pointer --- has a fixed type; we
   1145   // deduce the types of the rest of the arguments accordingly.  Walk
   1146   // the remaining arguments, converting them to the deduced value type.
   1147   for (unsigned i = 1; i != NumArgs[Form]; ++i) {
   1148     QualType Ty;
   1149     if (i < NumVals[Form] + 1) {
   1150       switch (i) {
   1151       case 1:
   1152         // The second argument is the non-atomic operand. For arithmetic, this
   1153         // is always passed by value, and for a compare_exchange it is always
   1154         // passed by address. For the rest, GNU uses by-address and C11 uses
   1155         // by-value.
   1156         assert(Form != Load);
   1157         if (Form == Init || (Form == Arithmetic && ValType->isIntegerType()))
   1158           Ty = ValType;
   1159         else if (Form == Copy || Form == Xchg)
   1160           Ty = ByValType;
   1161         else if (Form == Arithmetic)
   1162           Ty = Context.getPointerDiffType();
   1163         else
   1164           Ty = Context.getPointerType(ValType.getUnqualifiedType());
   1165         break;
   1166       case 2:
   1167         // The third argument to compare_exchange / GNU exchange is a
   1168         // (pointer to a) desired value.
   1169         Ty = ByValType;
   1170         break;
   1171       case 3:
   1172         // The fourth argument to GNU compare_exchange is a 'weak' flag.
   1173         Ty = Context.BoolTy;
   1174         break;
   1175       }
   1176     } else {
   1177       // The order(s) are always converted to int.
   1178       Ty = Context.IntTy;
   1179     }
   1180 
   1181     InitializedEntity Entity =
   1182         InitializedEntity::InitializeParameter(Context, Ty, false);
   1183     ExprResult Arg = TheCall->getArg(i);
   1184     Arg = PerformCopyInitialization(Entity, SourceLocation(), Arg);
   1185     if (Arg.isInvalid())
   1186       return true;
   1187     TheCall->setArg(i, Arg.get());
   1188   }
   1189 
   1190   // Permute the arguments into a 'consistent' order.
   1191   SmallVector<Expr*, 5> SubExprs;
   1192   SubExprs.push_back(Ptr);
   1193   switch (Form) {
   1194   case Init:
   1195     // Note, AtomicExpr::getVal1() has a special case for this atomic.
   1196     SubExprs.push_back(TheCall->getArg(1)); // Val1
   1197     break;
   1198   case Load:
   1199     SubExprs.push_back(TheCall->getArg(1)); // Order
   1200     break;
   1201   case Copy:
   1202   case Arithmetic:
   1203   case Xchg:
   1204     SubExprs.push_back(TheCall->getArg(2)); // Order
   1205     SubExprs.push_back(TheCall->getArg(1)); // Val1
   1206     break;
   1207   case GNUXchg:
   1208     // Note, AtomicExpr::getVal2() has a special case for this atomic.
   1209     SubExprs.push_back(TheCall->getArg(3)); // Order
   1210     SubExprs.push_back(TheCall->getArg(1)); // Val1
   1211     SubExprs.push_back(TheCall->getArg(2)); // Val2
   1212     break;
   1213   case C11CmpXchg:
   1214     SubExprs.push_back(TheCall->getArg(3)); // Order
   1215     SubExprs.push_back(TheCall->getArg(1)); // Val1
   1216     SubExprs.push_back(TheCall->getArg(4)); // OrderFail
   1217     SubExprs.push_back(TheCall->getArg(2)); // Val2
   1218     break;
   1219   case GNUCmpXchg:
   1220     SubExprs.push_back(TheCall->getArg(4)); // Order
   1221     SubExprs.push_back(TheCall->getArg(1)); // Val1
   1222     SubExprs.push_back(TheCall->getArg(5)); // OrderFail
   1223     SubExprs.push_back(TheCall->getArg(2)); // Val2
   1224     SubExprs.push_back(TheCall->getArg(3)); // Weak
   1225     break;
   1226   }
   1227 
   1228   if (SubExprs.size() >= 2 && Form != Init) {
   1229     llvm::APSInt Result(32);
   1230     if (SubExprs[1]->isIntegerConstantExpr(Result, Context) &&
   1231         !isValidOrderingForOp(Result.getSExtValue(), Op))
   1232       Diag(SubExprs[1]->getLocStart(),
   1233            diag::warn_atomic_op_has_invalid_memory_order)
   1234           << SubExprs[1]->getSourceRange();
   1235   }
   1236 
   1237   AtomicExpr *AE = new (Context) AtomicExpr(TheCall->getCallee()->getLocStart(),
   1238                                             SubExprs, ResultType, Op,
   1239                                             TheCall->getRParenLoc());
   1240 
   1241   if ((Op == AtomicExpr::AO__c11_atomic_load ||
   1242        (Op == AtomicExpr::AO__c11_atomic_store)) &&
   1243       Context.AtomicUsesUnsupportedLibcall(AE))
   1244     Diag(AE->getLocStart(), diag::err_atomic_load_store_uses_lib) <<
   1245     ((Op == AtomicExpr::AO__c11_atomic_load) ? 0 : 1);
   1246 
   1247   return AE;
   1248 }
   1249 
   1250 
   1251 /// checkBuiltinArgument - Given a call to a builtin function, perform
   1252 /// normal type-checking on the given argument, updating the call in
   1253 /// place.  This is useful when a builtin function requires custom
   1254 /// type-checking for some of its arguments but not necessarily all of
   1255 /// them.
   1256 ///
   1257 /// Returns true on error.
   1258 static bool checkBuiltinArgument(Sema &S, CallExpr *E, unsigned ArgIndex) {
   1259   FunctionDecl *Fn = E->getDirectCallee();
   1260   assert(Fn && "builtin call without direct callee!");
   1261 
   1262   ParmVarDecl *Param = Fn->getParamDecl(ArgIndex);
   1263   InitializedEntity Entity =
   1264     InitializedEntity::InitializeParameter(S.Context, Param);
   1265 
   1266   ExprResult Arg = E->getArg(0);
   1267   Arg = S.PerformCopyInitialization(Entity, SourceLocation(), Arg);
   1268   if (Arg.isInvalid())
   1269     return true;
   1270 
   1271   E->setArg(ArgIndex, Arg.get());
   1272   return false;
   1273 }
   1274 
   1275 /// SemaBuiltinAtomicOverloaded - We have a call to a function like
   1276 /// __sync_fetch_and_add, which is an overloaded function based on the pointer
   1277 /// type of its first argument.  The main ActOnCallExpr routines have already
   1278 /// promoted the types of arguments because all of these calls are prototyped as
   1279 /// void(...).
   1280 ///
   1281 /// This function goes through and does final semantic checking for these
   1282 /// builtins,
   1283 ExprResult
   1284 Sema::SemaBuiltinAtomicOverloaded(ExprResult TheCallResult) {
   1285   CallExpr *TheCall = (CallExpr *)TheCallResult.get();
   1286   DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
   1287   FunctionDecl *FDecl = cast<FunctionDecl>(DRE->getDecl());
   1288 
   1289   // Ensure that we have at least one argument to do type inference from.
   1290   if (TheCall->getNumArgs() < 1) {
   1291     Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args_at_least)
   1292       << 0 << 1 << TheCall->getNumArgs()
   1293       << TheCall->getCallee()->getSourceRange();
   1294     return ExprError();
   1295   }
   1296 
   1297   // Inspect the first argument of the atomic builtin.  This should always be
   1298   // a pointer type, whose element is an integral scalar or pointer type.
   1299   // Because it is a pointer type, we don't have to worry about any implicit
   1300   // casts here.
   1301   // FIXME: We don't allow floating point scalars as input.
   1302   Expr *FirstArg = TheCall->getArg(0);
   1303   ExprResult FirstArgResult = DefaultFunctionArrayLvalueConversion(FirstArg);
   1304   if (FirstArgResult.isInvalid())
   1305     return ExprError();
   1306   FirstArg = FirstArgResult.get();
   1307   TheCall->setArg(0, FirstArg);
   1308 
   1309   const PointerType *pointerType = FirstArg->getType()->getAs<PointerType>();
   1310   if (!pointerType) {
   1311     Diag(DRE->getLocStart(), diag::err_atomic_builtin_must_be_pointer)
   1312       << FirstArg->getType() << FirstArg->getSourceRange();
   1313     return ExprError();
   1314   }
   1315 
   1316   QualType ValType = pointerType->getPointeeType();
   1317   if (!ValType->isIntegerType() && !ValType->isAnyPointerType() &&
   1318       !ValType->isBlockPointerType()) {
   1319     Diag(DRE->getLocStart(), diag::err_atomic_builtin_must_be_pointer_intptr)
   1320       << FirstArg->getType() << FirstArg->getSourceRange();
   1321     return ExprError();
   1322   }
   1323 
   1324   switch (ValType.getObjCLifetime()) {
   1325   case Qualifiers::OCL_None:
   1326   case Qualifiers::OCL_ExplicitNone:
   1327     // okay
   1328     break;
   1329 
   1330   case Qualifiers::OCL_Weak:
   1331   case Qualifiers::OCL_Strong:
   1332   case Qualifiers::OCL_Autoreleasing:
   1333     Diag(DRE->getLocStart(), diag::err_arc_atomic_ownership)
   1334       << ValType << FirstArg->getSourceRange();
   1335     return ExprError();
   1336   }
   1337 
   1338   // Strip any qualifiers off ValType.
   1339   ValType = ValType.getUnqualifiedType();
   1340 
   1341   // The majority of builtins return a value, but a few have special return
   1342   // types, so allow them to override appropriately below.
   1343   QualType ResultType = ValType;
   1344 
   1345   // We need to figure out which concrete builtin this maps onto.  For example,
   1346   // __sync_fetch_and_add with a 2 byte object turns into
   1347   // __sync_fetch_and_add_2.
   1348 #define BUILTIN_ROW(x) \
   1349   { Builtin::BI##x##_1, Builtin::BI##x##_2, Builtin::BI##x##_4, \
   1350     Builtin::BI##x##_8, Builtin::BI##x##_16 }
   1351 
   1352   static const unsigned BuiltinIndices[][5] = {
   1353     BUILTIN_ROW(__sync_fetch_and_add),
   1354     BUILTIN_ROW(__sync_fetch_and_sub),
   1355     BUILTIN_ROW(__sync_fetch_and_or),
   1356     BUILTIN_ROW(__sync_fetch_and_and),
   1357     BUILTIN_ROW(__sync_fetch_and_xor),
   1358 
   1359     BUILTIN_ROW(__sync_add_and_fetch),
   1360     BUILTIN_ROW(__sync_sub_and_fetch),
   1361     BUILTIN_ROW(__sync_and_and_fetch),
   1362     BUILTIN_ROW(__sync_or_and_fetch),
   1363     BUILTIN_ROW(__sync_xor_and_fetch),
   1364 
   1365     BUILTIN_ROW(__sync_val_compare_and_swap),
   1366     BUILTIN_ROW(__sync_bool_compare_and_swap),
   1367     BUILTIN_ROW(__sync_lock_test_and_set),
   1368     BUILTIN_ROW(__sync_lock_release),
   1369     BUILTIN_ROW(__sync_swap)
   1370   };
   1371 #undef BUILTIN_ROW
   1372 
   1373   // Determine the index of the size.
   1374   unsigned SizeIndex;
   1375   switch (Context.getTypeSizeInChars(ValType).getQuantity()) {
   1376   case 1: SizeIndex = 0; break;
   1377   case 2: SizeIndex = 1; break;
   1378   case 4: SizeIndex = 2; break;
   1379   case 8: SizeIndex = 3; break;
   1380   case 16: SizeIndex = 4; break;
   1381   default:
   1382     Diag(DRE->getLocStart(), diag::err_atomic_builtin_pointer_size)
   1383       << FirstArg->getType() << FirstArg->getSourceRange();
   1384     return ExprError();
   1385   }
   1386 
   1387   // Each of these builtins has one pointer argument, followed by some number of
   1388   // values (0, 1 or 2) followed by a potentially empty varags list of stuff
   1389   // that we ignore.  Find out which row of BuiltinIndices to read from as well
   1390   // as the number of fixed args.
   1391   unsigned BuiltinID = FDecl->getBuiltinID();
   1392   unsigned BuiltinIndex, NumFixed = 1;
   1393   switch (BuiltinID) {
   1394   default: llvm_unreachable("Unknown overloaded atomic builtin!");
   1395   case Builtin::BI__sync_fetch_and_add:
   1396   case Builtin::BI__sync_fetch_and_add_1:
   1397   case Builtin::BI__sync_fetch_and_add_2:
   1398   case Builtin::BI__sync_fetch_and_add_4:
   1399   case Builtin::BI__sync_fetch_and_add_8:
   1400   case Builtin::BI__sync_fetch_and_add_16:
   1401     BuiltinIndex = 0;
   1402     break;
   1403 
   1404   case Builtin::BI__sync_fetch_and_sub:
   1405   case Builtin::BI__sync_fetch_and_sub_1:
   1406   case Builtin::BI__sync_fetch_and_sub_2:
   1407   case Builtin::BI__sync_fetch_and_sub_4:
   1408   case Builtin::BI__sync_fetch_and_sub_8:
   1409   case Builtin::BI__sync_fetch_and_sub_16:
   1410     BuiltinIndex = 1;
   1411     break;
   1412 
   1413   case Builtin::BI__sync_fetch_and_or:
   1414   case Builtin::BI__sync_fetch_and_or_1:
   1415   case Builtin::BI__sync_fetch_and_or_2:
   1416   case Builtin::BI__sync_fetch_and_or_4:
   1417   case Builtin::BI__sync_fetch_and_or_8:
   1418   case Builtin::BI__sync_fetch_and_or_16:
   1419     BuiltinIndex = 2;
   1420     break;
   1421 
   1422   case Builtin::BI__sync_fetch_and_and:
   1423   case Builtin::BI__sync_fetch_and_and_1:
   1424   case Builtin::BI__sync_fetch_and_and_2:
   1425   case Builtin::BI__sync_fetch_and_and_4:
   1426   case Builtin::BI__sync_fetch_and_and_8:
   1427   case Builtin::BI__sync_fetch_and_and_16:
   1428     BuiltinIndex = 3;
   1429     break;
   1430 
   1431   case Builtin::BI__sync_fetch_and_xor:
   1432   case Builtin::BI__sync_fetch_and_xor_1:
   1433   case Builtin::BI__sync_fetch_and_xor_2:
   1434   case Builtin::BI__sync_fetch_and_xor_4:
   1435   case Builtin::BI__sync_fetch_and_xor_8:
   1436   case Builtin::BI__sync_fetch_and_xor_16:
   1437     BuiltinIndex = 4;
   1438     break;
   1439 
   1440   case Builtin::BI__sync_add_and_fetch:
   1441   case Builtin::BI__sync_add_and_fetch_1:
   1442   case Builtin::BI__sync_add_and_fetch_2:
   1443   case Builtin::BI__sync_add_and_fetch_4:
   1444   case Builtin::BI__sync_add_and_fetch_8:
   1445   case Builtin::BI__sync_add_and_fetch_16:
   1446     BuiltinIndex = 5;
   1447     break;
   1448 
   1449   case Builtin::BI__sync_sub_and_fetch:
   1450   case Builtin::BI__sync_sub_and_fetch_1:
   1451   case Builtin::BI__sync_sub_and_fetch_2:
   1452   case Builtin::BI__sync_sub_and_fetch_4:
   1453   case Builtin::BI__sync_sub_and_fetch_8:
   1454   case Builtin::BI__sync_sub_and_fetch_16:
   1455     BuiltinIndex = 6;
   1456     break;
   1457 
   1458   case Builtin::BI__sync_and_and_fetch:
   1459   case Builtin::BI__sync_and_and_fetch_1:
   1460   case Builtin::BI__sync_and_and_fetch_2:
   1461   case Builtin::BI__sync_and_and_fetch_4:
   1462   case Builtin::BI__sync_and_and_fetch_8:
   1463   case Builtin::BI__sync_and_and_fetch_16:
   1464     BuiltinIndex = 7;
   1465     break;
   1466 
   1467   case Builtin::BI__sync_or_and_fetch:
   1468   case Builtin::BI__sync_or_and_fetch_1:
   1469   case Builtin::BI__sync_or_and_fetch_2:
   1470   case Builtin::BI__sync_or_and_fetch_4:
   1471   case Builtin::BI__sync_or_and_fetch_8:
   1472   case Builtin::BI__sync_or_and_fetch_16:
   1473     BuiltinIndex = 8;
   1474     break;
   1475 
   1476   case Builtin::BI__sync_xor_and_fetch:
   1477   case Builtin::BI__sync_xor_and_fetch_1:
   1478   case Builtin::BI__sync_xor_and_fetch_2:
   1479   case Builtin::BI__sync_xor_and_fetch_4:
   1480   case Builtin::BI__sync_xor_and_fetch_8:
   1481   case Builtin::BI__sync_xor_and_fetch_16:
   1482     BuiltinIndex = 9;
   1483     break;
   1484 
   1485   case Builtin::BI__sync_val_compare_and_swap:
   1486   case Builtin::BI__sync_val_compare_and_swap_1:
   1487   case Builtin::BI__sync_val_compare_and_swap_2:
   1488   case Builtin::BI__sync_val_compare_and_swap_4:
   1489   case Builtin::BI__sync_val_compare_and_swap_8:
   1490   case Builtin::BI__sync_val_compare_and_swap_16:
   1491     BuiltinIndex = 10;
   1492     NumFixed = 2;
   1493     break;
   1494 
   1495   case Builtin::BI__sync_bool_compare_and_swap:
   1496   case Builtin::BI__sync_bool_compare_and_swap_1:
   1497   case Builtin::BI__sync_bool_compare_and_swap_2:
   1498   case Builtin::BI__sync_bool_compare_and_swap_4:
   1499   case Builtin::BI__sync_bool_compare_and_swap_8:
   1500   case Builtin::BI__sync_bool_compare_and_swap_16:
   1501     BuiltinIndex = 11;
   1502     NumFixed = 2;
   1503     ResultType = Context.BoolTy;
   1504     break;
   1505 
   1506   case Builtin::BI__sync_lock_test_and_set:
   1507   case Builtin::BI__sync_lock_test_and_set_1:
   1508   case Builtin::BI__sync_lock_test_and_set_2:
   1509   case Builtin::BI__sync_lock_test_and_set_4:
   1510   case Builtin::BI__sync_lock_test_and_set_8:
   1511   case Builtin::BI__sync_lock_test_and_set_16:
   1512     BuiltinIndex = 12;
   1513     break;
   1514 
   1515   case Builtin::BI__sync_lock_release:
   1516   case Builtin::BI__sync_lock_release_1:
   1517   case Builtin::BI__sync_lock_release_2:
   1518   case Builtin::BI__sync_lock_release_4:
   1519   case Builtin::BI__sync_lock_release_8:
   1520   case Builtin::BI__sync_lock_release_16:
   1521     BuiltinIndex = 13;
   1522     NumFixed = 0;
   1523     ResultType = Context.VoidTy;
   1524     break;
   1525 
   1526   case Builtin::BI__sync_swap:
   1527   case Builtin::BI__sync_swap_1:
   1528   case Builtin::BI__sync_swap_2:
   1529   case Builtin::BI__sync_swap_4:
   1530   case Builtin::BI__sync_swap_8:
   1531   case Builtin::BI__sync_swap_16:
   1532     BuiltinIndex = 14;
   1533     break;
   1534   }
   1535 
   1536   // Now that we know how many fixed arguments we expect, first check that we
   1537   // have at least that many.
   1538   if (TheCall->getNumArgs() < 1+NumFixed) {
   1539     Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args_at_least)
   1540       << 0 << 1+NumFixed << TheCall->getNumArgs()
   1541       << TheCall->getCallee()->getSourceRange();
   1542     return ExprError();
   1543   }
   1544 
   1545   // Get the decl for the concrete builtin from this, we can tell what the
   1546   // concrete integer type we should convert to is.
   1547   unsigned NewBuiltinID = BuiltinIndices[BuiltinIndex][SizeIndex];
   1548   const char *NewBuiltinName = Context.BuiltinInfo.GetName(NewBuiltinID);
   1549   FunctionDecl *NewBuiltinDecl;
   1550   if (NewBuiltinID == BuiltinID)
   1551     NewBuiltinDecl = FDecl;
   1552   else {
   1553     // Perform builtin lookup to avoid redeclaring it.
   1554     DeclarationName DN(&Context.Idents.get(NewBuiltinName));
   1555     LookupResult Res(*this, DN, DRE->getLocStart(), LookupOrdinaryName);
   1556     LookupName(Res, TUScope, /*AllowBuiltinCreation=*/true);
   1557     assert(Res.getFoundDecl());
   1558     NewBuiltinDecl = dyn_cast<FunctionDecl>(Res.getFoundDecl());
   1559     if (!NewBuiltinDecl)
   1560       return ExprError();
   1561   }
   1562 
   1563   // The first argument --- the pointer --- has a fixed type; we
   1564   // deduce the types of the rest of the arguments accordingly.  Walk
   1565   // the remaining arguments, converting them to the deduced value type.
   1566   for (unsigned i = 0; i != NumFixed; ++i) {
   1567     ExprResult Arg = TheCall->getArg(i+1);
   1568 
   1569     // GCC does an implicit conversion to the pointer or integer ValType.  This
   1570     // can fail in some cases (1i -> int**), check for this error case now.
   1571     // Initialize the argument.
   1572     InitializedEntity Entity = InitializedEntity::InitializeParameter(Context,
   1573                                                    ValType, /*consume*/ false);
   1574     Arg = PerformCopyInitialization(Entity, SourceLocation(), Arg);
   1575     if (Arg.isInvalid())
   1576       return ExprError();
   1577 
   1578     // Okay, we have something that *can* be converted to the right type.  Check
   1579     // to see if there is a potentially weird extension going on here.  This can
   1580     // happen when you do an atomic operation on something like an char* and
   1581     // pass in 42.  The 42 gets converted to char.  This is even more strange
   1582     // for things like 45.123 -> char, etc.
   1583     // FIXME: Do this check.
   1584     TheCall->setArg(i+1, Arg.get());
   1585   }
   1586 
   1587   ASTContext& Context = this->getASTContext();
   1588 
   1589   // Create a new DeclRefExpr to refer to the new decl.
   1590   DeclRefExpr* NewDRE = DeclRefExpr::Create(
   1591       Context,
   1592       DRE->getQualifierLoc(),
   1593       SourceLocation(),
   1594       NewBuiltinDecl,
   1595       /*enclosing*/ false,
   1596       DRE->getLocation(),
   1597       Context.BuiltinFnTy,
   1598       DRE->getValueKind());
   1599 
   1600   // Set the callee in the CallExpr.
   1601   // FIXME: This loses syntactic information.
   1602   QualType CalleePtrTy = Context.getPointerType(NewBuiltinDecl->getType());
   1603   ExprResult PromotedCall = ImpCastExprToType(NewDRE, CalleePtrTy,
   1604                                               CK_BuiltinFnToFnPtr);
   1605   TheCall->setCallee(PromotedCall.get());
   1606 
   1607   // Change the result type of the call to match the original value type. This
   1608   // is arbitrary, but the codegen for these builtins ins design to handle it
   1609   // gracefully.
   1610   TheCall->setType(ResultType);
   1611 
   1612   return TheCallResult;
   1613 }
   1614 
   1615 /// CheckObjCString - Checks that the argument to the builtin
   1616 /// CFString constructor is correct
   1617 /// Note: It might also make sense to do the UTF-16 conversion here (would
   1618 /// simplify the backend).
   1619 bool Sema::CheckObjCString(Expr *Arg) {
   1620   Arg = Arg->IgnoreParenCasts();
   1621   StringLiteral *Literal = dyn_cast<StringLiteral>(Arg);
   1622 
   1623   if (!Literal || !Literal->isAscii()) {
   1624     Diag(Arg->getLocStart(), diag::err_cfstring_literal_not_string_constant)
   1625       << Arg->getSourceRange();
   1626     return true;
   1627   }
   1628 
   1629   if (Literal->containsNonAsciiOrNull()) {
   1630     StringRef String = Literal->getString();
   1631     unsigned NumBytes = String.size();
   1632     SmallVector<UTF16, 128> ToBuf(NumBytes);
   1633     const UTF8 *FromPtr = (const UTF8 *)String.data();
   1634     UTF16 *ToPtr = &ToBuf[0];
   1635 
   1636     ConversionResult Result = ConvertUTF8toUTF16(&FromPtr, FromPtr + NumBytes,
   1637                                                  &ToPtr, ToPtr + NumBytes,
   1638                                                  strictConversion);
   1639     // Check for conversion failure.
   1640     if (Result != conversionOK)
   1641       Diag(Arg->getLocStart(),
   1642            diag::warn_cfstring_truncated) << Arg->getSourceRange();
   1643   }
   1644   return false;
   1645 }
   1646 
   1647 /// SemaBuiltinVAStart - Check the arguments to __builtin_va_start for validity.
   1648 /// Emit an error and return true on failure, return false on success.
   1649 bool Sema::SemaBuiltinVAStart(CallExpr *TheCall) {
   1650   Expr *Fn = TheCall->getCallee();
   1651   if (TheCall->getNumArgs() > 2) {
   1652     Diag(TheCall->getArg(2)->getLocStart(),
   1653          diag::err_typecheck_call_too_many_args)
   1654       << 0 /*function call*/ << 2 << TheCall->getNumArgs()
   1655       << Fn->getSourceRange()
   1656       << SourceRange(TheCall->getArg(2)->getLocStart(),
   1657                      (*(TheCall->arg_end()-1))->getLocEnd());
   1658     return true;
   1659   }
   1660 
   1661   if (TheCall->getNumArgs() < 2) {
   1662     return Diag(TheCall->getLocEnd(),
   1663       diag::err_typecheck_call_too_few_args_at_least)
   1664       << 0 /*function call*/ << 2 << TheCall->getNumArgs();
   1665   }
   1666 
   1667   // Type-check the first argument normally.
   1668   if (checkBuiltinArgument(*this, TheCall, 0))
   1669     return true;
   1670 
   1671   // Determine whether the current function is variadic or not.
   1672   BlockScopeInfo *CurBlock = getCurBlock();
   1673   bool isVariadic;
   1674   if (CurBlock)
   1675     isVariadic = CurBlock->TheDecl->isVariadic();
   1676   else if (FunctionDecl *FD = getCurFunctionDecl())
   1677     isVariadic = FD->isVariadic();
   1678   else
   1679     isVariadic = getCurMethodDecl()->isVariadic();
   1680 
   1681   if (!isVariadic) {
   1682     Diag(Fn->getLocStart(), diag::err_va_start_used_in_non_variadic_function);
   1683     return true;
   1684   }
   1685 
   1686   // Verify that the second argument to the builtin is the last argument of the
   1687   // current function or method.
   1688   bool SecondArgIsLastNamedArgument = false;
   1689   const Expr *Arg = TheCall->getArg(1)->IgnoreParenCasts();
   1690 
   1691   // These are valid if SecondArgIsLastNamedArgument is false after the next
   1692   // block.
   1693   QualType Type;
   1694   SourceLocation ParamLoc;
   1695 
   1696   if (const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(Arg)) {
   1697     if (const ParmVarDecl *PV = dyn_cast<ParmVarDecl>(DR->getDecl())) {
   1698       // FIXME: This isn't correct for methods (results in bogus warning).
   1699       // Get the last formal in the current function.
   1700       const ParmVarDecl *LastArg;
   1701       if (CurBlock)
   1702         LastArg = *(CurBlock->TheDecl->param_end()-1);
   1703       else if (FunctionDecl *FD = getCurFunctionDecl())
   1704         LastArg = *(FD->param_end()-1);
   1705       else
   1706         LastArg = *(getCurMethodDecl()->param_end()-1);
   1707       SecondArgIsLastNamedArgument = PV == LastArg;
   1708 
   1709       Type = PV->getType();
   1710       ParamLoc = PV->getLocation();
   1711     }
   1712   }
   1713 
   1714   if (!SecondArgIsLastNamedArgument)
   1715     Diag(TheCall->getArg(1)->getLocStart(),
   1716          diag::warn_second_parameter_of_va_start_not_last_named_argument);
   1717   else if (Type->isReferenceType()) {
   1718     Diag(Arg->getLocStart(),
   1719          diag::warn_va_start_of_reference_type_is_undefined);
   1720     Diag(ParamLoc, diag::note_parameter_type) << Type;
   1721   }
   1722 
   1723   TheCall->setType(Context.VoidTy);
   1724   return false;
   1725 }
   1726 
   1727 /// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and
   1728 /// friends.  This is declared to take (...), so we have to check everything.
   1729 bool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {
   1730   if (TheCall->getNumArgs() < 2)
   1731     return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args)
   1732       << 0 << 2 << TheCall->getNumArgs()/*function call*/;
   1733   if (TheCall->getNumArgs() > 2)
   1734     return Diag(TheCall->getArg(2)->getLocStart(),
   1735                 diag::err_typecheck_call_too_many_args)
   1736       << 0 /*function call*/ << 2 << TheCall->getNumArgs()
   1737       << SourceRange(TheCall->getArg(2)->getLocStart(),
   1738                      (*(TheCall->arg_end()-1))->getLocEnd());
   1739 
   1740   ExprResult OrigArg0 = TheCall->getArg(0);
   1741   ExprResult OrigArg1 = TheCall->getArg(1);
   1742 
   1743   // Do standard promotions between the two arguments, returning their common
   1744   // type.
   1745   QualType Res = UsualArithmeticConversions(OrigArg0, OrigArg1, false);
   1746   if (OrigArg0.isInvalid() || OrigArg1.isInvalid())
   1747     return true;
   1748 
   1749   // Make sure any conversions are pushed back into the call; this is
   1750   // type safe since unordered compare builtins are declared as "_Bool
   1751   // foo(...)".
   1752   TheCall->setArg(0, OrigArg0.get());
   1753   TheCall->setArg(1, OrigArg1.get());
   1754 
   1755   if (OrigArg0.get()->isTypeDependent() || OrigArg1.get()->isTypeDependent())
   1756     return false;
   1757 
   1758   // If the common type isn't a real floating type, then the arguments were
   1759   // invalid for this operation.
   1760   if (Res.isNull() || !Res->isRealFloatingType())
   1761     return Diag(OrigArg0.get()->getLocStart(),
   1762                 diag::err_typecheck_call_invalid_ordered_compare)
   1763       << OrigArg0.get()->getType() << OrigArg1.get()->getType()
   1764       << SourceRange(OrigArg0.get()->getLocStart(), OrigArg1.get()->getLocEnd());
   1765 
   1766   return false;
   1767 }
   1768 
   1769 /// SemaBuiltinSemaBuiltinFPClassification - Handle functions like
   1770 /// __builtin_isnan and friends.  This is declared to take (...), so we have
   1771 /// to check everything. We expect the last argument to be a floating point
   1772 /// value.
   1773 bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {
   1774   if (TheCall->getNumArgs() < NumArgs)
   1775     return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args)
   1776       << 0 << NumArgs << TheCall->getNumArgs()/*function call*/;
   1777   if (TheCall->getNumArgs() > NumArgs)
   1778     return Diag(TheCall->getArg(NumArgs)->getLocStart(),
   1779                 diag::err_typecheck_call_too_many_args)
   1780       << 0 /*function call*/ << NumArgs << TheCall->getNumArgs()
   1781       << SourceRange(TheCall->getArg(NumArgs)->getLocStart(),
   1782                      (*(TheCall->arg_end()-1))->getLocEnd());
   1783 
   1784   Expr *OrigArg = TheCall->getArg(NumArgs-1);
   1785 
   1786   if (OrigArg->isTypeDependent())
   1787     return false;
   1788 
   1789   // This operation requires a non-_Complex floating-point number.
   1790   if (!OrigArg->getType()->isRealFloatingType())
   1791     return Diag(OrigArg->getLocStart(),
   1792                 diag::err_typecheck_call_invalid_unary_fp)
   1793       << OrigArg->getType() << OrigArg->getSourceRange();
   1794 
   1795   // If this is an implicit conversion from float -> double, remove it.
   1796   if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(OrigArg)) {
   1797     Expr *CastArg = Cast->getSubExpr();
   1798     if (CastArg->getType()->isSpecificBuiltinType(BuiltinType::Float)) {
   1799       assert(Cast->getType()->isSpecificBuiltinType(BuiltinType::Double) &&
   1800              "promotion from float to double is the only expected cast here");
   1801       Cast->setSubExpr(nullptr);
   1802       TheCall->setArg(NumArgs-1, CastArg);
   1803     }
   1804   }
   1805 
   1806   return false;
   1807 }
   1808 
   1809 /// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.
   1810 // This is declared to take (...), so we have to check everything.
   1811 ExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {
   1812   if (TheCall->getNumArgs() < 2)
   1813     return ExprError(Diag(TheCall->getLocEnd(),
   1814                           diag::err_typecheck_call_too_few_args_at_least)
   1815                      << 0 /*function call*/ << 2 << TheCall->getNumArgs()
   1816                      << TheCall->getSourceRange());
   1817 
   1818   // Determine which of the following types of shufflevector we're checking:
   1819   // 1) unary, vector mask: (lhs, mask)
   1820   // 2) binary, vector mask: (lhs, rhs, mask)
   1821   // 3) binary, scalar mask: (lhs, rhs, index, ..., index)
   1822   QualType resType = TheCall->getArg(0)->getType();
   1823   unsigned numElements = 0;
   1824 
   1825   if (!TheCall->getArg(0)->isTypeDependent() &&
   1826       !TheCall->getArg(1)->isTypeDependent()) {
   1827     QualType LHSType = TheCall->getArg(0)->getType();
   1828     QualType RHSType = TheCall->getArg(1)->getType();
   1829 
   1830     if (!LHSType->isVectorType() || !RHSType->isVectorType())
   1831       return ExprError(Diag(TheCall->getLocStart(),
   1832                             diag::err_shufflevector_non_vector)
   1833                        << SourceRange(TheCall->getArg(0)->getLocStart(),
   1834                                       TheCall->getArg(1)->getLocEnd()));
   1835 
   1836     numElements = LHSType->getAs<VectorType>()->getNumElements();
   1837     unsigned numResElements = TheCall->getNumArgs() - 2;
   1838 
   1839     // Check to see if we have a call with 2 vector arguments, the unary shuffle
   1840     // with mask.  If so, verify that RHS is an integer vector type with the
   1841     // same number of elts as lhs.
   1842     if (TheCall->getNumArgs() == 2) {
   1843       if (!RHSType->hasIntegerRepresentation() ||
   1844           RHSType->getAs<VectorType>()->getNumElements() != numElements)
   1845         return ExprError(Diag(TheCall->getLocStart(),
   1846                               diag::err_shufflevector_incompatible_vector)
   1847                          << SourceRange(TheCall->getArg(1)->getLocStart(),
   1848                                         TheCall->getArg(1)->getLocEnd()));
   1849     } else if (!Context.hasSameUnqualifiedType(LHSType, RHSType)) {
   1850       return ExprError(Diag(TheCall->getLocStart(),
   1851                             diag::err_shufflevector_incompatible_vector)
   1852                        << SourceRange(TheCall->getArg(0)->getLocStart(),
   1853                                       TheCall->getArg(1)->getLocEnd()));
   1854     } else if (numElements != numResElements) {
   1855       QualType eltType = LHSType->getAs<VectorType>()->getElementType();
   1856       resType = Context.getVectorType(eltType, numResElements,
   1857                                       VectorType::GenericVector);
   1858     }
   1859   }
   1860 
   1861   for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {
   1862     if (TheCall->getArg(i)->isTypeDependent() ||
   1863         TheCall->getArg(i)->isValueDependent())
   1864       continue;
   1865 
   1866     llvm::APSInt Result(32);
   1867     if (!TheCall->getArg(i)->isIntegerConstantExpr(Result, Context))
   1868       return ExprError(Diag(TheCall->getLocStart(),
   1869                             diag::err_shufflevector_nonconstant_argument)
   1870                        << TheCall->getArg(i)->getSourceRange());
   1871 
   1872     // Allow -1 which will be translated to undef in the IR.
   1873     if (Result.isSigned() && Result.isAllOnesValue())
   1874       continue;
   1875 
   1876     if (Result.getActiveBits() > 64 || Result.getZExtValue() >= numElements*2)
   1877       return ExprError(Diag(TheCall->getLocStart(),
   1878                             diag::err_shufflevector_argument_too_large)
   1879                        << TheCall->getArg(i)->getSourceRange());
   1880   }
   1881 
   1882   SmallVector<Expr*, 32> exprs;
   1883 
   1884   for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; i++) {
   1885     exprs.push_back(TheCall->getArg(i));
   1886     TheCall->setArg(i, nullptr);
   1887   }
   1888 
   1889   return new (Context) ShuffleVectorExpr(Context, exprs, resType,
   1890                                          TheCall->getCallee()->getLocStart(),
   1891                                          TheCall->getRParenLoc());
   1892 }
   1893 
   1894 /// SemaConvertVectorExpr - Handle __builtin_convertvector
   1895 ExprResult Sema::SemaConvertVectorExpr(Expr *E, TypeSourceInfo *TInfo,
   1896                                        SourceLocation BuiltinLoc,
   1897                                        SourceLocation RParenLoc) {
   1898   ExprValueKind VK = VK_RValue;
   1899   ExprObjectKind OK = OK_Ordinary;
   1900   QualType DstTy = TInfo->getType();
   1901   QualType SrcTy = E->getType();
   1902 
   1903   if (!SrcTy->isVectorType() && !SrcTy->isDependentType())
   1904     return ExprError(Diag(BuiltinLoc,
   1905                           diag::err_convertvector_non_vector)
   1906                      << E->getSourceRange());
   1907   if (!DstTy->isVectorType() && !DstTy->isDependentType())
   1908     return ExprError(Diag(BuiltinLoc,
   1909                           diag::err_convertvector_non_vector_type));
   1910 
   1911   if (!SrcTy->isDependentType() && !DstTy->isDependentType()) {
   1912     unsigned SrcElts = SrcTy->getAs<VectorType>()->getNumElements();
   1913     unsigned DstElts = DstTy->getAs<VectorType>()->getNumElements();
   1914     if (SrcElts != DstElts)
   1915       return ExprError(Diag(BuiltinLoc,
   1916                             diag::err_convertvector_incompatible_vector)
   1917                        << E->getSourceRange());
   1918   }
   1919 
   1920   return new (Context)
   1921       ConvertVectorExpr(E, TInfo, DstTy, VK, OK, BuiltinLoc, RParenLoc);
   1922 }
   1923 
   1924 /// SemaBuiltinPrefetch - Handle __builtin_prefetch.
   1925 // This is declared to take (const void*, ...) and can take two
   1926 // optional constant int args.
   1927 bool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {
   1928   unsigned NumArgs = TheCall->getNumArgs();
   1929 
   1930   if (NumArgs > 3)
   1931     return Diag(TheCall->getLocEnd(),
   1932              diag::err_typecheck_call_too_many_args_at_most)
   1933              << 0 /*function call*/ << 3 << NumArgs
   1934              << TheCall->getSourceRange();
   1935 
   1936   // Argument 0 is checked for us and the remaining arguments must be
   1937   // constant integers.
   1938   for (unsigned i = 1; i != NumArgs; ++i)
   1939     if (SemaBuiltinConstantArgRange(TheCall, i, 0, i == 1 ? 1 : 3))
   1940       return true;
   1941 
   1942   return false;
   1943 }
   1944 
   1945 /// SemaBuiltinConstantArg - Handle a check if argument ArgNum of CallExpr
   1946 /// TheCall is a constant expression.
   1947 bool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum,
   1948                                   llvm::APSInt &Result) {
   1949   Expr *Arg = TheCall->getArg(ArgNum);
   1950   DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
   1951   FunctionDecl *FDecl = cast<FunctionDecl>(DRE->getDecl());
   1952 
   1953   if (Arg->isTypeDependent() || Arg->isValueDependent()) return false;
   1954 
   1955   if (!Arg->isIntegerConstantExpr(Result, Context))
   1956     return Diag(TheCall->getLocStart(), diag::err_constant_integer_arg_type)
   1957                 << FDecl->getDeclName() <<  Arg->getSourceRange();
   1958 
   1959   return false;
   1960 }
   1961 
   1962 /// SemaBuiltinConstantArgRange - Handle a check if argument ArgNum of CallExpr
   1963 /// TheCall is a constant expression in the range [Low, High].
   1964 bool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum,
   1965                                        int Low, int High) {
   1966   llvm::APSInt Result;
   1967 
   1968   // We can't check the value of a dependent argument.
   1969   Expr *Arg = TheCall->getArg(ArgNum);
   1970   if (Arg->isTypeDependent() || Arg->isValueDependent())
   1971     return false;
   1972 
   1973   // Check constant-ness first.
   1974   if (SemaBuiltinConstantArg(TheCall, ArgNum, Result))
   1975     return true;
   1976 
   1977   if (Result.getSExtValue() < Low || Result.getSExtValue() > High)
   1978     return Diag(TheCall->getLocStart(), diag::err_argument_invalid_range)
   1979       << Low << High << Arg->getSourceRange();
   1980 
   1981   return false;
   1982 }
   1983 
   1984 /// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).
   1985 /// This checks that val is a constant 1.
   1986 bool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {
   1987   Expr *Arg = TheCall->getArg(1);
   1988   llvm::APSInt Result;
   1989 
   1990   // TODO: This is less than ideal. Overload this to take a value.
   1991   if (SemaBuiltinConstantArg(TheCall, 1, Result))
   1992     return true;
   1993 
   1994   if (Result != 1)
   1995     return Diag(TheCall->getLocStart(), diag::err_builtin_longjmp_invalid_val)
   1996              << SourceRange(Arg->getLocStart(), Arg->getLocEnd());
   1997 
   1998   return false;
   1999 }
   2000 
   2001 namespace {
   2002 enum StringLiteralCheckType {
   2003   SLCT_NotALiteral,
   2004   SLCT_UncheckedLiteral,
   2005   SLCT_CheckedLiteral
   2006 };
   2007 }
   2008 
   2009 // Determine if an expression is a string literal or constant string.
   2010 // If this function returns false on the arguments to a function expecting a
   2011 // format string, we will usually need to emit a warning.
   2012 // True string literals are then checked by CheckFormatString.
   2013 static StringLiteralCheckType
   2014 checkFormatStringExpr(Sema &S, const Expr *E, ArrayRef<const Expr *> Args,
   2015                       bool HasVAListArg, unsigned format_idx,
   2016                       unsigned firstDataArg, Sema::FormatStringType Type,
   2017                       Sema::VariadicCallType CallType, bool InFunctionCall,
   2018                       llvm::SmallBitVector &CheckedVarArgs) {
   2019  tryAgain:
   2020   if (E->isTypeDependent() || E->isValueDependent())
   2021     return SLCT_NotALiteral;
   2022 
   2023   E = E->IgnoreParenCasts();
   2024 
   2025   if (E->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull))
   2026     // Technically -Wformat-nonliteral does not warn about this case.
   2027     // The behavior of printf and friends in this case is implementation
   2028     // dependent.  Ideally if the format string cannot be null then
   2029     // it should have a 'nonnull' attribute in the function prototype.
   2030     return SLCT_UncheckedLiteral;
   2031 
   2032   switch (E->getStmtClass()) {
   2033   case Stmt::BinaryConditionalOperatorClass:
   2034   case Stmt::ConditionalOperatorClass: {
   2035     // The expression is a literal if both sub-expressions were, and it was
   2036     // completely checked only if both sub-expressions were checked.
   2037     const AbstractConditionalOperator *C =
   2038         cast<AbstractConditionalOperator>(E);
   2039     StringLiteralCheckType Left =
   2040         checkFormatStringExpr(S, C->getTrueExpr(), Args,
   2041                               HasVAListArg, format_idx, firstDataArg,
   2042                               Type, CallType, InFunctionCall, CheckedVarArgs);
   2043     if (Left == SLCT_NotALiteral)
   2044       return SLCT_NotALiteral;
   2045     StringLiteralCheckType Right =
   2046         checkFormatStringExpr(S, C->getFalseExpr(), Args,
   2047                               HasVAListArg, format_idx, firstDataArg,
   2048                               Type, CallType, InFunctionCall, CheckedVarArgs);
   2049     return Left < Right ? Left : Right;
   2050   }
   2051 
   2052   case Stmt::ImplicitCastExprClass: {
   2053     E = cast<ImplicitCastExpr>(E)->getSubExpr();
   2054     goto tryAgain;
   2055   }
   2056 
   2057   case Stmt::OpaqueValueExprClass:
   2058     if (const Expr *src = cast<OpaqueValueExpr>(E)->getSourceExpr()) {
   2059       E = src;
   2060       goto tryAgain;
   2061     }
   2062     return SLCT_NotALiteral;
   2063 
   2064   case Stmt::PredefinedExprClass:
   2065     // While __func__, etc., are technically not string literals, they
   2066     // cannot contain format specifiers and thus are not a security
   2067     // liability.
   2068     return SLCT_UncheckedLiteral;
   2069 
   2070   case Stmt::DeclRefExprClass: {
   2071     const DeclRefExpr *DR = cast<DeclRefExpr>(E);
   2072 
   2073     // As an exception, do not flag errors for variables binding to
   2074     // const string literals.
   2075     if (const VarDecl *VD = dyn_cast<VarDecl>(DR->getDecl())) {
   2076       bool isConstant = false;
   2077       QualType T = DR->getType();
   2078 
   2079       if (const ArrayType *AT = S.Context.getAsArrayType(T)) {
   2080         isConstant = AT->getElementType().isConstant(S.Context);
   2081       } else if (const PointerType *PT = T->getAs<PointerType>()) {
   2082         isConstant = T.isConstant(S.Context) &&
   2083                      PT->getPointeeType().isConstant(S.Context);
   2084       } else if (T->isObjCObjectPointerType()) {
   2085         // In ObjC, there is usually no "const ObjectPointer" type,
   2086         // so don't check if the pointee type is constant.
   2087         isConstant = T.isConstant(S.Context);
   2088       }
   2089 
   2090       if (isConstant) {
   2091         if (const Expr *Init = VD->getAnyInitializer()) {
   2092           // Look through initializers like const char c[] = { "foo" }
   2093           if (const InitListExpr *InitList = dyn_cast<InitListExpr>(Init)) {
   2094             if (InitList->isStringLiteralInit())
   2095               Init = InitList->getInit(0)->IgnoreParenImpCasts();
   2096           }
   2097           return checkFormatStringExpr(S, Init, Args,
   2098                                        HasVAListArg, format_idx,
   2099                                        firstDataArg, Type, CallType,
   2100                                        /*InFunctionCall*/false, CheckedVarArgs);
   2101         }
   2102       }
   2103 
   2104       // For vprintf* functions (i.e., HasVAListArg==true), we add a
   2105       // special check to see if the format string is a function parameter
   2106       // of the function calling the printf function.  If the function
   2107       // has an attribute indicating it is a printf-like function, then we
   2108       // should suppress warnings concerning non-literals being used in a call
   2109       // to a vprintf function.  For example:
   2110       //
   2111       // void
   2112       // logmessage(char const *fmt __attribute__ (format (printf, 1, 2)), ...){
   2113       //      va_list ap;
   2114       //      va_start(ap, fmt);
   2115       //      vprintf(fmt, ap);  // Do NOT emit a warning about "fmt".
   2116       //      ...
   2117       // }
   2118       if (HasVAListArg) {
   2119         if (const ParmVarDecl *PV = dyn_cast<ParmVarDecl>(VD)) {
   2120           if (const NamedDecl *ND = dyn_cast<NamedDecl>(PV->getDeclContext())) {
   2121             int PVIndex = PV->getFunctionScopeIndex() + 1;
   2122             for (const auto *PVFormat : ND->specific_attrs<FormatAttr>()) {
   2123               // adjust for implicit parameter
   2124               if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
   2125                 if (MD->isInstance())
   2126                   ++PVIndex;
   2127               // We also check if the formats are compatible.
   2128               // We can't pass a 'scanf' string to a 'printf' function.
   2129               if (PVIndex == PVFormat->getFormatIdx() &&
   2130                   Type == S.GetFormatStringType(PVFormat))
   2131                 return SLCT_UncheckedLiteral;
   2132             }
   2133           }
   2134         }
   2135       }
   2136     }
   2137 
   2138     return SLCT_NotALiteral;
   2139   }
   2140 
   2141   case Stmt::CallExprClass:
   2142   case Stmt::CXXMemberCallExprClass: {
   2143     const CallExpr *CE = cast<CallExpr>(E);
   2144     if (const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(CE->getCalleeDecl())) {
   2145       if (const FormatArgAttr *FA = ND->getAttr<FormatArgAttr>()) {
   2146         unsigned ArgIndex = FA->getFormatIdx();
   2147         if (const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND))
   2148           if (MD->isInstance())
   2149             --ArgIndex;
   2150         const Expr *Arg = CE->getArg(ArgIndex - 1);
   2151 
   2152         return checkFormatStringExpr(S, Arg, Args,
   2153                                      HasVAListArg, format_idx, firstDataArg,
   2154                                      Type, CallType, InFunctionCall,
   2155                                      CheckedVarArgs);
   2156       } else if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(ND)) {
   2157         unsigned BuiltinID = FD->getBuiltinID();
   2158         if (BuiltinID == Builtin::BI__builtin___CFStringMakeConstantString ||
   2159             BuiltinID == Builtin::BI__builtin___NSStringMakeConstantString) {
   2160           const Expr *Arg = CE->getArg(0);
   2161           return checkFormatStringExpr(S, Arg, Args,
   2162                                        HasVAListArg, format_idx,
   2163                                        firstDataArg, Type, CallType,
   2164                                        InFunctionCall, CheckedVarArgs);
   2165         }
   2166       }
   2167     }
   2168 
   2169     return SLCT_NotALiteral;
   2170   }
   2171   case Stmt::ObjCStringLiteralClass:
   2172   case Stmt::StringLiteralClass: {
   2173     const StringLiteral *StrE = nullptr;
   2174 
   2175     if (const ObjCStringLiteral *ObjCFExpr = dyn_cast<ObjCStringLiteral>(E))
   2176       StrE = ObjCFExpr->getString();
   2177     else
   2178       StrE = cast<StringLiteral>(E);
   2179 
   2180     if (StrE) {
   2181       S.CheckFormatString(StrE, E, Args, HasVAListArg, format_idx, firstDataArg,
   2182                           Type, InFunctionCall, CallType, CheckedVarArgs);
   2183       return SLCT_CheckedLiteral;
   2184     }
   2185 
   2186     return SLCT_NotALiteral;
   2187   }
   2188 
   2189   default:
   2190     return SLCT_NotALiteral;
   2191   }
   2192 }
   2193 
   2194 Sema::FormatStringType Sema::GetFormatStringType(const FormatAttr *Format) {
   2195   return llvm::StringSwitch<FormatStringType>(Format->getType()->getName())
   2196   .Case("scanf", FST_Scanf)
   2197   .Cases("printf", "printf0", FST_Printf)
   2198   .Cases("NSString", "CFString", FST_NSString)
   2199   .Case("strftime", FST_Strftime)
   2200   .Case("strfmon", FST_Strfmon)
   2201   .Cases("kprintf", "cmn_err", "vcmn_err", "zcmn_err", FST_Kprintf)
   2202   .Default(FST_Unknown);
   2203 }
   2204 
   2205 /// CheckFormatArguments - Check calls to printf and scanf (and similar
   2206 /// functions) for correct use of format strings.
   2207 /// Returns true if a format string has been fully checked.
   2208 bool Sema::CheckFormatArguments(const FormatAttr *Format,
   2209                                 ArrayRef<const Expr *> Args,
   2210                                 bool IsCXXMember,
   2211                                 VariadicCallType CallType,
   2212                                 SourceLocation Loc, SourceRange Range,
   2213                                 llvm::SmallBitVector &CheckedVarArgs) {
   2214   FormatStringInfo FSI;
   2215   if (getFormatStringInfo(Format, IsCXXMember, &FSI))
   2216     return CheckFormatArguments(Args, FSI.HasVAListArg, FSI.FormatIdx,
   2217                                 FSI.FirstDataArg, GetFormatStringType(Format),
   2218                                 CallType, Loc, Range, CheckedVarArgs);
   2219   return false;
   2220 }
   2221 
   2222 bool Sema::CheckFormatArguments(ArrayRef<const Expr *> Args,
   2223                                 bool HasVAListArg, unsigned format_idx,
   2224                                 unsigned firstDataArg, FormatStringType Type,
   2225                                 VariadicCallType CallType,
   2226                                 SourceLocation Loc, SourceRange Range,
   2227                                 llvm::SmallBitVector &CheckedVarArgs) {
   2228   // CHECK: printf/scanf-like function is called with no format string.
   2229   if (format_idx >= Args.size()) {
   2230     Diag(Loc, diag::warn_missing_format_string) << Range;
   2231     return false;
   2232   }
   2233 
   2234   const Expr *OrigFormatExpr = Args[format_idx]->IgnoreParenCasts();
   2235 
   2236   // CHECK: format string is not a string literal.
   2237   //
   2238   // Dynamically generated format strings are difficult to
   2239   // automatically vet at compile time.  Requiring that format strings
   2240   // are string literals: (1) permits the checking of format strings by
   2241   // the compiler and thereby (2) can practically remove the source of
   2242   // many format string exploits.
   2243 
   2244   // Format string can be either ObjC string (e.g. @"%d") or
   2245   // C string (e.g. "%d")
   2246   // ObjC string uses the same format specifiers as C string, so we can use
   2247   // the same format string checking logic for both ObjC and C strings.
   2248   StringLiteralCheckType CT =
   2249       checkFormatStringExpr(*this, OrigFormatExpr, Args, HasVAListArg,
   2250                             format_idx, firstDataArg, Type, CallType,
   2251                             /*IsFunctionCall*/true, CheckedVarArgs);
   2252   if (CT != SLCT_NotALiteral)
   2253     // Literal format string found, check done!
   2254     return CT == SLCT_CheckedLiteral;
   2255 
   2256   // Strftime is particular as it always uses a single 'time' argument,
   2257   // so it is safe to pass a non-literal string.
   2258   if (Type == FST_Strftime)
   2259     return false;
   2260 
   2261   // Do not emit diag when the string param is a macro expansion and the
   2262   // format is either NSString or CFString. This is a hack to prevent
   2263   // diag when using the NSLocalizedString and CFCopyLocalizedString macros
   2264   // which are usually used in place of NS and CF string literals.
   2265   if (Type == FST_NSString &&
   2266       SourceMgr.isInSystemMacro(Args[format_idx]->getLocStart()))
   2267     return false;
   2268 
   2269   // If there are no arguments specified, warn with -Wformat-security, otherwise
   2270   // warn only with -Wformat-nonliteral.
   2271   if (Args.size() == firstDataArg)
   2272     Diag(Args[format_idx]->getLocStart(),
   2273          diag::warn_format_nonliteral_noargs)
   2274       << OrigFormatExpr->getSourceRange();
   2275   else
   2276     Diag(Args[format_idx]->getLocStart(),
   2277          diag::warn_format_nonliteral)
   2278            << OrigFormatExpr->getSourceRange();
   2279   return false;
   2280 }
   2281 
   2282 namespace {
   2283 class CheckFormatHandler : public analyze_format_string::FormatStringHandler {
   2284 protected:
   2285   Sema &S;
   2286   const StringLiteral *FExpr;
   2287   const Expr *OrigFormatExpr;
   2288   const unsigned FirstDataArg;
   2289   const unsigned NumDataArgs;
   2290   const char *Beg; // Start of format string.
   2291   const bool HasVAListArg;
   2292   ArrayRef<const Expr *> Args;
   2293   unsigned FormatIdx;
   2294   llvm::SmallBitVector CoveredArgs;
   2295   bool usesPositionalArgs;
   2296   bool atFirstArg;
   2297   bool inFunctionCall;
   2298   Sema::VariadicCallType CallType;
   2299   llvm::SmallBitVector &CheckedVarArgs;
   2300 public:
   2301   CheckFormatHandler(Sema &s, const StringLiteral *fexpr,
   2302                      const Expr *origFormatExpr, unsigned firstDataArg,
   2303                      unsigned numDataArgs, const char *beg, bool hasVAListArg,
   2304                      ArrayRef<const Expr *> Args,
   2305                      unsigned formatIdx, bool inFunctionCall,
   2306                      Sema::VariadicCallType callType,
   2307                      llvm::SmallBitVector &CheckedVarArgs)
   2308     : S(s), FExpr(fexpr), OrigFormatExpr(origFormatExpr),
   2309       FirstDataArg(firstDataArg), NumDataArgs(numDataArgs),
   2310       Beg(beg), HasVAListArg(hasVAListArg),
   2311       Args(Args), FormatIdx(formatIdx),
   2312       usesPositionalArgs(false), atFirstArg(true),
   2313       inFunctionCall(inFunctionCall), CallType(callType),
   2314       CheckedVarArgs(CheckedVarArgs) {
   2315     CoveredArgs.resize(numDataArgs);
   2316     CoveredArgs.reset();
   2317   }
   2318 
   2319   void DoneProcessing();
   2320 
   2321   void HandleIncompleteSpecifier(const char *startSpecifier,
   2322                                  unsigned specifierLen) override;
   2323 
   2324   void HandleInvalidLengthModifier(
   2325                            const analyze_format_string::FormatSpecifier &FS,
   2326                            const analyze_format_string::ConversionSpecifier &CS,
   2327                            const char *startSpecifier, unsigned specifierLen,
   2328                            unsigned DiagID);
   2329 
   2330   void HandleNonStandardLengthModifier(
   2331                     const analyze_format_string::FormatSpecifier &FS,
   2332                     const char *startSpecifier, unsigned specifierLen);
   2333 
   2334   void HandleNonStandardConversionSpecifier(
   2335                     const analyze_format_string::ConversionSpecifier &CS,
   2336                     const char *startSpecifier, unsigned specifierLen);
   2337 
   2338   void HandlePosition(const char *startPos, unsigned posLen) override;
   2339 
   2340   void HandleInvalidPosition(const char *startSpecifier,
   2341                              unsigned specifierLen,
   2342                              analyze_format_string::PositionContext p) override;
   2343 
   2344   void HandleZeroPosition(const char *startPos, unsigned posLen) override;
   2345 
   2346   void HandleNullChar(const char *nullCharacter) override;
   2347 
   2348   template <typename Range>
   2349   static void EmitFormatDiagnostic(Sema &S, bool inFunctionCall,
   2350                                    const Expr *ArgumentExpr,
   2351                                    PartialDiagnostic PDiag,
   2352                                    SourceLocation StringLoc,
   2353                                    bool IsStringLocation, Range StringRange,
   2354                                    ArrayRef<FixItHint> Fixit = None);
   2355 
   2356 protected:
   2357   bool HandleInvalidConversionSpecifier(unsigned argIndex, SourceLocation Loc,
   2358                                         const char *startSpec,
   2359                                         unsigned specifierLen,
   2360                                         const char *csStart, unsigned csLen);
   2361 
   2362   void HandlePositionalNonpositionalArgs(SourceLocation Loc,
   2363                                          const char *startSpec,
   2364                                          unsigned specifierLen);
   2365 
   2366   SourceRange getFormatStringRange();
   2367   CharSourceRange getSpecifierRange(const char *startSpecifier,
   2368                                     unsigned specifierLen);
   2369   SourceLocation getLocationOfByte(const char *x);
   2370 
   2371   const Expr *getDataArg(unsigned i) const;
   2372 
   2373   bool CheckNumArgs(const analyze_format_string::FormatSpecifier &FS,
   2374                     const analyze_format_string::ConversionSpecifier &CS,
   2375                     const char *startSpecifier, unsigned specifierLen,
   2376                     unsigned argIndex);
   2377 
   2378   template <typename Range>
   2379   void EmitFormatDiagnostic(PartialDiagnostic PDiag, SourceLocation StringLoc,
   2380                             bool IsStringLocation, Range StringRange,
   2381                             ArrayRef<FixItHint> Fixit = None);
   2382 };
   2383 }
   2384 
   2385 SourceRange CheckFormatHandler::getFormatStringRange() {
   2386   return OrigFormatExpr->getSourceRange();
   2387 }
   2388 
   2389 CharSourceRange CheckFormatHandler::
   2390 getSpecifierRange(const char *startSpecifier, unsigned specifierLen) {
   2391   SourceLocation Start = getLocationOfByte(startSpecifier);
   2392   SourceLocation End   = getLocationOfByte(startSpecifier + specifierLen - 1);
   2393 
   2394   // Advance the end SourceLocation by one due to half-open ranges.
   2395   End = End.getLocWithOffset(1);
   2396 
   2397   return CharSourceRange::getCharRange(Start, End);
   2398 }
   2399 
   2400 SourceLocation CheckFormatHandler::getLocationOfByte(const char *x) {
   2401   return S.getLocationOfStringLiteralByte(FExpr, x - Beg);
   2402 }
   2403 
   2404 void CheckFormatHandler::HandleIncompleteSpecifier(const char *startSpecifier,
   2405                                                    unsigned specifierLen){
   2406   EmitFormatDiagnostic(S.PDiag(diag::warn_printf_incomplete_specifier),
   2407                        getLocationOfByte(startSpecifier),
   2408                        /*IsStringLocation*/true,
   2409                        getSpecifierRange(startSpecifier, specifierLen));
   2410 }
   2411 
   2412 void CheckFormatHandler::HandleInvalidLengthModifier(
   2413     const analyze_format_string::FormatSpecifier &FS,
   2414     const analyze_format_string::ConversionSpecifier &CS,
   2415     const char *startSpecifier, unsigned specifierLen, unsigned DiagID) {
   2416   using namespace analyze_format_string;
   2417 
   2418   const LengthModifier &LM = FS.getLengthModifier();
   2419   CharSourceRange LMRange = getSpecifierRange(LM.getStart(), LM.getLength());
   2420 
   2421   // See if we know how to fix this length modifier.
   2422   Optional<LengthModifier> FixedLM = FS.getCorrectedLengthModifier();
   2423   if (FixedLM) {
   2424     EmitFormatDiagnostic(S.PDiag(DiagID) << LM.toString() << CS.toString(),
   2425                          getLocationOfByte(LM.getStart()),
   2426                          /*IsStringLocation*/true,
   2427                          getSpecifierRange(startSpecifier, specifierLen));
   2428 
   2429     S.Diag(getLocationOfByte(LM.getStart()), diag::note_format_fix_specifier)
   2430       << FixedLM->toString()
   2431       << FixItHint::CreateReplacement(LMRange, FixedLM->toString());
   2432 
   2433   } else {
   2434     FixItHint Hint;
   2435     if (DiagID == diag::warn_format_nonsensical_length)
   2436       Hint = FixItHint::CreateRemoval(LMRange);
   2437 
   2438     EmitFormatDiagnostic(S.PDiag(DiagID) << LM.toString() << CS.toString(),
   2439                          getLocationOfByte(LM.getStart()),
   2440                          /*IsStringLocation*/true,
   2441                          getSpecifierRange(startSpecifier, specifierLen),
   2442                          Hint);
   2443   }
   2444 }
   2445 
   2446 void CheckFormatHandler::HandleNonStandardLengthModifier(
   2447     const analyze_format_string::FormatSpecifier &FS,
   2448     const char *startSpecifier, unsigned specifierLen) {
   2449   using namespace analyze_format_string;
   2450 
   2451   const LengthModifier &LM = FS.getLengthModifier();
   2452   CharSourceRange LMRange = getSpecifierRange(LM.getStart(), LM.getLength());
   2453 
   2454   // See if we know how to fix this length modifier.
   2455   Optional<LengthModifier> FixedLM = FS.getCorrectedLengthModifier();
   2456   if (FixedLM) {
   2457     EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard)
   2458                            << LM.toString() << 0,
   2459                          getLocationOfByte(LM.getStart()),
   2460                          /*IsStringLocation*/true,
   2461                          getSpecifierRange(startSpecifier, specifierLen));
   2462 
   2463     S.Diag(getLocationOfByte(LM.getStart()), diag::note_format_fix_specifier)
   2464       << FixedLM->toString()
   2465       << FixItHint::CreateReplacement(LMRange, FixedLM->toString());
   2466 
   2467   } else {
   2468     EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard)
   2469                            << LM.toString() << 0,
   2470                          getLocationOfByte(LM.getStart()),
   2471                          /*IsStringLocation*/true,
   2472                          getSpecifierRange(startSpecifier, specifierLen));
   2473   }
   2474 }
   2475 
   2476 void CheckFormatHandler::HandleNonStandardConversionSpecifier(
   2477     const analyze_format_string::ConversionSpecifier &CS,
   2478     const char *startSpecifier, unsigned specifierLen) {
   2479   using namespace analyze_format_string;
   2480 
   2481   // See if we know how to fix this conversion specifier.
   2482   Optional<ConversionSpecifier> FixedCS = CS.getStandardSpecifier();
   2483   if (FixedCS) {
   2484     EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard)
   2485                           << CS.toString() << /*conversion specifier*/1,
   2486                          getLocationOfByte(CS.getStart()),
   2487                          /*IsStringLocation*/true,
   2488                          getSpecifierRange(startSpecifier, specifierLen));
   2489 
   2490     CharSourceRange CSRange = getSpecifierRange(CS.getStart(), CS.getLength());
   2491     S.Diag(getLocationOfByte(CS.getStart()), diag::note_format_fix_specifier)
   2492       << FixedCS->toString()
   2493       << FixItHint::CreateReplacement(CSRange, FixedCS->toString());
   2494   } else {
   2495     EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard)
   2496                           << CS.toString() << /*conversion specifier*/1,
   2497                          getLocationOfByte(CS.getStart()),
   2498                          /*IsStringLocation*/true,
   2499                          getSpecifierRange(startSpecifier, specifierLen));
   2500   }
   2501 }
   2502 
   2503 void CheckFormatHandler::HandlePosition(const char *startPos,
   2504                                         unsigned posLen) {
   2505   EmitFormatDiagnostic(S.PDiag(diag::warn_format_non_standard_positional_arg),
   2506                                getLocationOfByte(startPos),
   2507                                /*IsStringLocation*/true,
   2508                                getSpecifierRange(startPos, posLen));
   2509 }
   2510 
   2511 void
   2512 CheckFormatHandler::HandleInvalidPosition(const char *startPos, unsigned posLen,
   2513                                      analyze_format_string::PositionContext p) {
   2514   EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_positional_specifier)
   2515                          << (unsigned) p,
   2516                        getLocationOfByte(startPos), /*IsStringLocation*/true,
   2517                        getSpecifierRange(startPos, posLen));
   2518 }
   2519 
   2520 void CheckFormatHandler::HandleZeroPosition(const char *startPos,
   2521                                             unsigned posLen) {
   2522   EmitFormatDiagnostic(S.PDiag(diag::warn_format_zero_positional_specifier),
   2523                                getLocationOfByte(startPos),
   2524                                /*IsStringLocation*/true,
   2525                                getSpecifierRange(startPos, posLen));
   2526 }
   2527 
   2528 void CheckFormatHandler::HandleNullChar(const char *nullCharacter) {
   2529   if (!isa<ObjCStringLiteral>(OrigFormatExpr)) {
   2530     // The presence of a null character is likely an error.
   2531     EmitFormatDiagnostic(
   2532       S.PDiag(diag::warn_printf_format_string_contains_null_char),
   2533       getLocationOfByte(nullCharacter), /*IsStringLocation*/true,
   2534       getFormatStringRange());
   2535   }
   2536 }
   2537 
   2538 // Note that this may return NULL if there was an error parsing or building
   2539 // one of the argument expressions.
   2540 const Expr *CheckFormatHandler::getDataArg(unsigned i) const {
   2541   return Args[FirstDataArg + i];
   2542 }
   2543 
   2544 void CheckFormatHandler::DoneProcessing() {
   2545     // Does the number of data arguments exceed the number of
   2546     // format conversions in the format string?
   2547   if (!HasVAListArg) {
   2548       // Find any arguments that weren't covered.
   2549     CoveredArgs.flip();
   2550     signed notCoveredArg = CoveredArgs.find_first();
   2551     if (notCoveredArg >= 0) {
   2552       assert((unsigned)notCoveredArg < NumDataArgs);
   2553       if (const Expr *E = getDataArg((unsigned) notCoveredArg)) {
   2554         SourceLocation Loc = E->getLocStart();
   2555         if (!S.getSourceManager().isInSystemMacro(Loc)) {
   2556           EmitFormatDiagnostic(S.PDiag(diag::warn_printf_data_arg_not_used),
   2557                                Loc, /*IsStringLocation*/false,
   2558                                getFormatStringRange());
   2559         }
   2560       }
   2561     }
   2562   }
   2563 }
   2564 
   2565 bool
   2566 CheckFormatHandler::HandleInvalidConversionSpecifier(unsigned argIndex,
   2567                                                      SourceLocation Loc,
   2568                                                      const char *startSpec,
   2569                                                      unsigned specifierLen,
   2570                                                      const char *csStart,
   2571                                                      unsigned csLen) {
   2572 
   2573   bool keepGoing = true;
   2574   if (argIndex < NumDataArgs) {
   2575     // Consider the argument coverered, even though the specifier doesn't
   2576     // make sense.
   2577     CoveredArgs.set(argIndex);
   2578   }
   2579   else {
   2580     // If argIndex exceeds the number of data arguments we
   2581     // don't issue a warning because that is just a cascade of warnings (and
   2582     // they may have intended '%%' anyway). We don't want to continue processing
   2583     // the format string after this point, however, as we will like just get
   2584     // gibberish when trying to match arguments.
   2585     keepGoing = false;
   2586   }
   2587 
   2588   EmitFormatDiagnostic(S.PDiag(diag::warn_format_invalid_conversion)
   2589                          << StringRef(csStart, csLen),
   2590                        Loc, /*IsStringLocation*/true,
   2591                        getSpecifierRange(startSpec, specifierLen));
   2592 
   2593   return keepGoing;
   2594 }
   2595 
   2596 void
   2597 CheckFormatHandler::HandlePositionalNonpositionalArgs(SourceLocation Loc,
   2598                                                       const char *startSpec,
   2599                                                       unsigned specifierLen) {
   2600   EmitFormatDiagnostic(
   2601     S.PDiag(diag::warn_format_mix_positional_nonpositional_args),
   2602     Loc, /*isStringLoc*/true, getSpecifierRange(startSpec, specifierLen));
   2603 }
   2604 
   2605 bool
   2606 CheckFormatHandler::CheckNumArgs(
   2607   const analyze_format_string::FormatSpecifier &FS,
   2608   const analyze_format_string::ConversionSpecifier &CS,
   2609   const char *startSpecifier, unsigned specifierLen, unsigned argIndex) {
   2610 
   2611   if (argIndex >= NumDataArgs) {
   2612     PartialDiagnostic PDiag = FS.usesPositionalArg()
   2613       ? (S.PDiag(diag::warn_printf_positional_arg_exceeds_data_args)
   2614            << (argIndex+1) << NumDataArgs)
   2615       : S.PDiag(diag::warn_printf_insufficient_data_args);
   2616     EmitFormatDiagnostic(
   2617       PDiag, getLocationOfByte(CS.getStart()), /*IsStringLocation*/true,
   2618       getSpecifierRange(startSpecifier, specifierLen));
   2619     return false;
   2620   }
   2621   return true;
   2622 }
   2623 
   2624 template<typename Range>
   2625 void CheckFormatHandler::EmitFormatDiagnostic(PartialDiagnostic PDiag,
   2626                                               SourceLocation Loc,
   2627                                               bool IsStringLocation,
   2628                                               Range StringRange,
   2629                                               ArrayRef<FixItHint> FixIt) {
   2630   EmitFormatDiagnostic(S, inFunctionCall, Args[FormatIdx], PDiag,
   2631                        Loc, IsStringLocation, StringRange, FixIt);
   2632 }
   2633 
   2634 /// \brief If the format string is not within the funcion call, emit a note
   2635 /// so that the function call and string are in diagnostic messages.
   2636 ///
   2637 /// \param InFunctionCall if true, the format string is within the function
   2638 /// call and only one diagnostic message will be produced.  Otherwise, an
   2639 /// extra note will be emitted pointing to location of the format string.
   2640 ///
   2641 /// \param ArgumentExpr the expression that is passed as the format string
   2642 /// argument in the function call.  Used for getting locations when two
   2643 /// diagnostics are emitted.
   2644 ///
   2645 /// \param PDiag the callee should already have provided any strings for the
   2646 /// diagnostic message.  This function only adds locations and fixits
   2647 /// to diagnostics.
   2648 ///
   2649 /// \param Loc primary location for diagnostic.  If two diagnostics are
   2650 /// required, one will be at Loc and a new SourceLocation will be created for
   2651 /// the other one.
   2652 ///
   2653 /// \param IsStringLocation if true, Loc points to the format string should be
   2654 /// used for the note.  Otherwise, Loc points to the argument list and will
   2655 /// be used with PDiag.
   2656 ///
   2657 /// \param StringRange some or all of the string to highlight.  This is
   2658 /// templated so it can accept either a CharSourceRange or a SourceRange.
   2659 ///
   2660 /// \param FixIt optional fix it hint for the format string.
   2661 template<typename Range>
   2662 void CheckFormatHandler::EmitFormatDiagnostic(Sema &S, bool InFunctionCall,
   2663                                               const Expr *ArgumentExpr,
   2664                                               PartialDiagnostic PDiag,
   2665                                               SourceLocation Loc,
   2666                                               bool IsStringLocation,
   2667                                               Range StringRange,
   2668                                               ArrayRef<FixItHint> FixIt) {
   2669   if (InFunctionCall) {
   2670     const Sema::SemaDiagnosticBuilder &D = S.Diag(Loc, PDiag);
   2671     D << StringRange;
   2672     for (ArrayRef<FixItHint>::iterator I = FixIt.begin(), E = FixIt.end();
   2673          I != E; ++I) {
   2674       D << *I;
   2675     }
   2676   } else {
   2677     S.Diag(IsStringLocation ? ArgumentExpr->getExprLoc() : Loc, PDiag)
   2678       << ArgumentExpr->getSourceRange();
   2679 
   2680     const Sema::SemaDiagnosticBuilder &Note =
   2681       S.Diag(IsStringLocation ? Loc : StringRange.getBegin(),
   2682              diag::note_format_string_defined);
   2683 
   2684     Note << StringRange;
   2685     for (ArrayRef<FixItHint>::iterator I = FixIt.begin(), E = FixIt.end();
   2686          I != E; ++I) {
   2687       Note << *I;
   2688     }
   2689   }
   2690 }
   2691 
   2692 //===--- CHECK: Printf format string checking ------------------------------===//
   2693 
   2694 namespace {
   2695 class CheckPrintfHandler : public CheckFormatHandler {
   2696   bool ObjCContext;
   2697 public:
   2698   CheckPrintfHandler(Sema &s, const StringLiteral *fexpr,
   2699                      const Expr *origFormatExpr, unsigned firstDataArg,
   2700                      unsigned numDataArgs, bool isObjC,
   2701                      const char *beg, bool hasVAListArg,
   2702                      ArrayRef<const Expr *> Args,
   2703                      unsigned formatIdx, bool inFunctionCall,
   2704                      Sema::VariadicCallType CallType,
   2705                      llvm::SmallBitVector &CheckedVarArgs)
   2706     : CheckFormatHandler(s, fexpr, origFormatExpr, firstDataArg,
   2707                          numDataArgs, beg, hasVAListArg, Args,
   2708                          formatIdx, inFunctionCall, CallType, CheckedVarArgs),
   2709       ObjCContext(isObjC)
   2710   {}
   2711 
   2712 
   2713   bool HandleInvalidPrintfConversionSpecifier(
   2714                                       const analyze_printf::PrintfSpecifier &FS,
   2715                                       const char *startSpecifier,
   2716                                       unsigned specifierLen) override;
   2717 
   2718   bool HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier &FS,
   2719                              const char *startSpecifier,
   2720                              unsigned specifierLen) override;
   2721   bool checkFormatExpr(const analyze_printf::PrintfSpecifier &FS,
   2722                        const char *StartSpecifier,
   2723                        unsigned SpecifierLen,
   2724                        const Expr *E);
   2725 
   2726   bool HandleAmount(const analyze_format_string::OptionalAmount &Amt, unsigned k,
   2727                     const char *startSpecifier, unsigned specifierLen);
   2728   void HandleInvalidAmount(const analyze_printf::PrintfSpecifier &FS,
   2729                            const analyze_printf::OptionalAmount &Amt,
   2730                            unsigned type,
   2731                            const char *startSpecifier, unsigned specifierLen);
   2732   void HandleFlag(const analyze_printf::PrintfSpecifier &FS,
   2733                   const analyze_printf::OptionalFlag &flag,
   2734                   const char *startSpecifier, unsigned specifierLen);
   2735   void HandleIgnoredFlag(const analyze_printf::PrintfSpecifier &FS,
   2736                          const analyze_printf::OptionalFlag &ignoredFlag,
   2737                          const analyze_printf::OptionalFlag &flag,
   2738                          const char *startSpecifier, unsigned specifierLen);
   2739   bool checkForCStrMembers(const analyze_printf::ArgType &AT,
   2740                            const Expr *E);
   2741 
   2742 };
   2743 }
   2744 
   2745 bool CheckPrintfHandler::HandleInvalidPrintfConversionSpecifier(
   2746                                       const analyze_printf::PrintfSpecifier &FS,
   2747                                       const char *startSpecifier,
   2748                                       unsigned specifierLen) {
   2749   const analyze_printf::PrintfConversionSpecifier &CS =
   2750     FS.getConversionSpecifier();
   2751 
   2752   return HandleInvalidConversionSpecifier(FS.getArgIndex(),
   2753                                           getLocationOfByte(CS.getStart()),
   2754                                           startSpecifier, specifierLen,
   2755                                           CS.getStart(), CS.getLength());
   2756 }
   2757 
   2758 bool CheckPrintfHandler::HandleAmount(
   2759                                const analyze_format_string::OptionalAmount &Amt,
   2760                                unsigned k, const char *startSpecifier,
   2761                                unsigned specifierLen) {
   2762 
   2763   if (Amt.hasDataArgument()) {
   2764     if (!HasVAListArg) {
   2765       unsigned argIndex = Amt.getArgIndex();
   2766       if (argIndex >= NumDataArgs) {
   2767         EmitFormatDiagnostic(S.PDiag(diag::warn_printf_asterisk_missing_arg)
   2768                                << k,
   2769                              getLocationOfByte(Amt.getStart()),
   2770                              /*IsStringLocation*/true,
   2771                              getSpecifierRange(startSpecifier, specifierLen));
   2772         // Don't do any more checking.  We will just emit
   2773         // spurious errors.
   2774         return false;
   2775       }
   2776 
   2777       // Type check the data argument.  It should be an 'int'.
   2778       // Although not in conformance with C99, we also allow the argument to be
   2779       // an 'unsigned int' as that is a reasonably safe case.  GCC also
   2780       // doesn't emit a warning for that case.
   2781       CoveredArgs.set(argIndex);
   2782       const Expr *Arg = getDataArg(argIndex);
   2783       if (!Arg)
   2784         return false;
   2785 
   2786       QualType T = Arg->getType();
   2787 
   2788       const analyze_printf::ArgType &AT = Amt.getArgType(S.Context);
   2789       assert(AT.isValid());
   2790 
   2791       if (!AT.matchesType(S.Context, T)) {
   2792         EmitFormatDiagnostic(S.PDiag(diag::warn_printf_asterisk_wrong_type)
   2793                                << k << AT.getRepresentativeTypeName(S.Context)
   2794                                << T << Arg->getSourceRange(),
   2795                              getLocationOfByte(Amt.getStart()),
   2796                              /*IsStringLocation*/true,
   2797                              getSpecifierRange(startSpecifier, specifierLen));
   2798         // Don't do any more checking.  We will just emit
   2799         // spurious errors.
   2800         return false;
   2801       }
   2802     }
   2803   }
   2804   return true;
   2805 }
   2806 
   2807 void CheckPrintfHandler::HandleInvalidAmount(
   2808                                       const analyze_printf::PrintfSpecifier &FS,
   2809                                       const analyze_printf::OptionalAmount &Amt,
   2810                                       unsigned type,
   2811                                       const char *startSpecifier,
   2812                                       unsigned specifierLen) {
   2813   const analyze_printf::PrintfConversionSpecifier &CS =
   2814     FS.getConversionSpecifier();
   2815 
   2816   FixItHint fixit =
   2817     Amt.getHowSpecified() == analyze_printf::OptionalAmount::Constant
   2818       ? FixItHint::CreateRemoval(getSpecifierRange(Amt.getStart(),
   2819                                  Amt.getConstantLength()))
   2820       : FixItHint();
   2821 
   2822   EmitFormatDiagnostic(S.PDiag(diag::warn_printf_nonsensical_optional_amount)
   2823                          << type << CS.toString(),
   2824                        getLocationOfByte(Amt.getStart()),
   2825                        /*IsStringLocation*/true,
   2826                        getSpecifierRange(startSpecifier, specifierLen),
   2827                        fixit);
   2828 }
   2829 
   2830 void CheckPrintfHandler::HandleFlag(const analyze_printf::PrintfSpecifier &FS,
   2831                                     const analyze_printf::OptionalFlag &flag,
   2832                                     const char *startSpecifier,
   2833                                     unsigned specifierLen) {
   2834   // Warn about pointless flag with a fixit removal.
   2835   const analyze_printf::PrintfConversionSpecifier &CS =
   2836     FS.getConversionSpecifier();
   2837   EmitFormatDiagnostic(S.PDiag(diag::warn_printf_nonsensical_flag)
   2838                          << flag.toString() << CS.toString(),
   2839                        getLocationOfByte(flag.getPosition()),
   2840                        /*IsStringLocation*/true,
   2841                        getSpecifierRange(startSpecifier, specifierLen),
   2842                        FixItHint::CreateRemoval(
   2843                          getSpecifierRange(flag.getPosition(), 1)));
   2844 }
   2845 
   2846 void CheckPrintfHandler::HandleIgnoredFlag(
   2847                                 const analyze_printf::PrintfSpecifier &FS,
   2848                                 const analyze_printf::OptionalFlag &ignoredFlag,
   2849                                 const analyze_printf::OptionalFlag &flag,
   2850                                 const char *startSpecifier,
   2851                                 unsigned specifierLen) {
   2852   // Warn about ignored flag with a fixit removal.
   2853   EmitFormatDiagnostic(S.PDiag(diag::warn_printf_ignored_flag)
   2854                          << ignoredFlag.toString() << flag.toString(),
   2855                        getLocationOfByte(ignoredFlag.getPosition()),
   2856                        /*IsStringLocation*/true,
   2857                        getSpecifierRange(startSpecifier, specifierLen),
   2858                        FixItHint::CreateRemoval(
   2859                          getSpecifierRange(ignoredFlag.getPosition(), 1)));
   2860 }
   2861 
   2862 // Determines if the specified is a C++ class or struct containing
   2863 // a member with the specified name and kind (e.g. a CXXMethodDecl named
   2864 // "c_str()").
   2865 template<typename MemberKind>
   2866 static llvm::SmallPtrSet<MemberKind*, 1>
   2867 CXXRecordMembersNamed(StringRef Name, Sema &S, QualType Ty) {
   2868   const RecordType *RT = Ty->getAs<RecordType>();
   2869   llvm::SmallPtrSet<MemberKind*, 1> Results;
   2870 
   2871   if (!RT)
   2872     return Results;
   2873   const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl());
   2874   if (!RD || !RD->getDefinition())
   2875     return Results;
   2876 
   2877   LookupResult R(S, &S.Context.Idents.get(Name), SourceLocation(),
   2878                  Sema::LookupMemberName);
   2879   R.suppressDiagnostics();
   2880 
   2881   // We just need to include all members of the right kind turned up by the
   2882   // filter, at this point.
   2883   if (S.LookupQualifiedName(R, RT->getDecl()))
   2884     for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) {
   2885       NamedDecl *decl = (*I)->getUnderlyingDecl();
   2886       if (MemberKind *FK = dyn_cast<MemberKind>(decl))
   2887         Results.insert(FK);
   2888     }
   2889   return Results;
   2890 }
   2891 
   2892 /// Check if we could call '.c_str()' on an object.
   2893 ///
   2894 /// FIXME: This returns the wrong results in some cases (if cv-qualifiers don't
   2895 /// allow the call, or if it would be ambiguous).
   2896 bool Sema::hasCStrMethod(const Expr *E) {
   2897   typedef llvm::SmallPtrSet<CXXMethodDecl*, 1> MethodSet;
   2898   MethodSet Results =
   2899       CXXRecordMembersNamed<CXXMethodDecl>("c_str", *this, E->getType());
   2900   for (MethodSet::iterator MI = Results.begin(), ME = Results.end();
   2901        MI != ME; ++MI)
   2902     if ((*MI)->getMinRequiredArguments() == 0)
   2903       return true;
   2904   return false;
   2905 }
   2906 
   2907 // Check if a (w)string was passed when a (w)char* was needed, and offer a
   2908 // better diagnostic if so. AT is assumed to be valid.
   2909 // Returns true when a c_str() conversion method is found.
   2910 bool CheckPrintfHandler::checkForCStrMembers(
   2911     const analyze_printf::ArgType &AT, const Expr *E) {
   2912   typedef llvm::SmallPtrSet<CXXMethodDecl*, 1> MethodSet;
   2913 
   2914   MethodSet Results =
   2915       CXXRecordMembersNamed<CXXMethodDecl>("c_str", S, E->getType());
   2916 
   2917   for (MethodSet::iterator MI = Results.begin(), ME = Results.end();
   2918        MI != ME; ++MI) {
   2919     const CXXMethodDecl *Method = *MI;
   2920     if (Method->getMinRequiredArguments() == 0 &&
   2921         AT.matchesType(S.Context, Method->getReturnType())) {
   2922       // FIXME: Suggest parens if the expression needs them.
   2923       SourceLocation EndLoc = S.getLocForEndOfToken(E->getLocEnd());
   2924       S.Diag(E->getLocStart(), diag::note_printf_c_str)
   2925           << "c_str()"
   2926           << FixItHint::CreateInsertion(EndLoc, ".c_str()");
   2927       return true;
   2928     }
   2929   }
   2930 
   2931   return false;
   2932 }
   2933 
   2934 bool
   2935 CheckPrintfHandler::HandlePrintfSpecifier(const analyze_printf::PrintfSpecifier
   2936                                             &FS,
   2937                                           const char *startSpecifier,
   2938                                           unsigned specifierLen) {
   2939 
   2940   using namespace analyze_format_string;
   2941   using namespace analyze_printf;
   2942   const PrintfConversionSpecifier &CS = FS.getConversionSpecifier();
   2943 
   2944   if (FS.consumesDataArgument()) {
   2945     if (atFirstArg) {
   2946         atFirstArg = false;
   2947         usesPositionalArgs = FS.usesPositionalArg();
   2948     }
   2949     else if (usesPositionalArgs != FS.usesPositionalArg()) {
   2950       HandlePositionalNonpositionalArgs(getLocationOfByte(CS.getStart()),
   2951                                         startSpecifier, specifierLen);
   2952       return false;
   2953     }
   2954   }
   2955 
   2956   // First check if the field width, precision, and conversion specifier
   2957   // have matching data arguments.
   2958   if (!HandleAmount(FS.getFieldWidth(), /* field width */ 0,
   2959                     startSpecifier, specifierLen)) {
   2960     return false;
   2961   }
   2962 
   2963   if (!HandleAmount(FS.getPrecision(), /* precision */ 1,
   2964                     startSpecifier, specifierLen)) {
   2965     return false;
   2966   }
   2967 
   2968   if (!CS.consumesDataArgument()) {
   2969     // FIXME: Technically specifying a precision or field width here
   2970     // makes no sense.  Worth issuing a warning at some point.
   2971     return true;
   2972   }
   2973 
   2974   // Consume the argument.
   2975   unsigned argIndex = FS.getArgIndex();
   2976   if (argIndex < NumDataArgs) {
   2977     // The check to see if the argIndex is valid will come later.
   2978     // We set the bit here because we may exit early from this
   2979     // function if we encounter some other error.
   2980     CoveredArgs.set(argIndex);
   2981   }
   2982 
   2983   // Check for using an Objective-C specific conversion specifier
   2984   // in a non-ObjC literal.
   2985   if (!ObjCContext && CS.isObjCArg()) {
   2986     return HandleInvalidPrintfConversionSpecifier(FS, startSpecifier,
   2987                                                   specifierLen);
   2988   }
   2989 
   2990   // Check for invalid use of field width
   2991   if (!FS.hasValidFieldWidth()) {
   2992     HandleInvalidAmount(FS, FS.getFieldWidth(), /* field width */ 0,
   2993         startSpecifier, specifierLen);
   2994   }
   2995 
   2996   // Check for invalid use of precision
   2997   if (!FS.hasValidPrecision()) {
   2998     HandleInvalidAmount(FS, FS.getPrecision(), /* precision */ 1,
   2999         startSpecifier, specifierLen);
   3000   }
   3001 
   3002   // Check each flag does not conflict with any other component.
   3003   if (!FS.hasValidThousandsGroupingPrefix())
   3004     HandleFlag(FS, FS.hasThousandsGrouping(), startSpecifier, specifierLen);
   3005   if (!FS.hasValidLeadingZeros())
   3006     HandleFlag(FS, FS.hasLeadingZeros(), startSpecifier, specifierLen);
   3007   if (!FS.hasValidPlusPrefix())
   3008     HandleFlag(FS, FS.hasPlusPrefix(), startSpecifier, specifierLen);
   3009   if (!FS.hasValidSpacePrefix())
   3010     HandleFlag(FS, FS.hasSpacePrefix(), startSpecifier, specifierLen);
   3011   if (!FS.hasValidAlternativeForm())
   3012     HandleFlag(FS, FS.hasAlternativeForm(), startSpecifier, specifierLen);
   3013   if (!FS.hasValidLeftJustified())
   3014     HandleFlag(FS, FS.isLeftJustified(), startSpecifier, specifierLen);
   3015 
   3016   // Check that flags are not ignored by another flag
   3017   if (FS.hasSpacePrefix() && FS.hasPlusPrefix()) // ' ' ignored by '+'
   3018     HandleIgnoredFlag(FS, FS.hasSpacePrefix(), FS.hasPlusPrefix(),
   3019         startSpecifier, specifierLen);
   3020   if (FS.hasLeadingZeros() && FS.isLeftJustified()) // '0' ignored by '-'
   3021     HandleIgnoredFlag(FS, FS.hasLeadingZeros(), FS.isLeftJustified(),
   3022             startSpecifier, specifierLen);
   3023 
   3024   // Check the length modifier is valid with the given conversion specifier.
   3025   if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo()))
   3026     HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen,
   3027                                 diag::warn_format_nonsensical_length);
   3028   else if (!FS.hasStandardLengthModifier())
   3029     HandleNonStandardLengthModifier(FS, startSpecifier, specifierLen);
   3030   else if (!FS.hasStandardLengthConversionCombination())
   3031     HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen,
   3032                                 diag::warn_format_non_standard_conversion_spec);
   3033 
   3034   if (!FS.hasStandardConversionSpecifier(S.getLangOpts()))
   3035     HandleNonStandardConversionSpecifier(CS, startSpecifier, specifierLen);
   3036 
   3037   // The remaining checks depend on the data arguments.
   3038   if (HasVAListArg)
   3039     return true;
   3040 
   3041   if (!CheckNumArgs(FS, CS, startSpecifier, specifierLen, argIndex))
   3042     return false;
   3043 
   3044   const Expr *Arg = getDataArg(argIndex);
   3045   if (!Arg)
   3046     return true;
   3047 
   3048   return checkFormatExpr(FS, startSpecifier, specifierLen, Arg);
   3049 }
   3050 
   3051 static bool requiresParensToAddCast(const Expr *E) {
   3052   // FIXME: We should have a general way to reason about operator
   3053   // precedence and whether parens are actually needed here.
   3054   // Take care of a few common cases where they aren't.
   3055   const Expr *Inside = E->IgnoreImpCasts();
   3056   if (const PseudoObjectExpr *POE = dyn_cast<PseudoObjectExpr>(Inside))
   3057     Inside = POE->getSyntacticForm()->IgnoreImpCasts();
   3058 
   3059   switch (Inside->getStmtClass()) {
   3060   case Stmt::ArraySubscriptExprClass:
   3061   case Stmt::CallExprClass:
   3062   case Stmt::CharacterLiteralClass:
   3063   case Stmt::CXXBoolLiteralExprClass:
   3064   case Stmt::DeclRefExprClass:
   3065   case Stmt::FloatingLiteralClass:
   3066   case Stmt::IntegerLiteralClass:
   3067   case Stmt::MemberExprClass:
   3068   case Stmt::ObjCArrayLiteralClass:
   3069   case Stmt::ObjCBoolLiteralExprClass:
   3070   case Stmt::ObjCBoxedExprClass:
   3071   case Stmt::ObjCDictionaryLiteralClass:
   3072   case Stmt::ObjCEncodeExprClass:
   3073   case Stmt::ObjCIvarRefExprClass:
   3074   case Stmt::ObjCMessageExprClass:
   3075   case Stmt::ObjCPropertyRefExprClass:
   3076   case Stmt::ObjCStringLiteralClass:
   3077   case Stmt::ObjCSubscriptRefExprClass:
   3078   case Stmt::ParenExprClass:
   3079   case Stmt::StringLiteralClass:
   3080   case Stmt::UnaryOperatorClass:
   3081     return false;
   3082   default:
   3083     return true;
   3084   }
   3085 }
   3086 
   3087 bool
   3088 CheckPrintfHandler::checkFormatExpr(const analyze_printf::PrintfSpecifier &FS,
   3089                                     const char *StartSpecifier,
   3090                                     unsigned SpecifierLen,
   3091                                     const Expr *E) {
   3092   using namespace analyze_format_string;
   3093   using namespace analyze_printf;
   3094   // Now type check the data expression that matches the
   3095   // format specifier.
   3096   const analyze_printf::ArgType &AT = FS.getArgType(S.Context,
   3097                                                     ObjCContext);
   3098   if (!AT.isValid())
   3099     return true;
   3100 
   3101   QualType ExprTy = E->getType();
   3102   while (const TypeOfExprType *TET = dyn_cast<TypeOfExprType>(ExprTy)) {
   3103     ExprTy = TET->getUnderlyingExpr()->getType();
   3104   }
   3105 
   3106   if (AT.matchesType(S.Context, ExprTy))
   3107     return true;
   3108 
   3109   // Look through argument promotions for our error message's reported type.
   3110   // This includes the integral and floating promotions, but excludes array
   3111   // and function pointer decay; seeing that an argument intended to be a
   3112   // string has type 'char [6]' is probably more confusing than 'char *'.
   3113   if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
   3114     if (ICE->getCastKind() == CK_IntegralCast ||
   3115         ICE->getCastKind() == CK_FloatingCast) {
   3116       E = ICE->getSubExpr();
   3117       ExprTy = E->getType();
   3118 
   3119       // Check if we didn't match because of an implicit cast from a 'char'
   3120       // or 'short' to an 'int'.  This is done because printf is a varargs
   3121       // function.
   3122       if (ICE->getType() == S.Context.IntTy ||
   3123           ICE->getType() == S.Context.UnsignedIntTy) {
   3124         // All further checking is done on the subexpression.
   3125         if (AT.matchesType(S.Context, ExprTy))
   3126           return true;
   3127       }
   3128     }
   3129   } else if (const CharacterLiteral *CL = dyn_cast<CharacterLiteral>(E)) {
   3130     // Special case for 'a', which has type 'int' in C.
   3131     // Note, however, that we do /not/ want to treat multibyte constants like
   3132     // 'MooV' as characters! This form is deprecated but still exists.
   3133     if (ExprTy == S.Context.IntTy)
   3134       if (llvm::isUIntN(S.Context.getCharWidth(), CL->getValue()))
   3135         ExprTy = S.Context.CharTy;
   3136   }
   3137 
   3138   // Look through enums to their underlying type.
   3139   bool IsEnum = false;
   3140   if (auto EnumTy = ExprTy->getAs<EnumType>()) {
   3141     ExprTy = EnumTy->getDecl()->getIntegerType();
   3142     IsEnum = true;
   3143   }
   3144 
   3145   // %C in an Objective-C context prints a unichar, not a wchar_t.
   3146   // If the argument is an integer of some kind, believe the %C and suggest
   3147   // a cast instead of changing the conversion specifier.
   3148   QualType IntendedTy = ExprTy;
   3149   if (ObjCContext &&
   3150       FS.getConversionSpecifier().getKind() == ConversionSpecifier::CArg) {
   3151     if (ExprTy->isIntegralOrUnscopedEnumerationType() &&
   3152         !ExprTy->isCharType()) {
   3153       // 'unichar' is defined as a typedef of unsigned short, but we should
   3154       // prefer using the typedef if it is visible.
   3155       IntendedTy = S.Context.UnsignedShortTy;
   3156 
   3157       // While we are here, check if the value is an IntegerLiteral that happens
   3158       // to be within the valid range.
   3159       if (const IntegerLiteral *IL = dyn_cast<IntegerLiteral>(E)) {
   3160         const llvm::APInt &V = IL->getValue();
   3161         if (V.getActiveBits() <= S.Context.getTypeSize(IntendedTy))
   3162           return true;
   3163       }
   3164 
   3165       LookupResult Result(S, &S.Context.Idents.get("unichar"), E->getLocStart(),
   3166                           Sema::LookupOrdinaryName);
   3167       if (S.LookupName(Result, S.getCurScope())) {
   3168         NamedDecl *ND = Result.getFoundDecl();
   3169         if (TypedefNameDecl *TD = dyn_cast<TypedefNameDecl>(ND))
   3170           if (TD->getUnderlyingType() == IntendedTy)
   3171             IntendedTy = S.Context.getTypedefType(TD);
   3172       }
   3173     }
   3174   }
   3175 
   3176   // Special-case some of Darwin's platform-independence types by suggesting
   3177   // casts to primitive types that are known to be large enough.
   3178   bool ShouldNotPrintDirectly = false;
   3179   if (S.Context.getTargetInfo().getTriple().isOSDarwin()) {
   3180     // Use a 'while' to peel off layers of typedefs.
   3181     QualType TyTy = IntendedTy;
   3182     while (const TypedefType *UserTy = TyTy->getAs<TypedefType>()) {
   3183       StringRef Name = UserTy->getDecl()->getName();
   3184       QualType CastTy = llvm::StringSwitch<QualType>(Name)
   3185         .Case("NSInteger", S.Context.LongTy)
   3186         .Case("NSUInteger", S.Context.UnsignedLongTy)
   3187         .Case("SInt32", S.Context.IntTy)
   3188         .Case("UInt32", S.Context.UnsignedIntTy)
   3189         .Default(QualType());
   3190 
   3191       if (!CastTy.isNull()) {
   3192         ShouldNotPrintDirectly = true;
   3193         IntendedTy = CastTy;
   3194         break;
   3195       }
   3196       TyTy = UserTy->desugar();
   3197     }
   3198   }
   3199 
   3200   // We may be able to offer a FixItHint if it is a supported type.
   3201   PrintfSpecifier fixedFS = FS;
   3202   bool success = fixedFS.fixType(IntendedTy, S.getLangOpts(),
   3203                                  S.Context, ObjCContext);
   3204 
   3205   if (success) {
   3206     // Get the fix string from the fixed format specifier
   3207     SmallString<16> buf;
   3208     llvm::raw_svector_ostream os(buf);
   3209     fixedFS.toString(os);
   3210 
   3211     CharSourceRange SpecRange = getSpecifierRange(StartSpecifier, SpecifierLen);
   3212 
   3213     if (IntendedTy == ExprTy) {
   3214       // In this case, the specifier is wrong and should be changed to match
   3215       // the argument.
   3216       EmitFormatDiagnostic(
   3217         S.PDiag(diag::warn_format_conversion_argument_type_mismatch)
   3218           << AT.getRepresentativeTypeName(S.Context) << IntendedTy << IsEnum
   3219           << E->getSourceRange(),
   3220         E->getLocStart(),
   3221         /*IsStringLocation*/false,
   3222         SpecRange,
   3223         FixItHint::CreateReplacement(SpecRange, os.str()));
   3224 
   3225     } else {
   3226       // The canonical type for formatting this value is different from the
   3227       // actual type of the expression. (This occurs, for example, with Darwin's
   3228       // NSInteger on 32-bit platforms, where it is typedef'd as 'int', but
   3229       // should be printed as 'long' for 64-bit compatibility.)
   3230       // Rather than emitting a normal format/argument mismatch, we want to
   3231       // add a cast to the recommended type (and correct the format string
   3232       // if necessary).
   3233       SmallString<16> CastBuf;
   3234       llvm::raw_svector_ostream CastFix(CastBuf);
   3235       CastFix << "(";
   3236       IntendedTy.print(CastFix, S.Context.getPrintingPolicy());
   3237       CastFix << ")";
   3238 
   3239       SmallVector<FixItHint,4> Hints;
   3240       if (!AT.matchesType(S.Context, IntendedTy))
   3241         Hints.push_back(FixItHint::CreateReplacement(SpecRange, os.str()));
   3242 
   3243       if (const CStyleCastExpr *CCast = dyn_cast<CStyleCastExpr>(E)) {
   3244         // If there's already a cast present, just replace it.
   3245         SourceRange CastRange(CCast->getLParenLoc(), CCast->getRParenLoc());
   3246         Hints.push_back(FixItHint::CreateReplacement(CastRange, CastFix.str()));
   3247 
   3248       } else if (!requiresParensToAddCast(E)) {
   3249         // If the expression has high enough precedence,
   3250         // just write the C-style cast.
   3251         Hints.push_back(FixItHint::CreateInsertion(E->getLocStart(),
   3252                                                    CastFix.str()));
   3253       } else {
   3254         // Otherwise, add parens around the expression as well as the cast.
   3255         CastFix << "(";
   3256         Hints.push_back(FixItHint::CreateInsertion(E->getLocStart(),
   3257                                                    CastFix.str()));
   3258 
   3259         SourceLocation After = S.getLocForEndOfToken(E->getLocEnd());
   3260         Hints.push_back(FixItHint::CreateInsertion(After, ")"));
   3261       }
   3262 
   3263       if (ShouldNotPrintDirectly) {
   3264         // The expression has a type that should not be printed directly.
   3265         // We extract the name from the typedef because we don't want to show
   3266         // the underlying type in the diagnostic.
   3267         StringRef Name = cast<TypedefType>(ExprTy)->getDecl()->getName();
   3268 
   3269         EmitFormatDiagnostic(S.PDiag(diag::warn_format_argument_needs_cast)
   3270                                << Name << IntendedTy << IsEnum
   3271                                << E->getSourceRange(),
   3272                              E->getLocStart(), /*IsStringLocation=*/false,
   3273                              SpecRange, Hints);
   3274       } else {
   3275         // In this case, the expression could be printed using a different
   3276         // specifier, but we've decided that the specifier is probably correct
   3277         // and we should cast instead. Just use the normal warning message.
   3278         EmitFormatDiagnostic(
   3279           S.PDiag(diag::warn_format_conversion_argument_type_mismatch)
   3280             << AT.getRepresentativeTypeName(S.Context) << ExprTy << IsEnum
   3281             << E->getSourceRange(),
   3282           E->getLocStart(), /*IsStringLocation*/false,
   3283           SpecRange, Hints);
   3284       }
   3285     }
   3286   } else {
   3287     const CharSourceRange &CSR = getSpecifierRange(StartSpecifier,
   3288                                                    SpecifierLen);
   3289     // Since the warning for passing non-POD types to variadic functions
   3290     // was deferred until now, we emit a warning for non-POD
   3291     // arguments here.
   3292     switch (S.isValidVarArgType(ExprTy)) {
   3293     case Sema::VAK_Valid:
   3294     case Sema::VAK_ValidInCXX11:
   3295       EmitFormatDiagnostic(
   3296         S.PDiag(diag::warn_format_conversion_argument_type_mismatch)
   3297           << AT.getRepresentativeTypeName(S.Context) << ExprTy << IsEnum
   3298           << CSR
   3299           << E->getSourceRange(),
   3300         E->getLocStart(), /*IsStringLocation*/false, CSR);
   3301       break;
   3302 
   3303     case Sema::VAK_Undefined:
   3304       EmitFormatDiagnostic(
   3305         S.PDiag(diag::warn_non_pod_vararg_with_format_string)
   3306           << S.getLangOpts().CPlusPlus11
   3307           << ExprTy
   3308           << CallType
   3309           << AT.getRepresentativeTypeName(S.Context)
   3310           << CSR
   3311           << E->getSourceRange(),
   3312         E->getLocStart(), /*IsStringLocation*/false, CSR);
   3313       checkForCStrMembers(AT, E);
   3314       break;
   3315 
   3316     case Sema::VAK_Invalid:
   3317       if (ExprTy->isObjCObjectType())
   3318         EmitFormatDiagnostic(
   3319           S.PDiag(diag::err_cannot_pass_objc_interface_to_vararg_format)
   3320             << S.getLangOpts().CPlusPlus11
   3321             << ExprTy
   3322             << CallType
   3323             << AT.getRepresentativeTypeName(S.Context)
   3324             << CSR
   3325             << E->getSourceRange(),
   3326           E->getLocStart(), /*IsStringLocation*/false, CSR);
   3327       else
   3328         // FIXME: If this is an initializer list, suggest removing the braces
   3329         // or inserting a cast to the target type.
   3330         S.Diag(E->getLocStart(), diag::err_cannot_pass_to_vararg_format)
   3331           << isa<InitListExpr>(E) << ExprTy << CallType
   3332           << AT.getRepresentativeTypeName(S.Context)
   3333           << E->getSourceRange();
   3334       break;
   3335     }
   3336 
   3337     assert(FirstDataArg + FS.getArgIndex() < CheckedVarArgs.size() &&
   3338            "format string specifier index out of range");
   3339     CheckedVarArgs[FirstDataArg + FS.getArgIndex()] = true;
   3340   }
   3341 
   3342   return true;
   3343 }
   3344 
   3345 //===--- CHECK: Scanf format string checking ------------------------------===//
   3346 
   3347 namespace {
   3348 class CheckScanfHandler : public CheckFormatHandler {
   3349 public:
   3350   CheckScanfHandler(Sema &s, const StringLiteral *fexpr,
   3351                     const Expr *origFormatExpr, unsigned firstDataArg,
   3352                     unsigned numDataArgs, const char *beg, bool hasVAListArg,
   3353                     ArrayRef<const Expr *> Args,
   3354                     unsigned formatIdx, bool inFunctionCall,
   3355                     Sema::VariadicCallType CallType,
   3356                     llvm::SmallBitVector &CheckedVarArgs)
   3357     : CheckFormatHandler(s, fexpr, origFormatExpr, firstDataArg,
   3358                          numDataArgs, beg, hasVAListArg,
   3359                          Args, formatIdx, inFunctionCall, CallType,
   3360                          CheckedVarArgs)
   3361   {}
   3362 
   3363   bool HandleScanfSpecifier(const analyze_scanf::ScanfSpecifier &FS,
   3364                             const char *startSpecifier,
   3365                             unsigned specifierLen) override;
   3366 
   3367   bool HandleInvalidScanfConversionSpecifier(
   3368           const analyze_scanf::ScanfSpecifier &FS,
   3369           const char *startSpecifier,
   3370           unsigned specifierLen) override;
   3371 
   3372   void HandleIncompleteScanList(const char *start, const char *end) override;
   3373 };
   3374 }
   3375 
   3376 void CheckScanfHandler::HandleIncompleteScanList(const char *start,
   3377                                                  const char *end) {
   3378   EmitFormatDiagnostic(S.PDiag(diag::warn_scanf_scanlist_incomplete),
   3379                        getLocationOfByte(end), /*IsStringLocation*/true,
   3380                        getSpecifierRange(start, end - start));
   3381 }
   3382 
   3383 bool CheckScanfHandler::HandleInvalidScanfConversionSpecifier(
   3384                                         const analyze_scanf::ScanfSpecifier &FS,
   3385                                         const char *startSpecifier,
   3386                                         unsigned specifierLen) {
   3387 
   3388   const analyze_scanf::ScanfConversionSpecifier &CS =
   3389     FS.getConversionSpecifier();
   3390 
   3391   return HandleInvalidConversionSpecifier(FS.getArgIndex(),
   3392                                           getLocationOfByte(CS.getStart()),
   3393                                           startSpecifier, specifierLen,
   3394                                           CS.getStart(), CS.getLength());
   3395 }
   3396 
   3397 bool CheckScanfHandler::HandleScanfSpecifier(
   3398                                        const analyze_scanf::ScanfSpecifier &FS,
   3399                                        const char *startSpecifier,
   3400                                        unsigned specifierLen) {
   3401 
   3402   using namespace analyze_scanf;
   3403   using namespace analyze_format_string;
   3404 
   3405   const ScanfConversionSpecifier &CS = FS.getConversionSpecifier();
   3406 
   3407   // Handle case where '%' and '*' don't consume an argument.  These shouldn't
   3408   // be used to decide if we are using positional arguments consistently.
   3409   if (FS.consumesDataArgument()) {
   3410     if (atFirstArg) {
   3411       atFirstArg = false;
   3412       usesPositionalArgs = FS.usesPositionalArg();
   3413     }
   3414     else if (usesPositionalArgs != FS.usesPositionalArg()) {
   3415       HandlePositionalNonpositionalArgs(getLocationOfByte(CS.getStart()),
   3416                                         startSpecifier, specifierLen);
   3417       return false;
   3418     }
   3419   }
   3420 
   3421   // Check if the field with is non-zero.
   3422   const OptionalAmount &Amt = FS.getFieldWidth();
   3423   if (Amt.getHowSpecified() == OptionalAmount::Constant) {
   3424     if (Amt.getConstantAmount() == 0) {
   3425       const CharSourceRange &R = getSpecifierRange(Amt.getStart(),
   3426                                                    Amt.getConstantLength());
   3427       EmitFormatDiagnostic(S.PDiag(diag::warn_scanf_nonzero_width),
   3428                            getLocationOfByte(Amt.getStart()),
   3429                            /*IsStringLocation*/true, R,
   3430                            FixItHint::CreateRemoval(R));
   3431     }
   3432   }
   3433 
   3434   if (!FS.consumesDataArgument()) {
   3435     // FIXME: Technically specifying a precision or field width here
   3436     // makes no sense.  Worth issuing a warning at some point.
   3437     return true;
   3438   }
   3439 
   3440   // Consume the argument.
   3441   unsigned argIndex = FS.getArgIndex();
   3442   if (argIndex < NumDataArgs) {
   3443       // The check to see if the argIndex is valid will come later.
   3444       // We set the bit here because we may exit early from this
   3445       // function if we encounter some other error.
   3446     CoveredArgs.set(argIndex);
   3447   }
   3448 
   3449   // Check the length modifier is valid with the given conversion specifier.
   3450   if (!FS.hasValidLengthModifier(S.getASTContext().getTargetInfo()))
   3451     HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen,
   3452                                 diag::warn_format_nonsensical_length);
   3453   else if (!FS.hasStandardLengthModifier())
   3454     HandleNonStandardLengthModifier(FS, startSpecifier, specifierLen);
   3455   else if (!FS.hasStandardLengthConversionCombination())
   3456     HandleInvalidLengthModifier(FS, CS, startSpecifier, specifierLen,
   3457                                 diag::warn_format_non_standard_conversion_spec);
   3458 
   3459   if (!FS.hasStandardConversionSpecifier(S.getLangOpts()))
   3460     HandleNonStandardConversionSpecifier(CS, startSpecifier, specifierLen);
   3461 
   3462   // The remaining checks depend on the data arguments.
   3463   if (HasVAListArg)
   3464     return true;
   3465 
   3466   if (!CheckNumArgs(FS, CS, startSpecifier, specifierLen, argIndex))
   3467     return false;
   3468 
   3469   // Check that the argument type matches the format specifier.
   3470   const Expr *Ex = getDataArg(argIndex);
   3471   if (!Ex)
   3472     return true;
   3473 
   3474   const analyze_format_string::ArgType &AT = FS.getArgType(S.Context);
   3475   if (AT.isValid() && !AT.matchesType(S.Context, Ex->getType())) {
   3476     ScanfSpecifier fixedFS = FS;
   3477     bool success = fixedFS.fixType(Ex->getType(),
   3478                                    Ex->IgnoreImpCasts()->getType(),
   3479                                    S.getLangOpts(), S.Context);
   3480 
   3481     if (success) {
   3482       // Get the fix string from the fixed format specifier.
   3483       SmallString<128> buf;
   3484       llvm::raw_svector_ostream os(buf);
   3485       fixedFS.toString(os);
   3486 
   3487       EmitFormatDiagnostic(
   3488         S.PDiag(diag::warn_format_conversion_argument_type_mismatch)
   3489           << AT.getRepresentativeTypeName(S.Context) << Ex->getType() << false
   3490           << Ex->getSourceRange(),
   3491         Ex->getLocStart(),
   3492         /*IsStringLocation*/false,
   3493         getSpecifierRange(startSpecifier, specifierLen),
   3494         FixItHint::CreateReplacement(
   3495           getSpecifierRange(startSpecifier, specifierLen),
   3496           os.str()));
   3497     } else {
   3498       EmitFormatDiagnostic(
   3499         S.PDiag(diag::warn_format_conversion_argument_type_mismatch)
   3500           << AT.getRepresentativeTypeName(S.Context) << Ex->getType() << false
   3501           << Ex->getSourceRange(),
   3502         Ex->getLocStart(),
   3503         /*IsStringLocation*/false,
   3504         getSpecifierRange(startSpecifier, specifierLen));
   3505     }
   3506   }
   3507 
   3508   return true;
   3509 }
   3510 
   3511 void Sema::CheckFormatString(const StringLiteral *FExpr,
   3512                              const Expr *OrigFormatExpr,
   3513                              ArrayRef<const Expr *> Args,
   3514                              bool HasVAListArg, unsigned format_idx,
   3515                              unsigned firstDataArg, FormatStringType Type,
   3516                              bool inFunctionCall, VariadicCallType CallType,
   3517                              llvm::SmallBitVector &CheckedVarArgs) {
   3518 
   3519   // CHECK: is the format string a wide literal?
   3520   if (!FExpr->isAscii() && !FExpr->isUTF8()) {
   3521     CheckFormatHandler::EmitFormatDiagnostic(
   3522       *this, inFunctionCall, Args[format_idx],
   3523       PDiag(diag::warn_format_string_is_wide_literal), FExpr->getLocStart(),
   3524       /*IsStringLocation*/true, OrigFormatExpr->getSourceRange());
   3525     return;
   3526   }
   3527 
   3528   // Str - The format string.  NOTE: this is NOT null-terminated!
   3529   StringRef StrRef = FExpr->getString();
   3530   const char *Str = StrRef.data();
   3531   // Account for cases where the string literal is truncated in a declaration.
   3532   const ConstantArrayType *T = Context.getAsConstantArrayType(FExpr->getType());
   3533   assert(T && "String literal not of constant array type!");
   3534   size_t TypeSize = T->getSize().getZExtValue();
   3535   size_t StrLen = std::min(std::max(TypeSize, size_t(1)) - 1, StrRef.size());
   3536   const unsigned numDataArgs = Args.size() - firstDataArg;
   3537 
   3538   // Emit a warning if the string literal is truncated and does not contain an
   3539   // embedded null character.
   3540   if (TypeSize <= StrRef.size() &&
   3541       StrRef.substr(0, TypeSize).find('\0') == StringRef::npos) {
   3542     CheckFormatHandler::EmitFormatDiagnostic(
   3543         *this, inFunctionCall, Args[format_idx],
   3544         PDiag(diag::warn_printf_format_string_not_null_terminated),
   3545         FExpr->getLocStart(),
   3546         /*IsStringLocation=*/true, OrigFormatExpr->getSourceRange());
   3547     return;
   3548   }
   3549 
   3550   // CHECK: empty format string?
   3551   if (StrLen == 0 && numDataArgs > 0) {
   3552     CheckFormatHandler::EmitFormatDiagnostic(
   3553       *this, inFunctionCall, Args[format_idx],
   3554       PDiag(diag::warn_empty_format_string), FExpr->getLocStart(),
   3555       /*IsStringLocation*/true, OrigFormatExpr->getSourceRange());
   3556     return;
   3557   }
   3558 
   3559   if (Type == FST_Printf || Type == FST_NSString) {
   3560     CheckPrintfHandler H(*this, FExpr, OrigFormatExpr, firstDataArg,
   3561                          numDataArgs, (Type == FST_NSString),
   3562                          Str, HasVAListArg, Args, format_idx,
   3563                          inFunctionCall, CallType, CheckedVarArgs);
   3564 
   3565     if (!analyze_format_string::ParsePrintfString(H, Str, Str + StrLen,
   3566                                                   getLangOpts(),
   3567                                                   Context.getTargetInfo()))
   3568       H.DoneProcessing();
   3569   } else if (Type == FST_Scanf) {
   3570     CheckScanfHandler H(*this, FExpr, OrigFormatExpr, firstDataArg, numDataArgs,
   3571                         Str, HasVAListArg, Args, format_idx,
   3572                         inFunctionCall, CallType, CheckedVarArgs);
   3573 
   3574     if (!analyze_format_string::ParseScanfString(H, Str, Str + StrLen,
   3575                                                  getLangOpts(),
   3576                                                  Context.getTargetInfo()))
   3577       H.DoneProcessing();
   3578   } // TODO: handle other formats
   3579 }
   3580 
   3581 //===--- CHECK: Warn on use of wrong absolute value function. -------------===//
   3582 
   3583 // Returns the related absolute value function that is larger, of 0 if one
   3584 // does not exist.
   3585 static unsigned getLargerAbsoluteValueFunction(unsigned AbsFunction) {
   3586   switch (AbsFunction) {
   3587   default:
   3588     return 0;
   3589 
   3590   case Builtin::BI__builtin_abs:
   3591     return Builtin::BI__builtin_labs;
   3592   case Builtin::BI__builtin_labs:
   3593     return Builtin::BI__builtin_llabs;
   3594   case Builtin::BI__builtin_llabs:
   3595     return 0;
   3596 
   3597   case Builtin::BI__builtin_fabsf:
   3598     return Builtin::BI__builtin_fabs;
   3599   case Builtin::BI__builtin_fabs:
   3600     return Builtin::BI__builtin_fabsl;
   3601   case Builtin::BI__builtin_fabsl:
   3602     return 0;
   3603 
   3604   case Builtin::BI__builtin_cabsf:
   3605     return Builtin::BI__builtin_cabs;
   3606   case Builtin::BI__builtin_cabs:
   3607     return Builtin::BI__builtin_cabsl;
   3608   case Builtin::BI__builtin_cabsl:
   3609     return 0;
   3610 
   3611   case Builtin::BIabs:
   3612     return Builtin::BIlabs;
   3613   case Builtin::BIlabs:
   3614     return Builtin::BIllabs;
   3615   case Builtin::BIllabs:
   3616     return 0;
   3617 
   3618   case Builtin::BIfabsf:
   3619     return Builtin::BIfabs;
   3620   case Builtin::BIfabs:
   3621     return Builtin::BIfabsl;
   3622   case Builtin::BIfabsl:
   3623     return 0;
   3624 
   3625   case Builtin::BIcabsf:
   3626    return Builtin::BIcabs;
   3627   case Builtin::BIcabs:
   3628     return Builtin::BIcabsl;
   3629   case Builtin::BIcabsl:
   3630     return 0;
   3631   }
   3632 }
   3633 
   3634 // Returns the argument type of the absolute value function.
   3635 static QualType getAbsoluteValueArgumentType(ASTContext &Context,
   3636                                              unsigned AbsType) {
   3637   if (AbsType == 0)
   3638     return QualType();
   3639 
   3640   ASTContext::GetBuiltinTypeError Error = ASTContext::GE_None;
   3641   QualType BuiltinType = Context.GetBuiltinType(AbsType, Error);
   3642   if (Error != ASTContext::GE_None)
   3643     return QualType();
   3644 
   3645   const FunctionProtoType *FT = BuiltinType->getAs<FunctionProtoType>();
   3646   if (!FT)
   3647     return QualType();
   3648 
   3649   if (FT->getNumParams() != 1)
   3650     return QualType();
   3651 
   3652   return FT->getParamType(0);
   3653 }
   3654 
   3655 // Returns the best absolute value function, or zero, based on type and
   3656 // current absolute value function.
   3657 static unsigned getBestAbsFunction(ASTContext &Context, QualType ArgType,
   3658                                    unsigned AbsFunctionKind) {
   3659   unsigned BestKind = 0;
   3660   uint64_t ArgSize = Context.getTypeSize(ArgType);
   3661   for (unsigned Kind = AbsFunctionKind; Kind != 0;
   3662        Kind = getLargerAbsoluteValueFunction(Kind)) {
   3663     QualType ParamType = getAbsoluteValueArgumentType(Context, Kind);
   3664     if (Context.getTypeSize(ParamType) >= ArgSize) {
   3665       if (BestKind == 0)
   3666         BestKind = Kind;
   3667       else if (Context.hasSameType(ParamType, ArgType)) {
   3668         BestKind = Kind;
   3669         break;
   3670       }
   3671     }
   3672   }
   3673   return BestKind;
   3674 }
   3675 
   3676 enum AbsoluteValueKind {
   3677   AVK_Integer,
   3678   AVK_Floating,
   3679   AVK_Complex
   3680 };
   3681 
   3682 static AbsoluteValueKind getAbsoluteValueKind(QualType T) {
   3683   if (T->isIntegralOrEnumerationType())
   3684     return AVK_Integer;
   3685   if (T->isRealFloatingType())
   3686     return AVK_Floating;
   3687   if (T->isAnyComplexType())
   3688     return AVK_Complex;
   3689 
   3690   llvm_unreachable("Type not integer, floating, or complex");
   3691 }
   3692 
   3693 // Changes the absolute value function to a different type.  Preserves whether
   3694 // the function is a builtin.
   3695 static unsigned changeAbsFunction(unsigned AbsKind,
   3696                                   AbsoluteValueKind ValueKind) {
   3697   switch (ValueKind) {
   3698   case AVK_Integer:
   3699     switch (AbsKind) {
   3700     default:
   3701       return 0;
   3702     case Builtin::BI__builtin_fabsf:
   3703     case Builtin::BI__builtin_fabs:
   3704     case Builtin::BI__builtin_fabsl:
   3705     case Builtin::BI__builtin_cabsf:
   3706     case Builtin::BI__builtin_cabs:
   3707     case Builtin::BI__builtin_cabsl:
   3708       return Builtin::BI__builtin_abs;
   3709     case Builtin::BIfabsf:
   3710     case Builtin::BIfabs:
   3711     case Builtin::BIfabsl:
   3712     case Builtin::BIcabsf:
   3713     case Builtin::BIcabs:
   3714     case Builtin::BIcabsl:
   3715       return Builtin::BIabs;
   3716     }
   3717   case AVK_Floating:
   3718     switch (AbsKind) {
   3719     default:
   3720       return 0;
   3721     case Builtin::BI__builtin_abs:
   3722     case Builtin::BI__builtin_labs:
   3723     case Builtin::BI__builtin_llabs:
   3724     case Builtin::BI__builtin_cabsf:
   3725     case Builtin::BI__builtin_cabs:
   3726     case Builtin::BI__builtin_cabsl:
   3727       return Builtin::BI__builtin_fabsf;
   3728     case Builtin::BIabs:
   3729     case Builtin::BIlabs:
   3730     case Builtin::BIllabs:
   3731     case Builtin::BIcabsf:
   3732     case Builtin::BIcabs:
   3733     case Builtin::BIcabsl:
   3734       return Builtin::BIfabsf;
   3735     }
   3736   case AVK_Complex:
   3737     switch (AbsKind) {
   3738     default:
   3739       return 0;
   3740     case Builtin::BI__builtin_abs:
   3741     case Builtin::BI__builtin_labs:
   3742     case Builtin::BI__builtin_llabs:
   3743     case Builtin::BI__builtin_fabsf:
   3744     case Builtin::BI__builtin_fabs:
   3745     case Builtin::BI__builtin_fabsl:
   3746       return Builtin::BI__builtin_cabsf;
   3747     case Builtin::BIabs:
   3748     case Builtin::BIlabs:
   3749     case Builtin::BIllabs:
   3750     case Builtin::BIfabsf:
   3751     case Builtin::BIfabs:
   3752     case Builtin::BIfabsl:
   3753       return Builtin::BIcabsf;
   3754     }
   3755   }
   3756   llvm_unreachable("Unable to convert function");
   3757 }
   3758 
   3759 static unsigned getAbsoluteValueFunctionKind(const FunctionDecl *FDecl) {
   3760   const IdentifierInfo *FnInfo = FDecl->getIdentifier();
   3761   if (!FnInfo)
   3762     return 0;
   3763 
   3764   switch (FDecl->getBuiltinID()) {
   3765   default:
   3766     return 0;
   3767   case Builtin::BI__builtin_abs:
   3768   case Builtin::BI__builtin_fabs:
   3769   case Builtin::BI__builtin_fabsf:
   3770   case Builtin::BI__builtin_fabsl:
   3771   case Builtin::BI__builtin_labs:
   3772   case Builtin::BI__builtin_llabs:
   3773   case Builtin::BI__builtin_cabs:
   3774   case Builtin::BI__builtin_cabsf:
   3775   case Builtin::BI__builtin_cabsl:
   3776   case Builtin::BIabs:
   3777   case Builtin::BIlabs:
   3778   case Builtin::BIllabs:
   3779   case Builtin::BIfabs:
   3780   case Builtin::BIfabsf:
   3781   case Builtin::BIfabsl:
   3782   case Builtin::BIcabs:
   3783   case Builtin::BIcabsf:
   3784   case Builtin::BIcabsl:
   3785     return FDecl->getBuiltinID();
   3786   }
   3787   llvm_unreachable("Unknown Builtin type");
   3788 }
   3789 
   3790 // If the replacement is valid, emit a note with replacement function.
   3791 // Additionally, suggest including the proper header if not already included.
   3792 static void emitReplacement(Sema &S, SourceLocation Loc, SourceRange Range,
   3793                             unsigned AbsKind, QualType ArgType) {
   3794   bool EmitHeaderHint = true;
   3795   const char *HeaderName = nullptr;
   3796   const char *FunctionName = nullptr;
   3797   if (S.getLangOpts().CPlusPlus && !ArgType->isAnyComplexType()) {
   3798     FunctionName = "std::abs";
   3799     if (ArgType->isIntegralOrEnumerationType()) {
   3800       HeaderName = "cstdlib";
   3801     } else if (ArgType->isRealFloatingType()) {
   3802       HeaderName = "cmath";
   3803     } else {
   3804       llvm_unreachable("Invalid Type");
   3805     }
   3806 
   3807     // Lookup all std::abs
   3808     if (NamespaceDecl *Std = S.getStdNamespace()) {
   3809       LookupResult R(S, &S.Context.Idents.get("abs"), Loc, Sema::LookupAnyName);
   3810       R.suppressDiagnostics();
   3811       S.LookupQualifiedName(R, Std);
   3812 
   3813       for (const auto *I : R) {
   3814         const FunctionDecl *FDecl = nullptr;
   3815         if (const UsingShadowDecl *UsingD = dyn_cast<UsingShadowDecl>(I)) {
   3816           FDecl = dyn_cast<FunctionDecl>(UsingD->getTargetDecl());
   3817         } else {
   3818           FDecl = dyn_cast<FunctionDecl>(I);
   3819         }
   3820         if (!FDecl)
   3821           continue;
   3822 
   3823         // Found std::abs(), check that they are the right ones.
   3824         if (FDecl->getNumParams() != 1)
   3825           continue;
   3826 
   3827         // Check that the parameter type can handle the argument.
   3828         QualType ParamType = FDecl->getParamDecl(0)->getType();
   3829         if (getAbsoluteValueKind(ArgType) == getAbsoluteValueKind(ParamType) &&
   3830             S.Context.getTypeSize(ArgType) <=
   3831                 S.Context.getTypeSize(ParamType)) {
   3832           // Found a function, don't need the header hint.
   3833           EmitHeaderHint = false;
   3834           break;
   3835         }
   3836       }
   3837     }
   3838   } else {
   3839     FunctionName = S.Context.BuiltinInfo.GetName(AbsKind);
   3840     HeaderName = S.Context.BuiltinInfo.getHeaderName(AbsKind);
   3841 
   3842     if (HeaderName) {
   3843       DeclarationName DN(&S.Context.Idents.get(FunctionName));
   3844       LookupResult R(S, DN, Loc, Sema::LookupAnyName);
   3845       R.suppressDiagnostics();
   3846       S.LookupName(R, S.getCurScope());
   3847 
   3848       if (R.isSingleResult()) {
   3849         FunctionDecl *FD = dyn_cast<FunctionDecl>(R.getFoundDecl());
   3850         if (FD && FD->getBuiltinID() == AbsKind) {
   3851           EmitHeaderHint = false;
   3852         } else {
   3853           return;
   3854         }
   3855       } else if (!R.empty()) {
   3856         return;
   3857       }
   3858     }
   3859   }
   3860 
   3861   S.Diag(Loc, diag::note_replace_abs_function)
   3862       << FunctionName << FixItHint::CreateReplacement(Range, FunctionName);
   3863 
   3864   if (!HeaderName)
   3865     return;
   3866 
   3867   if (!EmitHeaderHint)
   3868     return;
   3869 
   3870   S.Diag(Loc, diag::note_please_include_header) << HeaderName << FunctionName;
   3871 }
   3872 
   3873 static bool IsFunctionStdAbs(const FunctionDecl *FDecl) {
   3874   if (!FDecl)
   3875     return false;
   3876 
   3877   if (!FDecl->getIdentifier() || !FDecl->getIdentifier()->isStr("abs"))
   3878     return false;
   3879 
   3880   const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(FDecl->getDeclContext());
   3881 
   3882   while (ND && ND->isInlineNamespace()) {
   3883     ND = dyn_cast<NamespaceDecl>(ND->getDeclContext());
   3884   }
   3885 
   3886   if (!ND || !ND->getIdentifier() || !ND->getIdentifier()->isStr("std"))
   3887     return false;
   3888 
   3889   if (!isa<TranslationUnitDecl>(ND->getDeclContext()))
   3890     return false;
   3891 
   3892   return true;
   3893 }
   3894 
   3895 // Warn when using the wrong abs() function.
   3896 void Sema::CheckAbsoluteValueFunction(const CallExpr *Call,
   3897                                       const FunctionDecl *FDecl,
   3898                                       IdentifierInfo *FnInfo) {
   3899   if (Call->getNumArgs() != 1)
   3900     return;
   3901 
   3902   unsigned AbsKind = getAbsoluteValueFunctionKind(FDecl);
   3903   bool IsStdAbs = IsFunctionStdAbs(FDecl);
   3904   if (AbsKind == 0 && !IsStdAbs)
   3905     return;
   3906 
   3907   QualType ArgType = Call->getArg(0)->IgnoreParenImpCasts()->getType();
   3908   QualType ParamType = Call->getArg(0)->getType();
   3909 
   3910   // Unsigned types can not be negative.  Suggest to drop the absolute value
   3911   // function.
   3912   if (ArgType->isUnsignedIntegerType()) {
   3913     const char *FunctionName =
   3914         IsStdAbs ? "std::abs" : Context.BuiltinInfo.GetName(AbsKind);
   3915     Diag(Call->getExprLoc(), diag::warn_unsigned_abs) << ArgType << ParamType;
   3916     Diag(Call->getExprLoc(), diag::note_remove_abs)
   3917         << FunctionName
   3918         << FixItHint::CreateRemoval(Call->getCallee()->getSourceRange());
   3919     return;
   3920   }
   3921 
   3922   // std::abs has overloads which prevent most of the absolute value problems
   3923   // from occurring.
   3924   if (IsStdAbs)
   3925     return;
   3926 
   3927   AbsoluteValueKind ArgValueKind = getAbsoluteValueKind(ArgType);
   3928   AbsoluteValueKind ParamValueKind = getAbsoluteValueKind(ParamType);
   3929 
   3930   // The argument and parameter are the same kind.  Check if they are the right
   3931   // size.
   3932   if (ArgValueKind == ParamValueKind) {
   3933     if (Context.getTypeSize(ArgType) <= Context.getTypeSize(ParamType))
   3934       return;
   3935 
   3936     unsigned NewAbsKind = getBestAbsFunction(Context, ArgType, AbsKind);
   3937     Diag(Call->getExprLoc(), diag::warn_abs_too_small)
   3938         << FDecl << ArgType << ParamType;
   3939 
   3940     if (NewAbsKind == 0)
   3941       return;
   3942 
   3943     emitReplacement(*this, Call->getExprLoc(),
   3944                     Call->getCallee()->getSourceRange(), NewAbsKind, ArgType);
   3945     return;
   3946   }
   3947 
   3948   // ArgValueKind != ParamValueKind
   3949   // The wrong type of absolute value function was used.  Attempt to find the
   3950   // proper one.
   3951   unsigned NewAbsKind = changeAbsFunction(AbsKind, ArgValueKind);
   3952   NewAbsKind = getBestAbsFunction(Context, ArgType, NewAbsKind);
   3953   if (NewAbsKind == 0)
   3954     return;
   3955 
   3956   Diag(Call->getExprLoc(), diag::warn_wrong_absolute_value_type)
   3957       << FDecl << ParamValueKind << ArgValueKind;
   3958 
   3959   emitReplacement(*this, Call->getExprLoc(),
   3960                   Call->getCallee()->getSourceRange(), NewAbsKind, ArgType);
   3961   return;
   3962 }
   3963 
   3964 //===--- CHECK: Standard memory functions ---------------------------------===//
   3965 
   3966 /// \brief Takes the expression passed to the size_t parameter of functions
   3967 /// such as memcmp, strncat, etc and warns if it's a comparison.
   3968 ///
   3969 /// This is to catch typos like `if (memcmp(&a, &b, sizeof(a) > 0))`.
   3970 static bool CheckMemorySizeofForComparison(Sema &S, const Expr *E,
   3971                                            IdentifierInfo *FnName,
   3972                                            SourceLocation FnLoc,
   3973                                            SourceLocation RParenLoc) {
   3974   const BinaryOperator *Size = dyn_cast<BinaryOperator>(E);
   3975   if (!Size)
   3976     return false;
   3977 
   3978   // if E is binop and op is >, <, >=, <=, ==, &&, ||:
   3979   if (!Size->isComparisonOp() && !Size->isEqualityOp() && !Size->isLogicalOp())
   3980     return false;
   3981 
   3982   SourceRange SizeRange = Size->getSourceRange();
   3983   S.Diag(Size->getOperatorLoc(), diag::warn_memsize_comparison)
   3984       << SizeRange << FnName;
   3985   S.Diag(FnLoc, diag::note_memsize_comparison_paren)
   3986       << FnName << FixItHint::CreateInsertion(
   3987                        S.getLocForEndOfToken(Size->getLHS()->getLocEnd()), ")")
   3988       << FixItHint::CreateRemoval(RParenLoc);
   3989   S.Diag(SizeRange.getBegin(), diag::note_memsize_comparison_cast_silence)
   3990       << FixItHint::CreateInsertion(SizeRange.getBegin(), "(size_t)(")
   3991       << FixItHint::CreateInsertion(S.getLocForEndOfToken(SizeRange.getEnd()),
   3992                                     ")");
   3993 
   3994   return true;
   3995 }
   3996 
   3997 /// \brief Determine whether the given type is or contains a dynamic class type
   3998 /// (e.g., whether it has a vtable).
   3999 static const CXXRecordDecl *getContainedDynamicClass(QualType T,
   4000                                                      bool &IsContained) {
   4001   // Look through array types while ignoring qualifiers.
   4002   const Type *Ty = T->getBaseElementTypeUnsafe();
   4003   IsContained = false;
   4004 
   4005   const CXXRecordDecl *RD = Ty->getAsCXXRecordDecl();
   4006   RD = RD ? RD->getDefinition() : nullptr;
   4007   if (!RD)
   4008     return nullptr;
   4009 
   4010   if (RD->isDynamicClass())
   4011     return RD;
   4012 
   4013   // Check all the fields.  If any bases were dynamic, the class is dynamic.
   4014   // It's impossible for a class to transitively contain itself by value, so
   4015   // infinite recursion is impossible.
   4016   for (auto *FD : RD->fields()) {
   4017     bool SubContained;
   4018     if (const CXXRecordDecl *ContainedRD =
   4019             getContainedDynamicClass(FD->getType(), SubContained)) {
   4020       IsContained = true;
   4021       return ContainedRD;
   4022     }
   4023   }
   4024 
   4025   return nullptr;
   4026 }
   4027 
   4028 /// \brief If E is a sizeof expression, returns its argument expression,
   4029 /// otherwise returns NULL.
   4030 static const Expr *getSizeOfExprArg(const Expr* E) {
   4031   if (const UnaryExprOrTypeTraitExpr *SizeOf =
   4032       dyn_cast<UnaryExprOrTypeTraitExpr>(E))
   4033     if (SizeOf->getKind() == clang::UETT_SizeOf && !SizeOf->isArgumentType())
   4034       return SizeOf->getArgumentExpr()->IgnoreParenImpCasts();
   4035 
   4036   return nullptr;
   4037 }
   4038 
   4039 /// \brief If E is a sizeof expression, returns its argument type.
   4040 static QualType getSizeOfArgType(const Expr* E) {
   4041   if (const UnaryExprOrTypeTraitExpr *SizeOf =
   4042       dyn_cast<UnaryExprOrTypeTraitExpr>(E))
   4043     if (SizeOf->getKind() == clang::UETT_SizeOf)
   4044       return SizeOf->getTypeOfArgument();
   4045 
   4046   return QualType();
   4047 }
   4048 
   4049 /// \brief Check for dangerous or invalid arguments to memset().
   4050 ///
   4051 /// This issues warnings on known problematic, dangerous or unspecified
   4052 /// arguments to the standard 'memset', 'memcpy', 'memmove', and 'memcmp'
   4053 /// function calls.
   4054 ///
   4055 /// \param Call The call expression to diagnose.
   4056 void Sema::CheckMemaccessArguments(const CallExpr *Call,
   4057                                    unsigned BId,
   4058                                    IdentifierInfo *FnName) {
   4059   assert(BId != 0);
   4060 
   4061   // It is possible to have a non-standard definition of memset.  Validate
   4062   // we have enough arguments, and if not, abort further checking.
   4063   unsigned ExpectedNumArgs = (BId == Builtin::BIstrndup ? 2 : 3);
   4064   if (Call->getNumArgs() < ExpectedNumArgs)
   4065     return;
   4066 
   4067   unsigned LastArg = (BId == Builtin::BImemset ||
   4068                       BId == Builtin::BIstrndup ? 1 : 2);
   4069   unsigned LenArg = (BId == Builtin::BIstrndup ? 1 : 2);
   4070   const Expr *LenExpr = Call->getArg(LenArg)->IgnoreParenImpCasts();
   4071 
   4072   if (CheckMemorySizeofForComparison(*this, LenExpr, FnName,
   4073                                      Call->getLocStart(), Call->getRParenLoc()))
   4074     return;
   4075 
   4076   // We have special checking when the length is a sizeof expression.
   4077   QualType SizeOfArgTy = getSizeOfArgType(LenExpr);
   4078   const Expr *SizeOfArg = getSizeOfExprArg(LenExpr);
   4079   llvm::FoldingSetNodeID SizeOfArgID;
   4080 
   4081   for (unsigned ArgIdx = 0; ArgIdx != LastArg; ++ArgIdx) {
   4082     const Expr *Dest = Call->getArg(ArgIdx)->IgnoreParenImpCasts();
   4083     SourceRange ArgRange = Call->getArg(ArgIdx)->getSourceRange();
   4084 
   4085     QualType DestTy = Dest->getType();
   4086     if (const PointerType *DestPtrTy = DestTy->getAs<PointerType>()) {
   4087       QualType PointeeTy = DestPtrTy->getPointeeType();
   4088 
   4089       // Never warn about void type pointers. This can be used to suppress
   4090       // false positives.
   4091       if (PointeeTy->isVoidType())
   4092         continue;
   4093 
   4094       // Catch "memset(p, 0, sizeof(p))" -- needs to be sizeof(*p). Do this by
   4095       // actually comparing the expressions for equality. Because computing the
   4096       // expression IDs can be expensive, we only do this if the diagnostic is
   4097       // enabled.
   4098       if (SizeOfArg &&
   4099           !Diags.isIgnored(diag::warn_sizeof_pointer_expr_memaccess,
   4100                            SizeOfArg->getExprLoc())) {
   4101         // We only compute IDs for expressions if the warning is enabled, and
   4102         // cache the sizeof arg's ID.
   4103         if (SizeOfArgID == llvm::FoldingSetNodeID())
   4104           SizeOfArg->Profile(SizeOfArgID, Context, true);
   4105         llvm::FoldingSetNodeID DestID;
   4106         Dest->Profile(DestID, Context, true);
   4107         if (DestID == SizeOfArgID) {
   4108           // TODO: For strncpy() and friends, this could suggest sizeof(dst)
   4109           //       over sizeof(src) as well.
   4110           unsigned ActionIdx = 0; // Default is to suggest dereferencing.
   4111           StringRef ReadableName = FnName->getName();
   4112 
   4113           if (const UnaryOperator *UnaryOp = dyn_cast<UnaryOperator>(Dest))
   4114             if (UnaryOp->getOpcode() == UO_AddrOf)
   4115               ActionIdx = 1; // If its an address-of operator, just remove it.
   4116           if (!PointeeTy->isIncompleteType() &&
   4117               (Context.getTypeSize(PointeeTy) == Context.getCharWidth()))
   4118             ActionIdx = 2; // If the pointee's size is sizeof(char),
   4119                            // suggest an explicit length.
   4120 
   4121           // If the function is defined as a builtin macro, do not show macro
   4122           // expansion.
   4123           SourceLocation SL = SizeOfArg->getExprLoc();
   4124           SourceRange DSR = Dest->getSourceRange();
   4125           SourceRange SSR = SizeOfArg->getSourceRange();
   4126           SourceManager &SM = getSourceManager();
   4127 
   4128           if (SM.isMacroArgExpansion(SL)) {
   4129             ReadableName = Lexer::getImmediateMacroName(SL, SM, LangOpts);
   4130             SL = SM.getSpellingLoc(SL);
   4131             DSR = SourceRange(SM.getSpellingLoc(DSR.getBegin()),
   4132                              SM.getSpellingLoc(DSR.getEnd()));
   4133             SSR = SourceRange(SM.getSpellingLoc(SSR.getBegin()),
   4134                              SM.getSpellingLoc(SSR.getEnd()));
   4135           }
   4136 
   4137           DiagRuntimeBehavior(SL, SizeOfArg,
   4138                               PDiag(diag::warn_sizeof_pointer_expr_memaccess)
   4139                                 << ReadableName
   4140                                 << PointeeTy
   4141                                 << DestTy
   4142                                 << DSR
   4143                                 << SSR);
   4144           DiagRuntimeBehavior(SL, SizeOfArg,
   4145                          PDiag(diag::warn_sizeof_pointer_expr_memaccess_note)
   4146                                 << ActionIdx
   4147                                 << SSR);
   4148 
   4149           break;
   4150         }
   4151       }
   4152 
   4153       // Also check for cases where the sizeof argument is the exact same
   4154       // type as the memory argument, and where it points to a user-defined
   4155       // record type.
   4156       if (SizeOfArgTy != QualType()) {
   4157         if (PointeeTy->isRecordType() &&
   4158             Context.typesAreCompatible(SizeOfArgTy, DestTy)) {
   4159           DiagRuntimeBehavior(LenExpr->getExprLoc(), Dest,
   4160                               PDiag(diag::warn_sizeof_pointer_type_memaccess)
   4161                                 << FnName << SizeOfArgTy << ArgIdx
   4162                                 << PointeeTy << Dest->getSourceRange()
   4163                                 << LenExpr->getSourceRange());
   4164           break;
   4165         }
   4166       }
   4167 
   4168       // Always complain about dynamic classes.
   4169       bool IsContained;
   4170       if (const CXXRecordDecl *ContainedRD =
   4171               getContainedDynamicClass(PointeeTy, IsContained)) {
   4172 
   4173         unsigned OperationType = 0;
   4174         // "overwritten" if we're warning about the destination for any call
   4175         // but memcmp; otherwise a verb appropriate to the call.
   4176         if (ArgIdx != 0 || BId == Builtin::BImemcmp) {
   4177           if (BId == Builtin::BImemcpy)
   4178             OperationType = 1;
   4179           else if(BId == Builtin::BImemmove)
   4180             OperationType = 2;
   4181           else if (BId == Builtin::BImemcmp)
   4182             OperationType = 3;
   4183         }
   4184 
   4185         DiagRuntimeBehavior(
   4186           Dest->getExprLoc(), Dest,
   4187           PDiag(diag::warn_dyn_class_memaccess)
   4188             << (BId == Builtin::BImemcmp ? ArgIdx + 2 : ArgIdx)
   4189             << FnName << IsContained << ContainedRD << OperationType
   4190             << Call->getCallee()->getSourceRange());
   4191       } else if (PointeeTy.hasNonTrivialObjCLifetime() &&
   4192                BId != Builtin::BImemset)
   4193         DiagRuntimeBehavior(
   4194           Dest->getExprLoc(), Dest,
   4195           PDiag(diag::warn_arc_object_memaccess)
   4196             << ArgIdx << FnName << PointeeTy
   4197             << Call->getCallee()->getSourceRange());
   4198       else
   4199         continue;
   4200 
   4201       DiagRuntimeBehavior(
   4202         Dest->getExprLoc(), Dest,
   4203         PDiag(diag::note_bad_memaccess_silence)
   4204           << FixItHint::CreateInsertion(ArgRange.getBegin(), "(void*)"));
   4205       break;
   4206     }
   4207   }
   4208 }
   4209 
   4210 // A little helper routine: ignore addition and subtraction of integer literals.
   4211 // This intentionally does not ignore all integer constant expressions because
   4212 // we don't want to remove sizeof().
   4213 static const Expr *ignoreLiteralAdditions(const Expr *Ex, ASTContext &Ctx) {
   4214   Ex = Ex->IgnoreParenCasts();
   4215 
   4216   for (;;) {
   4217     const BinaryOperator * BO = dyn_cast<BinaryOperator>(Ex);
   4218     if (!BO || !BO->isAdditiveOp())
   4219       break;
   4220 
   4221     const Expr *RHS = BO->getRHS()->IgnoreParenCasts();
   4222     const Expr *LHS = BO->getLHS()->IgnoreParenCasts();
   4223 
   4224     if (isa<IntegerLiteral>(RHS))
   4225       Ex = LHS;
   4226     else if (isa<IntegerLiteral>(LHS))
   4227       Ex = RHS;
   4228     else
   4229       break;
   4230   }
   4231 
   4232   return Ex;
   4233 }
   4234 
   4235 static bool isConstantSizeArrayWithMoreThanOneElement(QualType Ty,
   4236                                                       ASTContext &Context) {
   4237   // Only handle constant-sized or VLAs, but not flexible members.
   4238   if (const ConstantArrayType *CAT = Context.getAsConstantArrayType(Ty)) {
   4239     // Only issue the FIXIT for arrays of size > 1.
   4240     if (CAT->getSize().getSExtValue() <= 1)
   4241       return false;
   4242   } else if (!Ty->isVariableArrayType()) {
   4243     return false;
   4244   }
   4245   return true;
   4246 }
   4247 
   4248 // Warn if the user has made the 'size' argument to strlcpy or strlcat
   4249 // be the size of the source, instead of the destination.
   4250 void Sema::CheckStrlcpycatArguments(const CallExpr *Call,
   4251                                     IdentifierInfo *FnName) {
   4252 
   4253   // Don't crash if the user has the wrong number of arguments
   4254   if (Call->getNumArgs() != 3)
   4255     return;
   4256 
   4257   const Expr *SrcArg = ignoreLiteralAdditions(Call->getArg(1), Context);
   4258   const Expr *SizeArg = ignoreLiteralAdditions(Call->getArg(2), Context);
   4259   const Expr *CompareWithSrc = nullptr;
   4260 
   4261   if (CheckMemorySizeofForComparison(*this, SizeArg, FnName,
   4262                                      Call->getLocStart(), Call->getRParenLoc()))
   4263     return;
   4264 
   4265   // Look for 'strlcpy(dst, x, sizeof(x))'
   4266   if (const Expr *Ex = getSizeOfExprArg(SizeArg))
   4267     CompareWithSrc = Ex;
   4268   else {
   4269     // Look for 'strlcpy(dst, x, strlen(x))'
   4270     if (const CallExpr *SizeCall = dyn_cast<CallExpr>(SizeArg)) {
   4271       if (SizeCall->getBuiltinCallee() == Builtin::BIstrlen &&
   4272           SizeCall->getNumArgs() == 1)
   4273         CompareWithSrc = ignoreLiteralAdditions(SizeCall->getArg(0), Context);
   4274     }
   4275   }
   4276 
   4277   if (!CompareWithSrc)
   4278     return;
   4279 
   4280   // Determine if the argument to sizeof/strlen is equal to the source
   4281   // argument.  In principle there's all kinds of things you could do
   4282   // here, for instance creating an == expression and evaluating it with
   4283   // EvaluateAsBooleanCondition, but this uses a more direct technique:
   4284   const DeclRefExpr *SrcArgDRE = dyn_cast<DeclRefExpr>(SrcArg);
   4285   if (!SrcArgDRE)
   4286     return;
   4287 
   4288   const DeclRefExpr *CompareWithSrcDRE = dyn_cast<DeclRefExpr>(CompareWithSrc);
   4289   if (!CompareWithSrcDRE ||
   4290       SrcArgDRE->getDecl() != CompareWithSrcDRE->getDecl())
   4291     return;
   4292 
   4293   const Expr *OriginalSizeArg = Call->getArg(2);
   4294   Diag(CompareWithSrcDRE->getLocStart(), diag::warn_strlcpycat_wrong_size)
   4295     << OriginalSizeArg->getSourceRange() << FnName;
   4296 
   4297   // Output a FIXIT hint if the destination is an array (rather than a
   4298   // pointer to an array).  This could be enhanced to handle some
   4299   // pointers if we know the actual size, like if DstArg is 'array+2'
   4300   // we could say 'sizeof(array)-2'.
   4301   const Expr *DstArg = Call->getArg(0)->IgnoreParenImpCasts();
   4302   if (!isConstantSizeArrayWithMoreThanOneElement(DstArg->getType(), Context))
   4303     return;
   4304 
   4305   SmallString<128> sizeString;
   4306   llvm::raw_svector_ostream OS(sizeString);
   4307   OS << "sizeof(";
   4308   DstArg->printPretty(OS, nullptr, getPrintingPolicy());
   4309   OS << ")";
   4310 
   4311   Diag(OriginalSizeArg->getLocStart(), diag::note_strlcpycat_wrong_size)
   4312     << FixItHint::CreateReplacement(OriginalSizeArg->getSourceRange(),
   4313                                     OS.str());
   4314 }
   4315 
   4316 /// Check if two expressions refer to the same declaration.
   4317 static bool referToTheSameDecl(const Expr *E1, const Expr *E2) {
   4318   if (const DeclRefExpr *D1 = dyn_cast_or_null<DeclRefExpr>(E1))
   4319     if (const DeclRefExpr *D2 = dyn_cast_or_null<DeclRefExpr>(E2))
   4320       return D1->getDecl() == D2->getDecl();
   4321   return false;
   4322 }
   4323 
   4324 static const Expr *getStrlenExprArg(const Expr *E) {
   4325   if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {
   4326     const FunctionDecl *FD = CE->getDirectCallee();
   4327     if (!FD || FD->getMemoryFunctionKind() != Builtin::BIstrlen)
   4328       return nullptr;
   4329     return CE->getArg(0)->IgnoreParenCasts();
   4330   }
   4331   return nullptr;
   4332 }
   4333 
   4334 // Warn on anti-patterns as the 'size' argument to strncat.
   4335 // The correct size argument should look like following:
   4336 //   strncat(dst, src, sizeof(dst) - strlen(dest) - 1);
   4337 void Sema::CheckStrncatArguments(const CallExpr *CE,
   4338                                  IdentifierInfo *FnName) {
   4339   // Don't crash if the user has the wrong number of arguments.
   4340   if (CE->getNumArgs() < 3)
   4341     return;
   4342   const Expr *DstArg = CE->getArg(0)->IgnoreParenCasts();
   4343   const Expr *SrcArg = CE->getArg(1)->IgnoreParenCasts();
   4344   const Expr *LenArg = CE->getArg(2)->IgnoreParenCasts();
   4345 
   4346   if (CheckMemorySizeofForComparison(*this, LenArg, FnName, CE->getLocStart(),
   4347                                      CE->getRParenLoc()))
   4348     return;
   4349 
   4350   // Identify common expressions, which are wrongly used as the size argument
   4351   // to strncat and may lead to buffer overflows.
   4352   unsigned PatternType = 0;
   4353   if (const Expr *SizeOfArg = getSizeOfExprArg(LenArg)) {
   4354     // - sizeof(dst)
   4355     if (referToTheSameDecl(SizeOfArg, DstArg))
   4356       PatternType = 1;
   4357     // - sizeof(src)
   4358     else if (referToTheSameDecl(SizeOfArg, SrcArg))
   4359       PatternType = 2;
   4360   } else if (const BinaryOperator *BE = dyn_cast<BinaryOperator>(LenArg)) {
   4361     if (BE->getOpcode() == BO_Sub) {
   4362       const Expr *L = BE->getLHS()->IgnoreParenCasts();
   4363       const Expr *R = BE->getRHS()->IgnoreParenCasts();
   4364       // - sizeof(dst) - strlen(dst)
   4365       if (referToTheSameDecl(DstArg, getSizeOfExprArg(L)) &&
   4366           referToTheSameDecl(DstArg, getStrlenExprArg(R)))
   4367         PatternType = 1;
   4368       // - sizeof(src) - (anything)
   4369       else if (referToTheSameDecl(SrcArg, getSizeOfExprArg(L)))
   4370         PatternType = 2;
   4371     }
   4372   }
   4373 
   4374   if (PatternType == 0)
   4375     return;
   4376 
   4377   // Generate the diagnostic.
   4378   SourceLocation SL = LenArg->getLocStart();
   4379   SourceRange SR = LenArg->getSourceRange();
   4380   SourceManager &SM = getSourceManager();
   4381 
   4382   // If the function is defined as a builtin macro, do not show macro expansion.
   4383   if (SM.isMacroArgExpansion(SL)) {
   4384     SL = SM.getSpellingLoc(SL);
   4385     SR = SourceRange(SM.getSpellingLoc(SR.getBegin()),
   4386                      SM.getSpellingLoc(SR.getEnd()));
   4387   }
   4388 
   4389   // Check if the destination is an array (rather than a pointer to an array).
   4390   QualType DstTy = DstArg->getType();
   4391   bool isKnownSizeArray = isConstantSizeArrayWithMoreThanOneElement(DstTy,
   4392                                                                     Context);
   4393   if (!isKnownSizeArray) {
   4394     if (PatternType == 1)
   4395       Diag(SL, diag::warn_strncat_wrong_size) << SR;
   4396     else
   4397       Diag(SL, diag::warn_strncat_src_size) << SR;
   4398     return;
   4399   }
   4400 
   4401   if (PatternType == 1)
   4402     Diag(SL, diag::warn_strncat_large_size) << SR;
   4403   else
   4404     Diag(SL, diag::warn_strncat_src_size) << SR;
   4405 
   4406   SmallString<128> sizeString;
   4407   llvm::raw_svector_ostream OS(sizeString);
   4408   OS << "sizeof(";
   4409   DstArg->printPretty(OS, nullptr, getPrintingPolicy());
   4410   OS << ") - ";
   4411   OS << "strlen(";
   4412   DstArg->printPretty(OS, nullptr, getPrintingPolicy());
   4413   OS << ") - 1";
   4414 
   4415   Diag(SL, diag::note_strncat_wrong_size)
   4416     << FixItHint::CreateReplacement(SR, OS.str());
   4417 }
   4418 
   4419 //===--- CHECK: Return Address of Stack Variable --------------------------===//
   4420 
   4421 static Expr *EvalVal(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars,
   4422                      Decl *ParentDecl);
   4423 static Expr *EvalAddr(Expr* E, SmallVectorImpl<DeclRefExpr *> &refVars,
   4424                       Decl *ParentDecl);
   4425 
   4426 /// CheckReturnStackAddr - Check if a return statement returns the address
   4427 ///   of a stack variable.
   4428 static void
   4429 CheckReturnStackAddr(Sema &S, Expr *RetValExp, QualType lhsType,
   4430                      SourceLocation ReturnLoc) {
   4431 
   4432   Expr *stackE = nullptr;
   4433   SmallVector<DeclRefExpr *, 8> refVars;
   4434 
   4435   // Perform checking for returned stack addresses, local blocks,
   4436   // label addresses or references to temporaries.
   4437   if (lhsType->isPointerType() ||
   4438       (!S.getLangOpts().ObjCAutoRefCount && lhsType->isBlockPointerType())) {
   4439     stackE = EvalAddr(RetValExp, refVars, /*ParentDecl=*/nullptr);
   4440   } else if (lhsType->isReferenceType()) {
   4441     stackE = EvalVal(RetValExp, refVars, /*ParentDecl=*/nullptr);
   4442   }
   4443 
   4444   if (!stackE)
   4445     return; // Nothing suspicious was found.
   4446 
   4447   SourceLocation diagLoc;
   4448   SourceRange diagRange;
   4449   if (refVars.empty()) {
   4450     diagLoc = stackE->getLocStart();
   4451     diagRange = stackE->getSourceRange();
   4452   } else {
   4453     // We followed through a reference variable. 'stackE' contains the
   4454     // problematic expression but we will warn at the return statement pointing
   4455     // at the reference variable. We will later display the "trail" of
   4456     // reference variables using notes.
   4457     diagLoc = refVars[0]->getLocStart();
   4458     diagRange = refVars[0]->getSourceRange();
   4459   }
   4460 
   4461   if (DeclRefExpr *DR = dyn_cast<DeclRefExpr>(stackE)) { //address of local var.
   4462     S.Diag(diagLoc, lhsType->isReferenceType() ? diag::warn_ret_stack_ref
   4463                                              : diag::warn_ret_stack_addr)
   4464      << DR->getDecl()->getDeclName() << diagRange;
   4465   } else if (isa<BlockExpr>(stackE)) { // local block.
   4466     S.Diag(diagLoc, diag::err_ret_local_block) << diagRange;
   4467   } else if (isa<AddrLabelExpr>(stackE)) { // address of label.
   4468     S.Diag(diagLoc, diag::warn_ret_addr_label) << diagRange;
   4469   } else { // local temporary.
   4470     S.Diag(diagLoc, lhsType->isReferenceType() ? diag::warn_ret_local_temp_ref
   4471                                                : diag::warn_ret_local_temp_addr)
   4472      << diagRange;
   4473   }
   4474 
   4475   // Display the "trail" of reference variables that we followed until we
   4476   // found the problematic expression using notes.
   4477   for (unsigned i = 0, e = refVars.size(); i != e; ++i) {
   4478     VarDecl *VD = cast<VarDecl>(refVars[i]->getDecl());
   4479     // If this var binds to another reference var, show the range of the next
   4480     // var, otherwise the var binds to the problematic expression, in which case
   4481     // show the range of the expression.
   4482     SourceRange range = (i < e-1) ? refVars[i+1]->getSourceRange()
   4483                                   : stackE->getSourceRange();
   4484     S.Diag(VD->getLocation(), diag::note_ref_var_local_bind)
   4485         << VD->getDeclName() << range;
   4486   }
   4487 }
   4488 
   4489 /// EvalAddr - EvalAddr and EvalVal are mutually recursive functions that
   4490 ///  check if the expression in a return statement evaluates to an address
   4491 ///  to a location on the stack, a local block, an address of a label, or a
   4492 ///  reference to local temporary. The recursion is used to traverse the
   4493 ///  AST of the return expression, with recursion backtracking when we
   4494 ///  encounter a subexpression that (1) clearly does not lead to one of the
   4495 ///  above problematic expressions (2) is something we cannot determine leads to
   4496 ///  a problematic expression based on such local checking.
   4497 ///
   4498 ///  Both EvalAddr and EvalVal follow through reference variables to evaluate
   4499 ///  the expression that they point to. Such variables are added to the
   4500 ///  'refVars' vector so that we know what the reference variable "trail" was.
   4501 ///
   4502 ///  EvalAddr processes expressions that are pointers that are used as
   4503 ///  references (and not L-values).  EvalVal handles all other values.
   4504 ///  At the base case of the recursion is a check for the above problematic
   4505 ///  expressions.
   4506 ///
   4507 ///  This implementation handles:
   4508 ///
   4509 ///   * pointer-to-pointer casts
   4510 ///   * implicit conversions from array references to pointers
   4511 ///   * taking the address of fields
   4512 ///   * arbitrary interplay between "&" and "*" operators
   4513 ///   * pointer arithmetic from an address of a stack variable
   4514 ///   * taking the address of an array element where the array is on the stack
   4515 static Expr *EvalAddr(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars,
   4516                       Decl *ParentDecl) {
   4517   if (E->isTypeDependent())
   4518     return nullptr;
   4519 
   4520   // We should only be called for evaluating pointer expressions.
   4521   assert((E->getType()->isAnyPointerType() ||
   4522           E->getType()->isBlockPointerType() ||
   4523           E->getType()->isObjCQualifiedIdType()) &&
   4524          "EvalAddr only works on pointers");
   4525 
   4526   E = E->IgnoreParens();
   4527 
   4528   // Our "symbolic interpreter" is just a dispatch off the currently
   4529   // viewed AST node.  We then recursively traverse the AST by calling
   4530   // EvalAddr and EvalVal appropriately.
   4531   switch (E->getStmtClass()) {
   4532   case Stmt::DeclRefExprClass: {
   4533     DeclRefExpr *DR = cast<DeclRefExpr>(E);
   4534 
   4535     // If we leave the immediate function, the lifetime isn't about to end.
   4536     if (DR->refersToEnclosingLocal())
   4537       return nullptr;
   4538 
   4539     if (VarDecl *V = dyn_cast<VarDecl>(DR->getDecl()))
   4540       // If this is a reference variable, follow through to the expression that
   4541       // it points to.
   4542       if (V->hasLocalStorage() &&
   4543           V->getType()->isReferenceType() && V->hasInit()) {
   4544         // Add the reference variable to the "trail".
   4545         refVars.push_back(DR);
   4546         return EvalAddr(V->getInit(), refVars, ParentDecl);
   4547       }
   4548 
   4549     return nullptr;
   4550   }
   4551 
   4552   case Stmt::UnaryOperatorClass: {
   4553     // The only unary operator that make sense to handle here
   4554     // is AddrOf.  All others don't make sense as pointers.
   4555     UnaryOperator *U = cast<UnaryOperator>(E);
   4556 
   4557     if (U->getOpcode() == UO_AddrOf)
   4558       return EvalVal(U->getSubExpr(), refVars, ParentDecl);
   4559     else
   4560       return nullptr;
   4561   }
   4562 
   4563   case Stmt::BinaryOperatorClass: {
   4564     // Handle pointer arithmetic.  All other binary operators are not valid
   4565     // in this context.
   4566     BinaryOperator *B = cast<BinaryOperator>(E);
   4567     BinaryOperatorKind op = B->getOpcode();
   4568 
   4569     if (op != BO_Add && op != BO_Sub)
   4570       return nullptr;
   4571 
   4572     Expr *Base = B->getLHS();
   4573 
   4574     // Determine which argument is the real pointer base.  It could be
   4575     // the RHS argument instead of the LHS.
   4576     if (!Base->getType()->isPointerType()) Base = B->getRHS();
   4577 
   4578     assert (Base->getType()->isPointerType());
   4579     return EvalAddr(Base, refVars, ParentDecl);
   4580   }
   4581 
   4582   // For conditional operators we need to see if either the LHS or RHS are
   4583   // valid DeclRefExpr*s.  If one of them is valid, we return it.
   4584   case Stmt::ConditionalOperatorClass: {
   4585     ConditionalOperator *C = cast<ConditionalOperator>(E);
   4586 
   4587     // Handle the GNU extension for missing LHS.
   4588     // FIXME: That isn't a ConditionalOperator, so doesn't get here.
   4589     if (Expr *LHSExpr = C->getLHS()) {
   4590       // In C++, we can have a throw-expression, which has 'void' type.
   4591       if (!LHSExpr->getType()->isVoidType())
   4592         if (Expr *LHS = EvalAddr(LHSExpr, refVars, ParentDecl))
   4593           return LHS;
   4594     }
   4595 
   4596     // In C++, we can have a throw-expression, which has 'void' type.
   4597     if (C->getRHS()->getType()->isVoidType())
   4598       return nullptr;
   4599 
   4600     return EvalAddr(C->getRHS(), refVars, ParentDecl);
   4601   }
   4602 
   4603   case Stmt::BlockExprClass:
   4604     if (cast<BlockExpr>(E)->getBlockDecl()->hasCaptures())
   4605       return E; // local block.
   4606     return nullptr;
   4607 
   4608   case Stmt::AddrLabelExprClass:
   4609     return E; // address of label.
   4610 
   4611   case Stmt::ExprWithCleanupsClass:
   4612     return EvalAddr(cast<ExprWithCleanups>(E)->getSubExpr(), refVars,
   4613                     ParentDecl);
   4614 
   4615   // For casts, we need to handle conversions from arrays to
   4616   // pointer values, and pointer-to-pointer conversions.
   4617   case Stmt::ImplicitCastExprClass:
   4618   case Stmt::CStyleCastExprClass:
   4619   case Stmt::CXXFunctionalCastExprClass:
   4620   case Stmt::ObjCBridgedCastExprClass:
   4621   case Stmt::CXXStaticCastExprClass:
   4622   case Stmt::CXXDynamicCastExprClass:
   4623   case Stmt::CXXConstCastExprClass:
   4624   case Stmt::CXXReinterpretCastExprClass: {
   4625     Expr* SubExpr = cast<CastExpr>(E)->getSubExpr();
   4626     switch (cast<CastExpr>(E)->getCastKind()) {
   4627     case CK_LValueToRValue:
   4628     case CK_NoOp:
   4629     case CK_BaseToDerived:
   4630     case CK_DerivedToBase:
   4631     case CK_UncheckedDerivedToBase:
   4632     case CK_Dynamic:
   4633     case CK_CPointerToObjCPointerCast:
   4634     case CK_BlockPointerToObjCPointerCast:
   4635     case CK_AnyPointerToBlockPointerCast:
   4636       return EvalAddr(SubExpr, refVars, ParentDecl);
   4637 
   4638     case CK_ArrayToPointerDecay:
   4639       return EvalVal(SubExpr, refVars, ParentDecl);
   4640 
   4641     case CK_BitCast:
   4642       if (SubExpr->getType()->isAnyPointerType() ||
   4643           SubExpr->getType()->isBlockPointerType() ||
   4644           SubExpr->getType()->isObjCQualifiedIdType())
   4645         return EvalAddr(SubExpr, refVars, ParentDecl);
   4646       else
   4647         return nullptr;
   4648 
   4649     default:
   4650       return nullptr;
   4651     }
   4652   }
   4653 
   4654   case Stmt::MaterializeTemporaryExprClass:
   4655     if (Expr *Result = EvalAddr(
   4656                          cast<MaterializeTemporaryExpr>(E)->GetTemporaryExpr(),
   4657                                 refVars, ParentDecl))
   4658       return Result;
   4659 
   4660     return E;
   4661 
   4662   // Everything else: we simply don't reason about them.
   4663   default:
   4664     return nullptr;
   4665   }
   4666 }
   4667 
   4668 
   4669 ///  EvalVal - This function is complements EvalAddr in the mutual recursion.
   4670 ///   See the comments for EvalAddr for more details.
   4671 static Expr *EvalVal(Expr *E, SmallVectorImpl<DeclRefExpr *> &refVars,
   4672                      Decl *ParentDecl) {
   4673 do {
   4674   // We should only be called for evaluating non-pointer expressions, or
   4675   // expressions with a pointer type that are not used as references but instead
   4676   // are l-values (e.g., DeclRefExpr with a pointer type).
   4677 
   4678   // Our "symbolic interpreter" is just a dispatch off the currently
   4679   // viewed AST node.  We then recursively traverse the AST by calling
   4680   // EvalAddr and EvalVal appropriately.
   4681 
   4682   E = E->IgnoreParens();
   4683   switch (E->getStmtClass()) {
   4684   case Stmt::ImplicitCastExprClass: {
   4685     ImplicitCastExpr *IE = cast<ImplicitCastExpr>(E);
   4686     if (IE->getValueKind() == VK_LValue) {
   4687       E = IE->getSubExpr();
   4688       continue;
   4689     }
   4690     return nullptr;
   4691   }
   4692 
   4693   case Stmt::ExprWithCleanupsClass:
   4694     return EvalVal(cast<ExprWithCleanups>(E)->getSubExpr(), refVars,ParentDecl);
   4695 
   4696   case Stmt::DeclRefExprClass: {
   4697     // When we hit a DeclRefExpr we are looking at code that refers to a
   4698     // variable's name. If it's not a reference variable we check if it has
   4699     // local storage within the function, and if so, return the expression.
   4700     DeclRefExpr *DR = cast<DeclRefExpr>(E);
   4701 
   4702     // If we leave the immediate function, the lifetime isn't about to end.
   4703     if (DR->refersToEnclosingLocal())
   4704       return nullptr;
   4705 
   4706     if (VarDecl *V = dyn_cast<VarDecl>(DR->getDecl())) {
   4707       // Check if it refers to itself, e.g. "int& i = i;".
   4708       if (V == ParentDecl)
   4709         return DR;
   4710 
   4711       if (V->hasLocalStorage()) {
   4712         if (!V->getType()->isReferenceType())
   4713           return DR;
   4714 
   4715         // Reference variable, follow through to the expression that
   4716         // it points to.
   4717         if (V->hasInit()) {
   4718           // Add the reference variable to the "trail".
   4719           refVars.push_back(DR);
   4720           return EvalVal(V->getInit(), refVars, V);
   4721         }
   4722       }
   4723     }
   4724 
   4725     return nullptr;
   4726   }
   4727 
   4728   case Stmt::UnaryOperatorClass: {
   4729     // The only unary operator that make sense to handle here
   4730     // is Deref.  All others don't resolve to a "name."  This includes
   4731     // handling all sorts of rvalues passed to a unary operator.
   4732     UnaryOperator *U = cast<UnaryOperator>(E);
   4733 
   4734     if (U->getOpcode() == UO_Deref)
   4735       return EvalAddr(U->getSubExpr(), refVars, ParentDecl);
   4736 
   4737     return nullptr;
   4738   }
   4739 
   4740   case Stmt::ArraySubscriptExprClass: {
   4741     // Array subscripts are potential references to data on the stack.  We
   4742     // retrieve the DeclRefExpr* for the array variable if it indeed
   4743     // has local storage.
   4744     return EvalAddr(cast<ArraySubscriptExpr>(E)->getBase(), refVars,ParentDecl);
   4745   }
   4746 
   4747   case Stmt::ConditionalOperatorClass: {
   4748     // For conditional operators we need to see if either the LHS or RHS are
   4749     // non-NULL Expr's.  If one is non-NULL, we return it.
   4750     ConditionalOperator *C = cast<ConditionalOperator>(E);
   4751 
   4752     // Handle the GNU extension for missing LHS.
   4753     if (Expr *LHSExpr = C->getLHS()) {
   4754       // In C++, we can have a throw-expression, which has 'void' type.
   4755       if (!LHSExpr->getType()->isVoidType())
   4756         if (Expr *LHS = EvalVal(LHSExpr, refVars, ParentDecl))
   4757           return LHS;
   4758     }
   4759 
   4760     // In C++, we can have a throw-expression, which has 'void' type.
   4761     if (C->getRHS()->getType()->isVoidType())
   4762       return nullptr;
   4763 
   4764     return EvalVal(C->getRHS(), refVars, ParentDecl);
   4765   }
   4766 
   4767   // Accesses to members are potential references to data on the stack.
   4768   case Stmt::MemberExprClass: {
   4769     MemberExpr *M = cast<MemberExpr>(E);
   4770 
   4771     // Check for indirect access.  We only want direct field accesses.
   4772     if (M->isArrow())
   4773       return nullptr;
   4774 
   4775     // Check whether the member type is itself a reference, in which case
   4776     // we're not going to refer to the member, but to what the member refers to.
   4777     if (M->getMemberDecl()->getType()->isReferenceType())
   4778       return nullptr;
   4779 
   4780     return EvalVal(M->getBase(), refVars, ParentDecl);
   4781   }
   4782 
   4783   case Stmt::MaterializeTemporaryExprClass:
   4784     if (Expr *Result = EvalVal(
   4785                           cast<MaterializeTemporaryExpr>(E)->GetTemporaryExpr(),
   4786                                refVars, ParentDecl))
   4787       return Result;
   4788 
   4789     return E;
   4790 
   4791   default:
   4792     // Check that we don't return or take the address of a reference to a
   4793     // temporary. This is only useful in C++.
   4794     if (!E->isTypeDependent() && E->isRValue())
   4795       return E;
   4796 
   4797     // Everything else: we simply don't reason about them.
   4798     return nullptr;
   4799   }
   4800 } while (true);
   4801 }
   4802 
   4803 void
   4804 Sema::CheckReturnValExpr(Expr *RetValExp, QualType lhsType,
   4805                          SourceLocation ReturnLoc,
   4806                          bool isObjCMethod,
   4807                          const AttrVec *Attrs,
   4808                          const FunctionDecl *FD) {
   4809   CheckReturnStackAddr(*this, RetValExp, lhsType, ReturnLoc);
   4810 
   4811   // Check if the return value is null but should not be.
   4812   if (Attrs && hasSpecificAttr<ReturnsNonNullAttr>(*Attrs) &&
   4813       CheckNonNullExpr(*this, RetValExp))
   4814     Diag(ReturnLoc, diag::warn_null_ret)
   4815       << (isObjCMethod ? 1 : 0) << RetValExp->getSourceRange();
   4816 
   4817   // C++11 [basic.stc.dynamic.allocation]p4:
   4818   //   If an allocation function declared with a non-throwing
   4819   //   exception-specification fails to allocate storage, it shall return
   4820   //   a null pointer. Any other allocation function that fails to allocate
   4821   //   storage shall indicate failure only by throwing an exception [...]
   4822   if (FD) {
   4823     OverloadedOperatorKind Op = FD->getOverloadedOperator();
   4824     if (Op == OO_New || Op == OO_Array_New) {
   4825       const FunctionProtoType *Proto
   4826         = FD->getType()->castAs<FunctionProtoType>();
   4827       if (!Proto->isNothrow(Context, /*ResultIfDependent*/true) &&
   4828           CheckNonNullExpr(*this, RetValExp))
   4829         Diag(ReturnLoc, diag::warn_operator_new_returns_null)
   4830           << FD << getLangOpts().CPlusPlus11;
   4831     }
   4832   }
   4833 }
   4834 
   4835 //===--- CHECK: Floating-Point comparisons (-Wfloat-equal) ---------------===//
   4836 
   4837 /// Check for comparisons of floating point operands using != and ==.
   4838 /// Issue a warning if these are no self-comparisons, as they are not likely
   4839 /// to do what the programmer intended.
   4840 void Sema::CheckFloatComparison(SourceLocation Loc, Expr* LHS, Expr *RHS) {
   4841   Expr* LeftExprSansParen = LHS->IgnoreParenImpCasts();
   4842   Expr* RightExprSansParen = RHS->IgnoreParenImpCasts();
   4843 
   4844   // Special case: check for x == x (which is OK).
   4845   // Do not emit warnings for such cases.
   4846   if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(LeftExprSansParen))
   4847     if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(RightExprSansParen))
   4848       if (DRL->getDecl() == DRR->getDecl())
   4849         return;
   4850 
   4851 
   4852   // Special case: check for comparisons against literals that can be exactly
   4853   //  represented by APFloat.  In such cases, do not emit a warning.  This
   4854   //  is a heuristic: often comparison against such literals are used to
   4855   //  detect if a value in a variable has not changed.  This clearly can
   4856   //  lead to false negatives.
   4857   if (FloatingLiteral* FLL = dyn_cast<FloatingLiteral>(LeftExprSansParen)) {
   4858     if (FLL->isExact())
   4859       return;
   4860   } else
   4861     if (FloatingLiteral* FLR = dyn_cast<FloatingLiteral>(RightExprSansParen))
   4862       if (FLR->isExact())
   4863         return;
   4864 
   4865   // Check for comparisons with builtin types.
   4866   if (CallExpr* CL = dyn_cast<CallExpr>(LeftExprSansParen))
   4867     if (CL->getBuiltinCallee())
   4868       return;
   4869 
   4870   if (CallExpr* CR = dyn_cast<CallExpr>(RightExprSansParen))
   4871     if (CR->getBuiltinCallee())
   4872       return;
   4873 
   4874   // Emit the diagnostic.
   4875   Diag(Loc, diag::warn_floatingpoint_eq)
   4876     << LHS->getSourceRange() << RHS->getSourceRange();
   4877 }
   4878 
   4879 //===--- CHECK: Integer mixed-sign comparisons (-Wsign-compare) --------===//
   4880 //===--- CHECK: Lossy implicit conversions (-Wconversion) --------------===//
   4881 
   4882 namespace {
   4883 
   4884 /// Structure recording the 'active' range of an integer-valued
   4885 /// expression.
   4886 struct IntRange {
   4887   /// The number of bits active in the int.
   4888   unsigned Width;
   4889 
   4890   /// True if the int is known not to have negative values.
   4891   bool NonNegative;
   4892 
   4893   IntRange(unsigned Width, bool NonNegative)
   4894     : Width(Width), NonNegative(NonNegative)
   4895   {}
   4896 
   4897   /// Returns the range of the bool type.
   4898   static IntRange forBoolType() {
   4899     return IntRange(1, true);
   4900   }
   4901 
   4902   /// Returns the range of an opaque value of the given integral type.
   4903   static IntRange forValueOfType(ASTContext &C, QualType T) {
   4904     return forValueOfCanonicalType(C,
   4905                           T->getCanonicalTypeInternal().getTypePtr());
   4906   }
   4907 
   4908   /// Returns the range of an opaque value of a canonical integral type.
   4909   static IntRange forValueOfCanonicalType(ASTContext &C, const Type *T) {
   4910     assert(T->isCanonicalUnqualified());
   4911 
   4912     if (const VectorType *VT = dyn_cast<VectorType>(T))
   4913       T = VT->getElementType().getTypePtr();
   4914     if (const ComplexType *CT = dyn_cast<ComplexType>(T))
   4915       T = CT->getElementType().getTypePtr();
   4916 
   4917     // For enum types, use the known bit width of the enumerators.
   4918     if (const EnumType *ET = dyn_cast<EnumType>(T)) {
   4919       EnumDecl *Enum = ET->getDecl();
   4920       if (!Enum->isCompleteDefinition())
   4921         return IntRange(C.getIntWidth(QualType(T, 0)), false);
   4922 
   4923       unsigned NumPositive = Enum->getNumPositiveBits();
   4924       unsigned NumNegative = Enum->getNumNegativeBits();
   4925 
   4926       if (NumNegative == 0)
   4927         return IntRange(NumPositive, true/*NonNegative*/);
   4928       else
   4929         return IntRange(std::max(NumPositive + 1, NumNegative),
   4930                         false/*NonNegative*/);
   4931     }
   4932 
   4933     const BuiltinType *BT = cast<BuiltinType>(T);
   4934     assert(BT->isInteger());
   4935 
   4936     return IntRange(C.getIntWidth(QualType(T, 0)), BT->isUnsignedInteger());
   4937   }
   4938 
   4939   /// Returns the "target" range of a canonical integral type, i.e.
   4940   /// the range of values expressible in the type.
   4941   ///
   4942   /// This matches forValueOfCanonicalType except that enums have the
   4943   /// full range of their type, not the range of their enumerators.
   4944   static IntRange forTargetOfCanonicalType(ASTContext &C, const Type *T) {
   4945     assert(T->isCanonicalUnqualified());
   4946 
   4947     if (const VectorType *VT = dyn_cast<VectorType>(T))
   4948       T = VT->getElementType().getTypePtr();
   4949     if (const ComplexType *CT = dyn_cast<ComplexType>(T))
   4950       T = CT->getElementType().getTypePtr();
   4951     if (const EnumType *ET = dyn_cast<EnumType>(T))
   4952       T = C.getCanonicalType(ET->getDecl()->getIntegerType()).getTypePtr();
   4953 
   4954     const BuiltinType *BT = cast<BuiltinType>(T);
   4955     assert(BT->isInteger());
   4956 
   4957     return IntRange(C.getIntWidth(QualType(T, 0)), BT->isUnsignedInteger());
   4958   }
   4959 
   4960   /// Returns the supremum of two ranges: i.e. their conservative merge.
   4961   static IntRange join(IntRange L, IntRange R) {
   4962     return IntRange(std::max(L.Width, R.Width),
   4963                     L.NonNegative && R.NonNegative);
   4964   }
   4965 
   4966   /// Returns the infinum of two ranges: i.e. their aggressive merge.
   4967   static IntRange meet(IntRange L, IntRange R) {
   4968     return IntRange(std::min(L.Width, R.Width),
   4969                     L.NonNegative || R.NonNegative);
   4970   }
   4971 };
   4972 
   4973 static IntRange GetValueRange(ASTContext &C, llvm::APSInt &value,
   4974                               unsigned MaxWidth) {
   4975   if (value.isSigned() && value.isNegative())
   4976     return IntRange(value.getMinSignedBits(), false);
   4977 
   4978   if (value.getBitWidth() > MaxWidth)
   4979     value = value.trunc(MaxWidth);
   4980 
   4981   // isNonNegative() just checks the sign bit without considering
   4982   // signedness.
   4983   return IntRange(value.getActiveBits(), true);
   4984 }
   4985 
   4986 static IntRange GetValueRange(ASTContext &C, APValue &result, QualType Ty,
   4987                               unsigned MaxWidth) {
   4988   if (result.isInt())
   4989     return GetValueRange(C, result.getInt(), MaxWidth);
   4990 
   4991   if (result.isVector()) {
   4992     IntRange R = GetValueRange(C, result.getVectorElt(0), Ty, MaxWidth);
   4993     for (unsigned i = 1, e = result.getVectorLength(); i != e; ++i) {
   4994       IntRange El = GetValueRange(C, result.getVectorElt(i), Ty, MaxWidth);
   4995       R = IntRange::join(R, El);
   4996     }
   4997     return R;
   4998   }
   4999 
   5000   if (result.isComplexInt()) {
   5001     IntRange R = GetValueRange(C, result.getComplexIntReal(), MaxWidth);
   5002     IntRange I = GetValueRange(C, result.getComplexIntImag(), MaxWidth);
   5003     return IntRange::join(R, I);
   5004   }
   5005 
   5006   // This can happen with lossless casts to intptr_t of "based" lvalues.
   5007   // Assume it might use arbitrary bits.
   5008   // FIXME: The only reason we need to pass the type in here is to get
   5009   // the sign right on this one case.  It would be nice if APValue
   5010   // preserved this.
   5011   assert(result.isLValue() || result.isAddrLabelDiff());
   5012   return IntRange(MaxWidth, Ty->isUnsignedIntegerOrEnumerationType());
   5013 }
   5014 
   5015 static QualType GetExprType(Expr *E) {
   5016   QualType Ty = E->getType();
   5017   if (const AtomicType *AtomicRHS = Ty->getAs<AtomicType>())
   5018     Ty = AtomicRHS->getValueType();
   5019   return Ty;
   5020 }
   5021 
   5022 /// Pseudo-evaluate the given integer expression, estimating the
   5023 /// range of values it might take.
   5024 ///
   5025 /// \param MaxWidth - the width to which the value will be truncated
   5026 static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {
   5027   E = E->IgnoreParens();
   5028 
   5029   // Try a full evaluation first.
   5030   Expr::EvalResult result;
   5031   if (E->EvaluateAsRValue(result, C))
   5032     return GetValueRange(C, result.Val, GetExprType(E), MaxWidth);
   5033 
   5034   // I think we only want to look through implicit casts here; if the
   5035   // user has an explicit widening cast, we should treat the value as
   5036   // being of the new, wider type.
   5037   if (ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E)) {
   5038     if (CE->getCastKind() == CK_NoOp || CE->getCastKind() == CK_LValueToRValue)
   5039       return GetExprRange(C, CE->getSubExpr(), MaxWidth);
   5040 
   5041     IntRange OutputTypeRange = IntRange::forValueOfType(C, GetExprType(CE));
   5042 
   5043     bool isIntegerCast = (CE->getCastKind() == CK_IntegralCast);
   5044 
   5045     // Assume that non-integer casts can span the full range of the type.
   5046     if (!isIntegerCast)
   5047       return OutputTypeRange;
   5048 
   5049     IntRange SubRange
   5050       = GetExprRange(C, CE->getSubExpr(),
   5051                      std::min(MaxWidth, OutputTypeRange.Width));
   5052 
   5053     // Bail out if the subexpr's range is as wide as the cast type.
   5054     if (SubRange.Width >= OutputTypeRange.Width)
   5055       return OutputTypeRange;
   5056 
   5057     // Otherwise, we take the smaller width, and we're non-negative if
   5058     // either the output type or the subexpr is.
   5059     return IntRange(SubRange.Width,
   5060                     SubRange.NonNegative || OutputTypeRange.NonNegative);
   5061   }
   5062 
   5063   if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
   5064     // If we can fold the condition, just take that operand.
   5065     bool CondResult;
   5066     if (CO->getCond()->EvaluateAsBooleanCondition(CondResult, C))
   5067       return GetExprRange(C, CondResult ? CO->getTrueExpr()
   5068                                         : CO->getFalseExpr(),
   5069                           MaxWidth);
   5070 
   5071     // Otherwise, conservatively merge.
   5072     IntRange L = GetExprRange(C, CO->getTrueExpr(), MaxWidth);
   5073     IntRange R = GetExprRange(C, CO->getFalseExpr(), MaxWidth);
   5074     return IntRange::join(L, R);
   5075   }
   5076 
   5077   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
   5078     switch (BO->getOpcode()) {
   5079 
   5080     // Boolean-valued operations are single-bit and positive.
   5081     case BO_LAnd:
   5082     case BO_LOr:
   5083     case BO_LT:
   5084     case BO_GT:
   5085     case BO_LE:
   5086     case BO_GE:
   5087     case BO_EQ:
   5088     case BO_NE:
   5089       return IntRange::forBoolType();
   5090 
   5091     // The type of the assignments is the type of the LHS, so the RHS
   5092     // is not necessarily the same type.
   5093     case BO_MulAssign:
   5094     case BO_DivAssign:
   5095     case BO_RemAssign:
   5096     case BO_AddAssign:
   5097     case BO_SubAssign:
   5098     case BO_XorAssign:
   5099     case BO_OrAssign:
   5100       // TODO: bitfields?
   5101       return IntRange::forValueOfType(C, GetExprType(E));
   5102 
   5103     // Simple assignments just pass through the RHS, which will have
   5104     // been coerced to the LHS type.
   5105     case BO_Assign:
   5106       // TODO: bitfields?
   5107       return GetExprRange(C, BO->getRHS(), MaxWidth);
   5108 
   5109     // Operations with opaque sources are black-listed.
   5110     case BO_PtrMemD:
   5111     case BO_PtrMemI:
   5112       return IntRange::forValueOfType(C, GetExprType(E));
   5113 
   5114     // Bitwise-and uses the *infinum* of the two source ranges.
   5115     case BO_And:
   5116     case BO_AndAssign:
   5117       return IntRange::meet(GetExprRange(C, BO->getLHS(), MaxWidth),
   5118                             GetExprRange(C, BO->getRHS(), MaxWidth));
   5119 
   5120     // Left shift gets black-listed based on a judgement call.
   5121     case BO_Shl:
   5122       // ...except that we want to treat '1 << (blah)' as logically
   5123       // positive.  It's an important idiom.
   5124       if (IntegerLiteral *I
   5125             = dyn_cast<IntegerLiteral>(BO->getLHS()->IgnoreParenCasts())) {
   5126         if (I->getValue() == 1) {
   5127           IntRange R = IntRange::forValueOfType(C, GetExprType(E));
   5128           return IntRange(R.Width, /*NonNegative*/ true);
   5129         }
   5130       }
   5131       // fallthrough
   5132 
   5133     case BO_ShlAssign:
   5134       return IntRange::forValueOfType(C, GetExprType(E));
   5135 
   5136     // Right shift by a constant can narrow its left argument.
   5137     case BO_Shr:
   5138     case BO_ShrAssign: {
   5139       IntRange L = GetExprRange(C, BO->getLHS(), MaxWidth);
   5140 
   5141       // If the shift amount is a positive constant, drop the width by
   5142       // that much.
   5143       llvm::APSInt shift;
   5144       if (BO->getRHS()->isIntegerConstantExpr(shift, C) &&
   5145           shift.isNonNegative()) {
   5146         unsigned zext = shift.getZExtValue();
   5147         if (zext >= L.Width)
   5148           L.Width = (L.NonNegative ? 0 : 1);
   5149         else
   5150           L.Width -= zext;
   5151       }
   5152 
   5153       return L;
   5154     }
   5155 
   5156     // Comma acts as its right operand.
   5157     case BO_Comma:
   5158       return GetExprRange(C, BO->getRHS(), MaxWidth);
   5159 
   5160     // Black-list pointer subtractions.
   5161     case BO_Sub:
   5162       if (BO->getLHS()->getType()->isPointerType())
   5163         return IntRange::forValueOfType(C, GetExprType(E));
   5164       break;
   5165 
   5166     // The width of a division result is mostly determined by the size
   5167     // of the LHS.
   5168     case BO_Div: {
   5169       // Don't 'pre-truncate' the operands.
   5170       unsigned opWidth = C.getIntWidth(GetExprType(E));
   5171       IntRange L = GetExprRange(C, BO->getLHS(), opWidth);
   5172 
   5173       // If the divisor is constant, use that.
   5174       llvm::APSInt divisor;
   5175       if (BO->getRHS()->isIntegerConstantExpr(divisor, C)) {
   5176         unsigned log2 = divisor.logBase2(); // floor(log_2(divisor))
   5177         if (log2 >= L.Width)
   5178           L.Width = (L.NonNegative ? 0 : 1);
   5179         else
   5180           L.Width = std::min(L.Width - log2, MaxWidth);
   5181         return L;
   5182       }
   5183 
   5184       // Otherwise, just use the LHS's width.
   5185       IntRange R = GetExprRange(C, BO->getRHS(), opWidth);
   5186       return IntRange(L.Width, L.NonNegative && R.NonNegative);
   5187     }
   5188 
   5189     // The result of a remainder can't be larger than the result of
   5190     // either side.
   5191     case BO_Rem: {
   5192       // Don't 'pre-truncate' the operands.
   5193       unsigned opWidth = C.getIntWidth(GetExprType(E));
   5194       IntRange L = GetExprRange(C, BO->getLHS(), opWidth);
   5195       IntRange R = GetExprRange(C, BO->getRHS(), opWidth);
   5196 
   5197       IntRange meet = IntRange::meet(L, R);
   5198       meet.Width = std::min(meet.Width, MaxWidth);
   5199       return meet;
   5200     }
   5201 
   5202     // The default behavior is okay for these.
   5203     case BO_Mul:
   5204     case BO_Add:
   5205     case BO_Xor:
   5206     case BO_Or:
   5207       break;
   5208     }
   5209 
   5210     // The default case is to treat the operation as if it were closed
   5211     // on the narrowest type that encompasses both operands.
   5212     IntRange L = GetExprRange(C, BO->getLHS(), MaxWidth);
   5213     IntRange R = GetExprRange(C, BO->getRHS(), MaxWidth);
   5214     return IntRange::join(L, R);
   5215   }
   5216 
   5217   if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) {
   5218     switch (UO->getOpcode()) {
   5219     // Boolean-valued operations are white-listed.
   5220     case UO_LNot:
   5221       return IntRange::forBoolType();
   5222 
   5223     // Operations with opaque sources are black-listed.
   5224     case UO_Deref:
   5225     case UO_AddrOf: // should be impossible
   5226       return IntRange::forValueOfType(C, GetExprType(E));
   5227 
   5228     default:
   5229       return GetExprRange(C, UO->getSubExpr(), MaxWidth);
   5230     }
   5231   }
   5232 
   5233   if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E))
   5234     return GetExprRange(C, OVE->getSourceExpr(), MaxWidth);
   5235 
   5236   if (FieldDecl *BitField = E->getSourceBitField())
   5237     return IntRange(BitField->getBitWidthValue(C),
   5238                     BitField->getType()->isUnsignedIntegerOrEnumerationType());
   5239 
   5240   return IntRange::forValueOfType(C, GetExprType(E));
   5241 }
   5242 
   5243 static IntRange GetExprRange(ASTContext &C, Expr *E) {
   5244   return GetExprRange(C, E, C.getIntWidth(GetExprType(E)));
   5245 }
   5246 
   5247 /// Checks whether the given value, which currently has the given
   5248 /// source semantics, has the same value when coerced through the
   5249 /// target semantics.
   5250 static bool IsSameFloatAfterCast(const llvm::APFloat &value,
   5251                                  const llvm::fltSemantics &Src,
   5252                                  const llvm::fltSemantics &Tgt) {
   5253   llvm::APFloat truncated = value;
   5254 
   5255   bool ignored;
   5256   truncated.convert(Src, llvm::APFloat::rmNearestTiesToEven, &ignored);
   5257   truncated.convert(Tgt, llvm::APFloat::rmNearestTiesToEven, &ignored);
   5258 
   5259   return truncated.bitwiseIsEqual(value);
   5260 }
   5261 
   5262 /// Checks whether the given value, which currently has the given
   5263 /// source semantics, has the same value when coerced through the
   5264 /// target semantics.
   5265 ///
   5266 /// The value might be a vector of floats (or a complex number).
   5267 static bool IsSameFloatAfterCast(const APValue &value,
   5268                                  const llvm::fltSemantics &Src,
   5269                                  const llvm::fltSemantics &Tgt) {
   5270   if (value.isFloat())
   5271     return IsSameFloatAfterCast(value.getFloat(), Src, Tgt);
   5272 
   5273   if (value.isVector()) {
   5274     for (unsigned i = 0, e = value.getVectorLength(); i != e; ++i)
   5275       if (!IsSameFloatAfterCast(value.getVectorElt(i), Src, Tgt))
   5276         return false;
   5277     return true;
   5278   }
   5279 
   5280   assert(value.isComplexFloat());
   5281   return (IsSameFloatAfterCast(value.getComplexFloatReal(), Src, Tgt) &&
   5282           IsSameFloatAfterCast(value.getComplexFloatImag(), Src, Tgt));
   5283 }
   5284 
   5285 static void AnalyzeImplicitConversions(Sema &S, Expr *E, SourceLocation CC);
   5286 
   5287 static bool IsZero(Sema &S, Expr *E) {
   5288   // Suppress cases where we are comparing against an enum constant.
   5289   if (const DeclRefExpr *DR =
   5290       dyn_cast<DeclRefExpr>(E->IgnoreParenImpCasts()))
   5291     if (isa<EnumConstantDecl>(DR->getDecl()))
   5292       return false;
   5293 
   5294   // Suppress cases where the '0' value is expanded from a macro.
   5295   if (E->getLocStart().isMacroID())
   5296     return false;
   5297 
   5298   llvm::APSInt Value;
   5299   return E->isIntegerConstantExpr(Value, S.Context) && Value == 0;
   5300 }
   5301 
   5302 static bool HasEnumType(Expr *E) {
   5303   // Strip off implicit integral promotions.
   5304   while (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E)) {
   5305     if (ICE->getCastKind() != CK_IntegralCast &&
   5306         ICE->getCastKind() != CK_NoOp)
   5307       break;
   5308     E = ICE->getSubExpr();
   5309   }
   5310 
   5311   return E->getType()->isEnumeralType();
   5312 }
   5313 
   5314 static void CheckTrivialUnsignedComparison(Sema &S, BinaryOperator *E) {
   5315   // Disable warning in template instantiations.
   5316   if (!S.ActiveTemplateInstantiations.empty())
   5317     return;
   5318 
   5319   BinaryOperatorKind op = E->getOpcode();
   5320   if (E->isValueDependent())
   5321     return;
   5322 
   5323   if (op == BO_LT && IsZero(S, E->getRHS())) {
   5324     S.Diag(E->getOperatorLoc(), diag::warn_lunsigned_always_true_comparison)
   5325       << "< 0" << "false" << HasEnumType(E->getLHS())
   5326       << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange();
   5327   } else if (op == BO_GE && IsZero(S, E->getRHS())) {
   5328     S.Diag(E->getOperatorLoc(), diag::warn_lunsigned_always_true_comparison)
   5329       << ">= 0" << "true" << HasEnumType(E->getLHS())
   5330       << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange();
   5331   } else if (op == BO_GT && IsZero(S, E->getLHS())) {
   5332     S.Diag(E->getOperatorLoc(), diag::warn_runsigned_always_true_comparison)
   5333       << "0 >" << "false" << HasEnumType(E->getRHS())
   5334       << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange();
   5335   } else if (op == BO_LE && IsZero(S, E->getLHS())) {
   5336     S.Diag(E->getOperatorLoc(), diag::warn_runsigned_always_true_comparison)
   5337       << "0 <=" << "true" << HasEnumType(E->getRHS())
   5338       << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange();
   5339   }
   5340 }
   5341 
   5342 static void DiagnoseOutOfRangeComparison(Sema &S, BinaryOperator *E,
   5343                                          Expr *Constant, Expr *Other,
   5344                                          llvm::APSInt Value,
   5345                                          bool RhsConstant) {
   5346   // Disable warning in template instantiations.
   5347   if (!S.ActiveTemplateInstantiations.empty())
   5348     return;
   5349 
   5350   // TODO: Investigate using GetExprRange() to get tighter bounds
   5351   // on the bit ranges.
   5352   QualType OtherT = Other->getType();
   5353   IntRange OtherRange = IntRange::forValueOfType(S.Context, OtherT);
   5354   unsigned OtherWidth = OtherRange.Width;
   5355 
   5356   bool OtherIsBooleanType = Other->isKnownToHaveBooleanValue();
   5357 
   5358   // 0 values are handled later by CheckTrivialUnsignedComparison().
   5359   if ((Value == 0) && (!OtherIsBooleanType))
   5360     return;
   5361 
   5362   BinaryOperatorKind op = E->getOpcode();
   5363   bool IsTrue = true;
   5364 
   5365   // Used for diagnostic printout.
   5366   enum {
   5367     LiteralConstant = 0,
   5368     CXXBoolLiteralTrue,
   5369     CXXBoolLiteralFalse
   5370   } LiteralOrBoolConstant = LiteralConstant;
   5371 
   5372   if (!OtherIsBooleanType) {
   5373     QualType ConstantT = Constant->getType();
   5374     QualType CommonT = E->getLHS()->getType();
   5375 
   5376     if (S.Context.hasSameUnqualifiedType(OtherT, ConstantT))
   5377       return;
   5378     assert((OtherT->isIntegerType() && ConstantT->isIntegerType()) &&
   5379            "comparison with non-integer type");
   5380 
   5381     bool ConstantSigned = ConstantT->isSignedIntegerType();
   5382     bool CommonSigned = CommonT->isSignedIntegerType();
   5383 
   5384     bool EqualityOnly = false;
   5385 
   5386     if (CommonSigned) {
   5387       // The common type is signed, therefore no signed to unsigned conversion.
   5388       if (!OtherRange.NonNegative) {
   5389         // Check that the constant is representable in type OtherT.
   5390         if (ConstantSigned) {
   5391           if (OtherWidth >= Value.getMinSignedBits())
   5392             return;
   5393         } else { // !ConstantSigned
   5394           if (OtherWidth >= Value.getActiveBits() + 1)
   5395             return;
   5396         }
   5397       } else { // !OtherSigned
   5398                // Check that the constant is representable in type OtherT.
   5399         // Negative values are out of range.
   5400         if (ConstantSigned) {
   5401           if (Value.isNonNegative() && OtherWidth >= Value.getActiveBits())
   5402             return;
   5403         } else { // !ConstantSigned
   5404           if (OtherWidth >= Value.getActiveBits())
   5405             return;
   5406         }
   5407       }
   5408     } else { // !CommonSigned
   5409       if (OtherRange.NonNegative) {
   5410         if (OtherWidth >= Value.getActiveBits())
   5411           return;
   5412       } else { // OtherSigned
   5413         assert(!ConstantSigned &&
   5414                "Two signed types converted to unsigned types.");
   5415         // Check to see if the constant is representable in OtherT.
   5416         if (OtherWidth > Value.getActiveBits())
   5417           return;
   5418         // Check to see if the constant is equivalent to a negative value
   5419         // cast to CommonT.
   5420         if (S.Context.getIntWidth(ConstantT) ==
   5421                 S.Context.getIntWidth(CommonT) &&
   5422             Value.isNegative() && Value.getMinSignedBits() <= OtherWidth)
   5423           return;
   5424         // The constant value rests between values that OtherT can represent
   5425         // after conversion.  Relational comparison still works, but equality
   5426         // comparisons will be tautological.
   5427         EqualityOnly = true;
   5428       }
   5429     }
   5430 
   5431     bool PositiveConstant = !ConstantSigned || Value.isNonNegative();
   5432 
   5433     if (op == BO_EQ || op == BO_NE) {
   5434       IsTrue = op == BO_NE;
   5435     } else if (EqualityOnly) {
   5436       return;
   5437     } else if (RhsConstant) {
   5438       if (op == BO_GT || op == BO_GE)
   5439         IsTrue = !PositiveConstant;
   5440       else // op == BO_LT || op == BO_LE
   5441         IsTrue = PositiveConstant;
   5442     } else {
   5443       if (op == BO_LT || op == BO_LE)
   5444         IsTrue = !PositiveConstant;
   5445       else // op == BO_GT || op == BO_GE
   5446         IsTrue = PositiveConstant;
   5447     }
   5448   } else {
   5449     // Other isKnownToHaveBooleanValue
   5450     enum CompareBoolWithConstantResult { AFals, ATrue, Unkwn };
   5451     enum ConstantValue { LT_Zero, Zero, One, GT_One, SizeOfConstVal };
   5452     enum ConstantSide { Lhs, Rhs, SizeOfConstSides };
   5453 
   5454     static const struct LinkedConditions {
   5455       CompareBoolWithConstantResult BO_LT_OP[SizeOfConstSides][SizeOfConstVal];
   5456       CompareBoolWithConstantResult BO_GT_OP[SizeOfConstSides][SizeOfConstVal];
   5457       CompareBoolWithConstantResult BO_LE_OP[SizeOfConstSides][SizeOfConstVal];
   5458       CompareBoolWithConstantResult BO_GE_OP[SizeOfConstSides][SizeOfConstVal];
   5459       CompareBoolWithConstantResult BO_EQ_OP[SizeOfConstSides][SizeOfConstVal];
   5460       CompareBoolWithConstantResult BO_NE_OP[SizeOfConstSides][SizeOfConstVal];
   5461 
   5462     } TruthTable = {
   5463         // Constant on LHS.              | Constant on RHS.              |
   5464         // LT_Zero| Zero  | One   |GT_One| LT_Zero| Zero  | One   |GT_One|
   5465         { { ATrue, Unkwn, AFals, AFals }, { AFals, AFals, Unkwn, ATrue } },
   5466         { { AFals, AFals, Unkwn, ATrue }, { ATrue, Unkwn, AFals, AFals } },
   5467         { { ATrue, ATrue, Unkwn, AFals }, { AFals, Unkwn, ATrue, ATrue } },
   5468         { { AFals, Unkwn, ATrue, ATrue }, { ATrue, ATrue, Unkwn, AFals } },
   5469         { { AFals, Unkwn, Unkwn, AFals }, { AFals, Unkwn, Unkwn, AFals } },
   5470         { { ATrue, Unkwn, Unkwn, ATrue }, { ATrue, Unkwn, Unkwn, ATrue } }
   5471       };
   5472 
   5473     bool ConstantIsBoolLiteral = isa<CXXBoolLiteralExpr>(Constant);
   5474 
   5475     enum ConstantValue ConstVal = Zero;
   5476     if (Value.isUnsigned() || Value.isNonNegative()) {
   5477       if (Value == 0) {
   5478         LiteralOrBoolConstant =
   5479             ConstantIsBoolLiteral ? CXXBoolLiteralFalse : LiteralConstant;
   5480         ConstVal = Zero;
   5481       } else if (Value == 1) {
   5482         LiteralOrBoolConstant =
   5483             ConstantIsBoolLiteral ? CXXBoolLiteralTrue : LiteralConstant;
   5484         ConstVal = One;
   5485       } else {
   5486         LiteralOrBoolConstant = LiteralConstant;
   5487         ConstVal = GT_One;
   5488       }
   5489     } else {
   5490       ConstVal = LT_Zero;
   5491     }
   5492 
   5493     CompareBoolWithConstantResult CmpRes;
   5494 
   5495     switch (op) {
   5496     case BO_LT:
   5497       CmpRes = TruthTable.BO_LT_OP[RhsConstant][ConstVal];
   5498       break;
   5499     case BO_GT:
   5500       CmpRes = TruthTable.BO_GT_OP[RhsConstant][ConstVal];
   5501       break;
   5502     case BO_LE:
   5503       CmpRes = TruthTable.BO_LE_OP[RhsConstant][ConstVal];
   5504       break;
   5505     case BO_GE:
   5506       CmpRes = TruthTable.BO_GE_OP[RhsConstant][ConstVal];
   5507       break;
   5508     case BO_EQ:
   5509       CmpRes = TruthTable.BO_EQ_OP[RhsConstant][ConstVal];
   5510       break;
   5511     case BO_NE:
   5512       CmpRes = TruthTable.BO_NE_OP[RhsConstant][ConstVal];
   5513       break;
   5514     default:
   5515       CmpRes = Unkwn;
   5516       break;
   5517     }
   5518 
   5519     if (CmpRes == AFals) {
   5520       IsTrue = false;
   5521     } else if (CmpRes == ATrue) {
   5522       IsTrue = true;
   5523     } else {
   5524       return;
   5525     }
   5526   }
   5527 
   5528   // If this is a comparison to an enum constant, include that
   5529   // constant in the diagnostic.
   5530   const EnumConstantDecl *ED = nullptr;
   5531   if (const DeclRefExpr *DR = dyn_cast<DeclRefExpr>(Constant))
   5532     ED = dyn_cast<EnumConstantDecl>(DR->getDecl());
   5533 
   5534   SmallString<64> PrettySourceValue;
   5535   llvm::raw_svector_ostream OS(PrettySourceValue);
   5536   if (ED)
   5537     OS << '\'' << *ED << "' (" << Value << ")";
   5538   else
   5539     OS << Value;
   5540 
   5541   S.DiagRuntimeBehavior(
   5542     E->getOperatorLoc(), E,
   5543     S.PDiag(diag::warn_out_of_range_compare)
   5544         << OS.str() << LiteralOrBoolConstant
   5545         << OtherT << (OtherIsBooleanType && !OtherT->isBooleanType()) << IsTrue
   5546         << E->getLHS()->getSourceRange() << E->getRHS()->getSourceRange());
   5547 }
   5548 
   5549 /// Analyze the operands of the given comparison.  Implements the
   5550 /// fallback case from AnalyzeComparison.
   5551 static void AnalyzeImpConvsInComparison(Sema &S, BinaryOperator *E) {
   5552   AnalyzeImplicitConversions(S, E->getLHS(), E->getOperatorLoc());
   5553   AnalyzeImplicitConversions(S, E->getRHS(), E->getOperatorLoc());
   5554 }
   5555 
   5556 /// \brief Implements -Wsign-compare.
   5557 ///
   5558 /// \param E the binary operator to check for warnings
   5559 static void AnalyzeComparison(Sema &S, BinaryOperator *E) {
   5560   // The type the comparison is being performed in.
   5561   QualType T = E->getLHS()->getType();
   5562   assert(S.Context.hasSameUnqualifiedType(T, E->getRHS()->getType())
   5563          && "comparison with mismatched types");
   5564   if (E->isValueDependent())
   5565     return AnalyzeImpConvsInComparison(S, E);
   5566 
   5567   Expr *LHS = E->getLHS()->IgnoreParenImpCasts();
   5568   Expr *RHS = E->getRHS()->IgnoreParenImpCasts();
   5569 
   5570   bool IsComparisonConstant = false;
   5571 
   5572   // Check whether an integer constant comparison results in a value
   5573   // of 'true' or 'false'.
   5574   if (T->isIntegralType(S.Context)) {
   5575     llvm::APSInt RHSValue;
   5576     bool IsRHSIntegralLiteral =
   5577       RHS->isIntegerConstantExpr(RHSValue, S.Context);
   5578     llvm::APSInt LHSValue;
   5579     bool IsLHSIntegralLiteral =
   5580       LHS->isIntegerConstantExpr(LHSValue, S.Context);
   5581     if (IsRHSIntegralLiteral && !IsLHSIntegralLiteral)
   5582         DiagnoseOutOfRangeComparison(S, E, RHS, LHS, RHSValue, true);
   5583     else if (!IsRHSIntegralLiteral && IsLHSIntegralLiteral)
   5584       DiagnoseOutOfRangeComparison(S, E, LHS, RHS, LHSValue, false);
   5585     else
   5586       IsComparisonConstant =
   5587         (IsRHSIntegralLiteral && IsLHSIntegralLiteral);
   5588   } else if (!T->hasUnsignedIntegerRepresentation())
   5589       IsComparisonConstant = E->isIntegerConstantExpr(S.Context);
   5590 
   5591   // We don't do anything special if this isn't an unsigned integral
   5592   // comparison:  we're only interested in integral comparisons, and
   5593   // signed comparisons only happen in cases we don't care to warn about.
   5594   //
   5595   // We also don't care about value-dependent expressions or expressions
   5596   // whose result is a constant.
   5597   if (!T->hasUnsignedIntegerRepresentation() || IsComparisonConstant)
   5598     return AnalyzeImpConvsInComparison(S, E);
   5599 
   5600   // Check to see if one of the (unmodified) operands is of different
   5601   // signedness.
   5602   Expr *signedOperand, *unsignedOperand;
   5603   if (LHS->getType()->hasSignedIntegerRepresentation()) {
   5604     assert(!RHS->getType()->hasSignedIntegerRepresentation() &&
   5605            "unsigned comparison between two signed integer expressions?");
   5606     signedOperand = LHS;
   5607     unsignedOperand = RHS;
   5608   } else if (RHS->getType()->hasSignedIntegerRepresentation()) {
   5609     signedOperand = RHS;
   5610     unsignedOperand = LHS;
   5611   } else {
   5612     CheckTrivialUnsignedComparison(S, E);
   5613     return AnalyzeImpConvsInComparison(S, E);
   5614   }
   5615 
   5616   // Otherwise, calculate the effective range of the signed operand.
   5617   IntRange signedRange = GetExprRange(S.Context, signedOperand);
   5618 
   5619   // Go ahead and analyze implicit conversions in the operands.  Note
   5620   // that we skip the implicit conversions on both sides.
   5621   AnalyzeImplicitConversions(S, LHS, E->getOperatorLoc());
   5622   AnalyzeImplicitConversions(S, RHS, E->getOperatorLoc());
   5623 
   5624   // If the signed range is non-negative, -Wsign-compare won't fire,
   5625   // but we should still check for comparisons which are always true
   5626   // or false.
   5627   if (signedRange.NonNegative)
   5628     return CheckTrivialUnsignedComparison(S, E);
   5629 
   5630   // For (in)equality comparisons, if the unsigned operand is a
   5631   // constant which cannot collide with a overflowed signed operand,
   5632   // then reinterpreting the signed operand as unsigned will not
   5633   // change the result of the comparison.
   5634   if (E->isEqualityOp()) {
   5635     unsigned comparisonWidth = S.Context.getIntWidth(T);
   5636     IntRange unsignedRange = GetExprRange(S.Context, unsignedOperand);
   5637 
   5638     // We should never be unable to prove that the unsigned operand is
   5639     // non-negative.
   5640     assert(unsignedRange.NonNegative && "unsigned range includes negative?");
   5641 
   5642     if (unsignedRange.Width < comparisonWidth)
   5643       return;
   5644   }
   5645 
   5646   S.DiagRuntimeBehavior(E->getOperatorLoc(), E,
   5647     S.PDiag(diag::warn_mixed_sign_comparison)
   5648       << LHS->getType() << RHS->getType()
   5649       << LHS->getSourceRange() << RHS->getSourceRange());
   5650 }
   5651 
   5652 /// Analyzes an attempt to assign the given value to a bitfield.
   5653 ///
   5654 /// Returns true if there was something fishy about the attempt.
   5655 static bool AnalyzeBitFieldAssignment(Sema &S, FieldDecl *Bitfield, Expr *Init,
   5656                                       SourceLocation InitLoc) {
   5657   assert(Bitfield->isBitField());
   5658   if (Bitfield->isInvalidDecl())
   5659     return false;
   5660 
   5661   // White-list bool bitfields.
   5662   if (Bitfield->getType()->isBooleanType())
   5663     return false;
   5664 
   5665   // Ignore value- or type-dependent expressions.
   5666   if (Bitfield->getBitWidth()->isValueDependent() ||
   5667       Bitfield->getBitWidth()->isTypeDependent() ||
   5668       Init->isValueDependent() ||
   5669       Init->isTypeDependent())
   5670     return false;
   5671 
   5672   Expr *OriginalInit = Init->IgnoreParenImpCasts();
   5673 
   5674   llvm::APSInt Value;
   5675   if (!OriginalInit->EvaluateAsInt(Value, S.Context, Expr::SE_AllowSideEffects))
   5676     return false;
   5677 
   5678   unsigned OriginalWidth = Value.getBitWidth();
   5679   unsigned FieldWidth = Bitfield->getBitWidthValue(S.Context);
   5680 
   5681   if (OriginalWidth <= FieldWidth)
   5682     return false;
   5683 
   5684   // Compute the value which the bitfield will contain.
   5685   llvm::APSInt TruncatedValue = Value.trunc(FieldWidth);
   5686   TruncatedValue.setIsSigned(Bitfield->getType()->isSignedIntegerType());
   5687 
   5688   // Check whether the stored value is equal to the original value.
   5689   TruncatedValue = TruncatedValue.extend(OriginalWidth);
   5690   if (llvm::APSInt::isSameValue(Value, TruncatedValue))
   5691     return false;
   5692 
   5693   // Special-case bitfields of width 1: booleans are naturally 0/1, and
   5694   // therefore don't strictly fit into a signed bitfield of width 1.
   5695   if (FieldWidth == 1 && Value == 1)
   5696     return false;
   5697 
   5698   std::string PrettyValue = Value.toString(10);
   5699   std::string PrettyTrunc = TruncatedValue.toString(10);
   5700 
   5701   S.Diag(InitLoc, diag::warn_impcast_bitfield_precision_constant)
   5702     << PrettyValue << PrettyTrunc << OriginalInit->getType()
   5703     << Init->getSourceRange();
   5704 
   5705   return true;
   5706 }
   5707 
   5708 /// Analyze the given simple or compound assignment for warning-worthy
   5709 /// operations.
   5710 static void AnalyzeAssignment(Sema &S, BinaryOperator *E) {
   5711   // Just recurse on the LHS.
   5712   AnalyzeImplicitConversions(S, E->getLHS(), E->getOperatorLoc());
   5713 
   5714   // We want to recurse on the RHS as normal unless we're assigning to
   5715   // a bitfield.
   5716   if (FieldDecl *Bitfield = E->getLHS()->getSourceBitField()) {
   5717     if (AnalyzeBitFieldAssignment(S, Bitfield, E->getRHS(),
   5718                                   E->getOperatorLoc())) {
   5719       // Recurse, ignoring any implicit conversions on the RHS.
   5720       return AnalyzeImplicitConversions(S, E->getRHS()->IgnoreParenImpCasts(),
   5721                                         E->getOperatorLoc());
   5722     }
   5723   }
   5724 
   5725   AnalyzeImplicitConversions(S, E->getRHS(), E->getOperatorLoc());
   5726 }
   5727 
   5728 /// Diagnose an implicit cast;  purely a helper for CheckImplicitConversion.
   5729 static void DiagnoseImpCast(Sema &S, Expr *E, QualType SourceType, QualType T,
   5730                             SourceLocation CContext, unsigned diag,
   5731                             bool pruneControlFlow = false) {
   5732   if (pruneControlFlow) {
   5733     S.DiagRuntimeBehavior(E->getExprLoc(), E,
   5734                           S.PDiag(diag)
   5735                             << SourceType << T << E->getSourceRange()
   5736                             << SourceRange(CContext));
   5737     return;
   5738   }
   5739   S.Diag(E->getExprLoc(), diag)
   5740     << SourceType << T << E->getSourceRange() << SourceRange(CContext);
   5741 }
   5742 
   5743 /// Diagnose an implicit cast;  purely a helper for CheckImplicitConversion.
   5744 static void DiagnoseImpCast(Sema &S, Expr *E, QualType T,
   5745                             SourceLocation CContext, unsigned diag,
   5746                             bool pruneControlFlow = false) {
   5747   DiagnoseImpCast(S, E, E->getType(), T, CContext, diag, pruneControlFlow);
   5748 }
   5749 
   5750 /// Diagnose an implicit cast from a literal expression. Does not warn when the
   5751 /// cast wouldn't lose information.
   5752 void DiagnoseFloatingLiteralImpCast(Sema &S, FloatingLiteral *FL, QualType T,
   5753                                     SourceLocation CContext) {
   5754   // Try to convert the literal exactly to an integer. If we can, don't warn.
   5755   bool isExact = false;
   5756   const llvm::APFloat &Value = FL->getValue();
   5757   llvm::APSInt IntegerValue(S.Context.getIntWidth(T),
   5758                             T->hasUnsignedIntegerRepresentation());
   5759   if (Value.convertToInteger(IntegerValue,
   5760                              llvm::APFloat::rmTowardZero, &isExact)
   5761       == llvm::APFloat::opOK && isExact)
   5762     return;
   5763 
   5764   // FIXME: Force the precision of the source value down so we don't print
   5765   // digits which are usually useless (we don't really care here if we
   5766   // truncate a digit by accident in edge cases).  Ideally, APFloat::toString
   5767   // would automatically print the shortest representation, but it's a bit
   5768   // tricky to implement.
   5769   SmallString<16> PrettySourceValue;
   5770   unsigned precision = llvm::APFloat::semanticsPrecision(Value.getSemantics());
   5771   precision = (precision * 59 + 195) / 196;
   5772   Value.toString(PrettySourceValue, precision);
   5773 
   5774   SmallString<16> PrettyTargetValue;
   5775   if (T->isSpecificBuiltinType(BuiltinType::Bool))
   5776     PrettyTargetValue = IntegerValue == 0 ? "false" : "true";
   5777   else
   5778     IntegerValue.toString(PrettyTargetValue);
   5779 
   5780   S.Diag(FL->getExprLoc(), diag::warn_impcast_literal_float_to_integer)
   5781     << FL->getType() << T.getUnqualifiedType() << PrettySourceValue
   5782     << PrettyTargetValue << FL->getSourceRange() << SourceRange(CContext);
   5783 }
   5784 
   5785 std::string PrettyPrintInRange(const llvm::APSInt &Value, IntRange Range) {
   5786   if (!Range.Width) return "0";
   5787 
   5788   llvm::APSInt ValueInRange = Value;
   5789   ValueInRange.setIsSigned(!Range.NonNegative);
   5790   ValueInRange = ValueInRange.trunc(Range.Width);
   5791   return ValueInRange.toString(10);
   5792 }
   5793 
   5794 static bool IsImplicitBoolFloatConversion(Sema &S, Expr *Ex, bool ToBool) {
   5795   if (!isa<ImplicitCastExpr>(Ex))
   5796     return false;
   5797 
   5798   Expr *InnerE = Ex->IgnoreParenImpCasts();
   5799   const Type *Target = S.Context.getCanonicalType(Ex->getType()).getTypePtr();
   5800   const Type *Source =
   5801     S.Context.getCanonicalType(InnerE->getType()).getTypePtr();
   5802   if (Target->isDependentType())
   5803     return false;
   5804 
   5805   const BuiltinType *FloatCandidateBT =
   5806     dyn_cast<BuiltinType>(ToBool ? Source : Target);
   5807   const Type *BoolCandidateType = ToBool ? Target : Source;
   5808 
   5809   return (BoolCandidateType->isSpecificBuiltinType(BuiltinType::Bool) &&
   5810           FloatCandidateBT && (FloatCandidateBT->isFloatingPoint()));
   5811 }
   5812 
   5813 void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall,
   5814                                       SourceLocation CC) {
   5815   unsigned NumArgs = TheCall->getNumArgs();
   5816   for (unsigned i = 0; i < NumArgs; ++i) {
   5817     Expr *CurrA = TheCall->getArg(i);
   5818     if (!IsImplicitBoolFloatConversion(S, CurrA, true))
   5819       continue;
   5820 
   5821     bool IsSwapped = ((i > 0) &&
   5822         IsImplicitBoolFloatConversion(S, TheCall->getArg(i - 1), false));
   5823     IsSwapped |= ((i < (NumArgs - 1)) &&
   5824         IsImplicitBoolFloatConversion(S, TheCall->getArg(i + 1), false));
   5825     if (IsSwapped) {
   5826       // Warn on this floating-point to bool conversion.
   5827       DiagnoseImpCast(S, CurrA->IgnoreParenImpCasts(),
   5828                       CurrA->getType(), CC,
   5829                       diag::warn_impcast_floating_point_to_bool);
   5830     }
   5831   }
   5832 }
   5833 
   5834 void CheckImplicitConversion(Sema &S, Expr *E, QualType T,
   5835                              SourceLocation CC, bool *ICContext = nullptr) {
   5836   if (E->isTypeDependent() || E->isValueDependent()) return;
   5837 
   5838   const Type *Source = S.Context.getCanonicalType(E->getType()).getTypePtr();
   5839   const Type *Target = S.Context.getCanonicalType(T).getTypePtr();
   5840   if (Source == Target) return;
   5841   if (Target->isDependentType()) return;
   5842 
   5843   // If the conversion context location is invalid don't complain. We also
   5844   // don't want to emit a warning if the issue occurs from the expansion of
   5845   // a system macro. The problem is that 'getSpellingLoc()' is slow, so we
   5846   // delay this check as long as possible. Once we detect we are in that
   5847   // scenario, we just return.
   5848   if (CC.isInvalid())
   5849     return;
   5850 
   5851   // Diagnose implicit casts to bool.
   5852   if (Target->isSpecificBuiltinType(BuiltinType::Bool)) {
   5853     if (isa<StringLiteral>(E))
   5854       // Warn on string literal to bool.  Checks for string literals in logical
   5855       // and expressions, for instance, assert(0 && "error here"), are
   5856       // prevented by a check in AnalyzeImplicitConversions().
   5857       return DiagnoseImpCast(S, E, T, CC,
   5858                              diag::warn_impcast_string_literal_to_bool);
   5859     if (isa<ObjCStringLiteral>(E) || isa<ObjCArrayLiteral>(E) ||
   5860         isa<ObjCDictionaryLiteral>(E) || isa<ObjCBoxedExpr>(E)) {
   5861       // This covers the literal expressions that evaluate to Objective-C
   5862       // objects.
   5863       return DiagnoseImpCast(S, E, T, CC,
   5864                              diag::warn_impcast_objective_c_literal_to_bool);
   5865     }
   5866     if (Source->isPointerType() || Source->canDecayToPointerType()) {
   5867       // Warn on pointer to bool conversion that is always true.
   5868       S.DiagnoseAlwaysNonNullPointer(E, Expr::NPCK_NotNull, /*IsEqual*/ false,
   5869                                      SourceRange(CC));
   5870     }
   5871   }
   5872 
   5873   // Strip vector types.
   5874   if (isa<VectorType>(Source)) {
   5875     if (!isa<VectorType>(Target)) {
   5876       if (S.SourceMgr.isInSystemMacro(CC))
   5877         return;
   5878       return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_vector_scalar);
   5879     }
   5880 
   5881     // If the vector cast is cast between two vectors of the same size, it is
   5882     // a bitcast, not a conversion.
   5883     if (S.Context.getTypeSize(Source) == S.Context.getTypeSize(Target))
   5884       return;
   5885 
   5886     Source = cast<VectorType>(Source)->getElementType().getTypePtr();
   5887     Target = cast<VectorType>(Target)->getElementType().getTypePtr();
   5888   }
   5889   if (auto VecTy = dyn_cast<VectorType>(Target))
   5890     Target = VecTy->getElementType().getTypePtr();
   5891 
   5892   // Strip complex types.
   5893   if (isa<ComplexType>(Source)) {
   5894     if (!isa<ComplexType>(Target)) {
   5895       if (S.SourceMgr.isInSystemMacro(CC))
   5896         return;
   5897 
   5898       return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_complex_scalar);
   5899     }
   5900 
   5901     Source = cast<ComplexType>(Source)->getElementType().getTypePtr();
   5902     Target = cast<ComplexType>(Target)->getElementType().getTypePtr();
   5903   }
   5904 
   5905   const BuiltinType *SourceBT = dyn_cast<BuiltinType>(Source);
   5906   const BuiltinType *TargetBT = dyn_cast<BuiltinType>(Target);
   5907 
   5908   // If the source is floating point...
   5909   if (SourceBT && SourceBT->isFloatingPoint()) {
   5910     // ...and the target is floating point...
   5911     if (TargetBT && TargetBT->isFloatingPoint()) {
   5912       // ...then warn if we're dropping FP rank.
   5913 
   5914       // Builtin FP kinds are ordered by increasing FP rank.
   5915       if (SourceBT->getKind() > TargetBT->getKind()) {
   5916         // Don't warn about float constants that are precisely
   5917         // representable in the target type.
   5918         Expr::EvalResult result;
   5919         if (E->EvaluateAsRValue(result, S.Context)) {
   5920           // Value might be a float, a float vector, or a float complex.
   5921           if (IsSameFloatAfterCast(result.Val,
   5922                    S.Context.getFloatTypeSemantics(QualType(TargetBT, 0)),
   5923                    S.Context.getFloatTypeSemantics(QualType(SourceBT, 0))))
   5924             return;
   5925         }
   5926 
   5927         if (S.SourceMgr.isInSystemMacro(CC))
   5928           return;
   5929 
   5930         DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_float_precision);
   5931       }
   5932       return;
   5933     }
   5934 
   5935     // If the target is integral, always warn.
   5936     if (TargetBT && TargetBT->isInteger()) {
   5937       if (S.SourceMgr.isInSystemMacro(CC))
   5938         return;
   5939 
   5940       Expr *InnerE = E->IgnoreParenImpCasts();
   5941       // We also want to warn on, e.g., "int i = -1.234"
   5942       if (UnaryOperator *UOp = dyn_cast<UnaryOperator>(InnerE))
   5943         if (UOp->getOpcode() == UO_Minus || UOp->getOpcode() == UO_Plus)
   5944           InnerE = UOp->getSubExpr()->IgnoreParenImpCasts();
   5945 
   5946       if (FloatingLiteral *FL = dyn_cast<FloatingLiteral>(InnerE)) {
   5947         DiagnoseFloatingLiteralImpCast(S, FL, T, CC);
   5948       } else {
   5949         DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_float_integer);
   5950       }
   5951     }
   5952 
   5953     // If the target is bool, warn if expr is a function or method call.
   5954     if (Target->isSpecificBuiltinType(BuiltinType::Bool) &&
   5955         isa<CallExpr>(E)) {
   5956       // Check last argument of function call to see if it is an
   5957       // implicit cast from a type matching the type the result
   5958       // is being cast to.
   5959       CallExpr *CEx = cast<CallExpr>(E);
   5960       unsigned NumArgs = CEx->getNumArgs();
   5961       if (NumArgs > 0) {
   5962         Expr *LastA = CEx->getArg(NumArgs - 1);
   5963         Expr *InnerE = LastA->IgnoreParenImpCasts();
   5964         const Type *InnerType =
   5965           S.Context.getCanonicalType(InnerE->getType()).getTypePtr();
   5966         if (isa<ImplicitCastExpr>(LastA) && (InnerType == Target)) {
   5967           // Warn on this floating-point to bool conversion
   5968           DiagnoseImpCast(S, E, T, CC,
   5969                           diag::warn_impcast_floating_point_to_bool);
   5970         }
   5971       }
   5972     }
   5973     return;
   5974   }
   5975 
   5976   if ((E->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull)
   5977            == Expr::NPCK_GNUNull) && !Target->isAnyPointerType()
   5978       && !Target->isBlockPointerType() && !Target->isMemberPointerType()
   5979       && Target->isScalarType() && !Target->isNullPtrType()) {
   5980     SourceLocation Loc = E->getSourceRange().getBegin();
   5981     if (Loc.isMacroID())
   5982       Loc = S.SourceMgr.getImmediateExpansionRange(Loc).first;
   5983     if (!Loc.isMacroID() || CC.isMacroID())
   5984       S.Diag(Loc, diag::warn_impcast_null_pointer_to_integer)
   5985           << T << clang::SourceRange(CC)
   5986           << FixItHint::CreateReplacement(Loc,
   5987                                           S.getFixItZeroLiteralForType(T, Loc));
   5988   }
   5989 
   5990   if (!Source->isIntegerType() || !Target->isIntegerType())
   5991     return;
   5992 
   5993   // TODO: remove this early return once the false positives for constant->bool
   5994   // in templates, macros, etc, are reduced or removed.
   5995   if (Target->isSpecificBuiltinType(BuiltinType::Bool))
   5996     return;
   5997 
   5998   IntRange SourceRange = GetExprRange(S.Context, E);
   5999   IntRange TargetRange = IntRange::forTargetOfCanonicalType(S.Context, Target);
   6000 
   6001   if (SourceRange.Width > TargetRange.Width) {
   6002     // If the source is a constant, use a default-on diagnostic.
   6003     // TODO: this should happen for bitfield stores, too.
   6004     llvm::APSInt Value(32);
   6005     if (E->isIntegerConstantExpr(Value, S.Context)) {
   6006       if (S.SourceMgr.isInSystemMacro(CC))
   6007         return;
   6008 
   6009       std::string PrettySourceValue = Value.toString(10);
   6010       std::string PrettyTargetValue = PrettyPrintInRange(Value, TargetRange);
   6011 
   6012       S.DiagRuntimeBehavior(E->getExprLoc(), E,
   6013         S.PDiag(diag::warn_impcast_integer_precision_constant)
   6014             << PrettySourceValue << PrettyTargetValue
   6015             << E->getType() << T << E->getSourceRange()
   6016             << clang::SourceRange(CC));
   6017       return;
   6018     }
   6019 
   6020     // People want to build with -Wshorten-64-to-32 and not -Wconversion.
   6021     if (S.SourceMgr.isInSystemMacro(CC))
   6022       return;
   6023 
   6024     if (TargetRange.Width == 32 && S.Context.getIntWidth(E->getType()) == 64)
   6025       return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_64_32,
   6026                              /* pruneControlFlow */ true);
   6027     return DiagnoseImpCast(S, E, T, CC, diag::warn_impcast_integer_precision);
   6028   }
   6029 
   6030   if ((TargetRange.NonNegative && !SourceRange.NonNegative) ||
   6031       (!TargetRange.NonNegative && SourceRange.NonNegative &&
   6032        SourceRange.Width == TargetRange.Width)) {
   6033 
   6034     if (S.SourceMgr.isInSystemMacro(CC))
   6035       return;
   6036 
   6037     unsigned DiagID = diag::warn_impcast_integer_sign;
   6038 
   6039     // Traditionally, gcc has warned about this under -Wsign-compare.
   6040     // We also want to warn about it in -Wconversion.
   6041     // So if -Wconversion is off, use a completely identical diagnostic
   6042     // in the sign-compare group.
   6043     // The conditional-checking code will
   6044     if (ICContext) {
   6045       DiagID = diag::warn_impcast_integer_sign_conditional;
   6046       *ICContext = true;
   6047     }
   6048 
   6049     return DiagnoseImpCast(S, E, T, CC, DiagID);
   6050   }
   6051 
   6052   // Diagnose conversions between different enumeration types.
   6053   // In C, we pretend that the type of an EnumConstantDecl is its enumeration
   6054   // type, to give us better diagnostics.
   6055   QualType SourceType = E->getType();
   6056   if (!S.getLangOpts().CPlusPlus) {
   6057     if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
   6058       if (EnumConstantDecl *ECD = dyn_cast<EnumConstantDecl>(DRE->getDecl())) {
   6059         EnumDecl *Enum = cast<EnumDecl>(ECD->getDeclContext());
   6060         SourceType = S.Context.getTypeDeclType(Enum);
   6061         Source = S.Context.getCanonicalType(SourceType).getTypePtr();
   6062       }
   6063   }
   6064 
   6065   if (const EnumType *SourceEnum = Source->getAs<EnumType>())
   6066     if (const EnumType *TargetEnum = Target->getAs<EnumType>())
   6067       if (SourceEnum->getDecl()->hasNameForLinkage() &&
   6068           TargetEnum->getDecl()->hasNameForLinkage() &&
   6069           SourceEnum != TargetEnum) {
   6070         if (S.SourceMgr.isInSystemMacro(CC))
   6071           return;
   6072 
   6073         return DiagnoseImpCast(S, E, SourceType, T, CC,
   6074                                diag::warn_impcast_different_enum_types);
   6075       }
   6076 
   6077   return;
   6078 }
   6079 
   6080 void CheckConditionalOperator(Sema &S, ConditionalOperator *E,
   6081                               SourceLocation CC, QualType T);
   6082 
   6083 void CheckConditionalOperand(Sema &S, Expr *E, QualType T,
   6084                              SourceLocation CC, bool &ICContext) {
   6085   E = E->IgnoreParenImpCasts();
   6086 
   6087   if (isa<ConditionalOperator>(E))
   6088     return CheckConditionalOperator(S, cast<ConditionalOperator>(E), CC, T);
   6089 
   6090   AnalyzeImplicitConversions(S, E, CC);
   6091   if (E->getType() != T)
   6092     return CheckImplicitConversion(S, E, T, CC, &ICContext);
   6093   return;
   6094 }
   6095 
   6096 void CheckConditionalOperator(Sema &S, ConditionalOperator *E,
   6097                               SourceLocation CC, QualType T) {
   6098   AnalyzeImplicitConversions(S, E->getCond(), CC);
   6099 
   6100   bool Suspicious = false;
   6101   CheckConditionalOperand(S, E->getTrueExpr(), T, CC, Suspicious);
   6102   CheckConditionalOperand(S, E->getFalseExpr(), T, CC, Suspicious);
   6103 
   6104   // If -Wconversion would have warned about either of the candidates
   6105   // for a signedness conversion to the context type...
   6106   if (!Suspicious) return;
   6107 
   6108   // ...but it's currently ignored...
   6109   if (!S.Diags.isIgnored(diag::warn_impcast_integer_sign_conditional, CC))
   6110     return;
   6111 
   6112   // ...then check whether it would have warned about either of the
   6113   // candidates for a signedness conversion to the condition type.
   6114   if (E->getType() == T) return;
   6115 
   6116   Suspicious = false;
   6117   CheckImplicitConversion(S, E->getTrueExpr()->IgnoreParenImpCasts(),
   6118                           E->getType(), CC, &Suspicious);
   6119   if (!Suspicious)
   6120     CheckImplicitConversion(S, E->getFalseExpr()->IgnoreParenImpCasts(),
   6121                             E->getType(), CC, &Suspicious);
   6122 }
   6123 
   6124 /// AnalyzeImplicitConversions - Find and report any interesting
   6125 /// implicit conversions in the given expression.  There are a couple
   6126 /// of competing diagnostics here, -Wconversion and -Wsign-compare.
   6127 void AnalyzeImplicitConversions(Sema &S, Expr *OrigE, SourceLocation CC) {
   6128   QualType T = OrigE->getType();
   6129   Expr *E = OrigE->IgnoreParenImpCasts();
   6130 
   6131   if (E->isTypeDependent() || E->isValueDependent())
   6132     return;
   6133 
   6134   // For conditional operators, we analyze the arguments as if they
   6135   // were being fed directly into the output.
   6136   if (isa<ConditionalOperator>(E)) {
   6137     ConditionalOperator *CO = cast<ConditionalOperator>(E);
   6138     CheckConditionalOperator(S, CO, CC, T);
   6139     return;
   6140   }
   6141 
   6142   // Check implicit argument conversions for function calls.
   6143   if (CallExpr *Call = dyn_cast<CallExpr>(E))
   6144     CheckImplicitArgumentConversions(S, Call, CC);
   6145 
   6146   // Go ahead and check any implicit conversions we might have skipped.
   6147   // The non-canonical typecheck is just an optimization;
   6148   // CheckImplicitConversion will filter out dead implicit conversions.
   6149   if (E->getType() != T)
   6150     CheckImplicitConversion(S, E, T, CC);
   6151 
   6152   // Now continue drilling into this expression.
   6153 
   6154   if (PseudoObjectExpr * POE = dyn_cast<PseudoObjectExpr>(E)) {
   6155     if (POE->getResultExpr())
   6156       E = POE->getResultExpr();
   6157   }
   6158 
   6159   if (const OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E))
   6160     return AnalyzeImplicitConversions(S, OVE->getSourceExpr(), CC);
   6161 
   6162   // Skip past explicit casts.
   6163   if (isa<ExplicitCastExpr>(E)) {
   6164     E = cast<ExplicitCastExpr>(E)->getSubExpr()->IgnoreParenImpCasts();
   6165     return AnalyzeImplicitConversions(S, E, CC);
   6166   }
   6167 
   6168   if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
   6169     // Do a somewhat different check with comparison operators.
   6170     if (BO->isComparisonOp())
   6171       return AnalyzeComparison(S, BO);
   6172 
   6173     // And with simple assignments.
   6174     if (BO->getOpcode() == BO_Assign)
   6175       return AnalyzeAssignment(S, BO);
   6176   }
   6177 
   6178   // These break the otherwise-useful invariant below.  Fortunately,
   6179   // we don't really need to recurse into them, because any internal
   6180   // expressions should have been analyzed already when they were
   6181   // built into statements.
   6182   if (isa<StmtExpr>(E)) return;
   6183 
   6184   // Don't descend into unevaluated contexts.
   6185   if (isa<UnaryExprOrTypeTraitExpr>(E)) return;
   6186 
   6187   // Now just recurse over the expression's children.
   6188   CC = E->getExprLoc();
   6189   BinaryOperator *BO = dyn_cast<BinaryOperator>(E);
   6190   bool IsLogicalAndOperator = BO && BO->getOpcode() == BO_LAnd;
   6191   for (Stmt::child_range I = E->children(); I; ++I) {
   6192     Expr *ChildExpr = dyn_cast_or_null<Expr>(*I);
   6193     if (!ChildExpr)
   6194       continue;
   6195 
   6196     if (IsLogicalAndOperator &&
   6197         isa<StringLiteral>(ChildExpr->IgnoreParenImpCasts()))
   6198       // Ignore checking string literals that are in logical and operators.
   6199       // This is a common pattern for asserts.
   6200       continue;
   6201     AnalyzeImplicitConversions(S, ChildExpr, CC);
   6202   }
   6203 }
   6204 
   6205 } // end anonymous namespace
   6206 
   6207 enum {
   6208   AddressOf,
   6209   FunctionPointer,
   6210   ArrayPointer
   6211 };
   6212 
   6213 // Helper function for Sema::DiagnoseAlwaysNonNullPointer.
   6214 // Returns true when emitting a warning about taking the address of a reference.
   6215 static bool CheckForReference(Sema &SemaRef, const Expr *E,
   6216                               PartialDiagnostic PD) {
   6217   E = E->IgnoreParenImpCasts();
   6218 
   6219   const FunctionDecl *FD = nullptr;
   6220 
   6221   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {
   6222     if (!DRE->getDecl()->getType()->isReferenceType())
   6223       return false;
   6224   } else if (const MemberExpr *M = dyn_cast<MemberExpr>(E)) {
   6225     if (!M->getMemberDecl()->getType()->isReferenceType())
   6226       return false;
   6227   } else if (const CallExpr *Call = dyn_cast<CallExpr>(E)) {
   6228     if (!Call->getCallReturnType()->isReferenceType())
   6229       return false;
   6230     FD = Call->getDirectCallee();
   6231   } else {
   6232     return false;
   6233   }
   6234 
   6235   SemaRef.Diag(E->getExprLoc(), PD);
   6236 
   6237   // If possible, point to location of function.
   6238   if (FD) {
   6239     SemaRef.Diag(FD->getLocation(), diag::note_reference_is_return_value) << FD;
   6240   }
   6241 
   6242   return true;
   6243 }
   6244 
   6245 /// \brief Diagnose pointers that are always non-null.
   6246 /// \param E the expression containing the pointer
   6247 /// \param NullKind NPCK_NotNull if E is a cast to bool, otherwise, E is
   6248 /// compared to a null pointer
   6249 /// \param IsEqual True when the comparison is equal to a null pointer
   6250 /// \param Range Extra SourceRange to highlight in the diagnostic
   6251 void Sema::DiagnoseAlwaysNonNullPointer(Expr *E,
   6252                                         Expr::NullPointerConstantKind NullKind,
   6253                                         bool IsEqual, SourceRange Range) {
   6254   if (!E)
   6255     return;
   6256 
   6257   // Don't warn inside macros.
   6258   if (E->getExprLoc().isMacroID())
   6259       return;
   6260   E = E->IgnoreImpCasts();
   6261 
   6262   const bool IsCompare = NullKind != Expr::NPCK_NotNull;
   6263 
   6264   if (isa<CXXThisExpr>(E)) {
   6265     unsigned DiagID = IsCompare ? diag::warn_this_null_compare
   6266                                 : diag::warn_this_bool_conversion;
   6267     Diag(E->getExprLoc(), DiagID) << E->getSourceRange() << Range << IsEqual;
   6268     return;
   6269   }
   6270 
   6271   bool IsAddressOf = false;
   6272 
   6273   if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) {
   6274     if (UO->getOpcode() != UO_AddrOf)
   6275       return;
   6276     IsAddressOf = true;
   6277     E = UO->getSubExpr();
   6278   }
   6279 
   6280   if (IsAddressOf) {
   6281     unsigned DiagID = IsCompare
   6282                           ? diag::warn_address_of_reference_null_compare
   6283                           : diag::warn_address_of_reference_bool_conversion;
   6284     PartialDiagnostic PD = PDiag(DiagID) << E->getSourceRange() << Range
   6285                                          << IsEqual;
   6286     if (CheckForReference(*this, E, PD)) {
   6287       return;
   6288     }
   6289   }
   6290 
   6291   // Expect to find a single Decl.  Skip anything more complicated.
   6292   ValueDecl *D = nullptr;
   6293   if (DeclRefExpr *R = dyn_cast<DeclRefExpr>(E)) {
   6294     D = R->getDecl();
   6295   } else if (MemberExpr *M = dyn_cast<MemberExpr>(E)) {
   6296     D = M->getMemberDecl();
   6297   }
   6298 
   6299   // Weak Decls can be null.
   6300   if (!D || D->isWeak())
   6301     return;
   6302 
   6303   QualType T = D->getType();
   6304   const bool IsArray = T->isArrayType();
   6305   const bool IsFunction = T->isFunctionType();
   6306 
   6307   // Address of function is used to silence the function warning.
   6308   if (IsAddressOf && IsFunction) {
   6309     return;
   6310   }
   6311 
   6312   // Found nothing.
   6313   if (!IsAddressOf && !IsFunction && !IsArray)
   6314     return;
   6315 
   6316   // Pretty print the expression for the diagnostic.
   6317   std::string Str;
   6318   llvm::raw_string_ostream S(Str);
   6319   E->printPretty(S, nullptr, getPrintingPolicy());
   6320 
   6321   unsigned DiagID = IsCompare ? diag::warn_null_pointer_compare
   6322                               : diag::warn_impcast_pointer_to_bool;
   6323   unsigned DiagType;
   6324   if (IsAddressOf)
   6325     DiagType = AddressOf;
   6326   else if (IsFunction)
   6327     DiagType = FunctionPointer;
   6328   else if (IsArray)
   6329     DiagType = ArrayPointer;
   6330   else
   6331     llvm_unreachable("Could not determine diagnostic.");
   6332   Diag(E->getExprLoc(), DiagID) << DiagType << S.str() << E->getSourceRange()
   6333                                 << Range << IsEqual;
   6334 
   6335   if (!IsFunction)
   6336     return;
   6337 
   6338   // Suggest '&' to silence the function warning.
   6339   Diag(E->getExprLoc(), diag::note_function_warning_silence)
   6340       << FixItHint::CreateInsertion(E->getLocStart(), "&");
   6341 
   6342   // Check to see if '()' fixit should be emitted.
   6343   QualType ReturnType;
   6344   UnresolvedSet<4> NonTemplateOverloads;
   6345   tryExprAsCall(*E, ReturnType, NonTemplateOverloads);
   6346   if (ReturnType.isNull())
   6347     return;
   6348 
   6349   if (IsCompare) {
   6350     // There are two cases here.  If there is null constant, the only suggest
   6351     // for a pointer return type.  If the null is 0, then suggest if the return
   6352     // type is a pointer or an integer type.
   6353     if (!ReturnType->isPointerType()) {
   6354       if (NullKind == Expr::NPCK_ZeroExpression ||
   6355           NullKind == Expr::NPCK_ZeroLiteral) {
   6356         if (!ReturnType->isIntegerType())
   6357           return;
   6358       } else {
   6359         return;
   6360       }
   6361     }
   6362   } else { // !IsCompare
   6363     // For function to bool, only suggest if the function pointer has bool
   6364     // return type.
   6365     if (!ReturnType->isSpecificBuiltinType(BuiltinType::Bool))
   6366       return;
   6367   }
   6368   Diag(E->getExprLoc(), diag::note_function_to_function_call)
   6369       << FixItHint::CreateInsertion(getLocForEndOfToken(E->getLocEnd()), "()");
   6370 }
   6371 
   6372 
   6373 /// Diagnoses "dangerous" implicit conversions within the given
   6374 /// expression (which is a full expression).  Implements -Wconversion
   6375 /// and -Wsign-compare.
   6376 ///
   6377 /// \param CC the "context" location of the implicit conversion, i.e.
   6378 ///   the most location of the syntactic entity requiring the implicit
   6379 ///   conversion
   6380 void Sema::CheckImplicitConversions(Expr *E, SourceLocation CC) {
   6381   // Don't diagnose in unevaluated contexts.
   6382   if (isUnevaluatedContext())
   6383     return;
   6384 
   6385   // Don't diagnose for value- or type-dependent expressions.
   6386   if (E->isTypeDependent() || E->isValueDependent())
   6387     return;
   6388 
   6389   // Check for array bounds violations in cases where the check isn't triggered
   6390   // elsewhere for other Expr types (like BinaryOperators), e.g. when an
   6391   // ArraySubscriptExpr is on the RHS of a variable initialization.
   6392   CheckArrayAccess(E);
   6393 
   6394   // This is not the right CC for (e.g.) a variable initialization.
   6395   AnalyzeImplicitConversions(*this, E, CC);
   6396 }
   6397 
   6398 /// Diagnose when expression is an integer constant expression and its evaluation
   6399 /// results in integer overflow
   6400 void Sema::CheckForIntOverflow (Expr *E) {
   6401   if (isa<BinaryOperator>(E->IgnoreParens()))
   6402     E->EvaluateForOverflow(Context);
   6403 }
   6404 
   6405 namespace {
   6406 /// \brief Visitor for expressions which looks for unsequenced operations on the
   6407 /// same object.
   6408 class SequenceChecker : public EvaluatedExprVisitor<SequenceChecker> {
   6409   typedef EvaluatedExprVisitor<SequenceChecker> Base;
   6410 
   6411   /// \brief A tree of sequenced regions within an expression. Two regions are
   6412   /// unsequenced if one is an ancestor or a descendent of the other. When we
   6413   /// finish processing an expression with sequencing, such as a comma
   6414   /// expression, we fold its tree nodes into its parent, since they are
   6415   /// unsequenced with respect to nodes we will visit later.
   6416   class SequenceTree {
   6417     struct Value {
   6418       explicit Value(unsigned Parent) : Parent(Parent), Merged(false) {}
   6419       unsigned Parent : 31;
   6420       bool Merged : 1;
   6421     };
   6422     SmallVector<Value, 8> Values;
   6423 
   6424   public:
   6425     /// \brief A region within an expression which may be sequenced with respect
   6426     /// to some other region.
   6427     class Seq {
   6428       explicit Seq(unsigned N) : Index(N) {}
   6429       unsigned Index;
   6430       friend class SequenceTree;
   6431     public:
   6432       Seq() : Index(0) {}
   6433     };
   6434 
   6435     SequenceTree() { Values.push_back(Value(0)); }
   6436     Seq root() const { return Seq(0); }
   6437 
   6438     /// \brief Create a new sequence of operations, which is an unsequenced
   6439     /// subset of \p Parent. This sequence of operations is sequenced with
   6440     /// respect to other children of \p Parent.
   6441     Seq allocate(Seq Parent) {
   6442       Values.push_back(Value(Parent.Index));
   6443       return Seq(Values.size() - 1);
   6444     }
   6445 
   6446     /// \brief Merge a sequence of operations into its parent.
   6447     void merge(Seq S) {
   6448       Values[S.Index].Merged = true;
   6449     }
   6450 
   6451     /// \brief Determine whether two operations are unsequenced. This operation
   6452     /// is asymmetric: \p Cur should be the more recent sequence, and \p Old
   6453     /// should have been merged into its parent as appropriate.
   6454     bool isUnsequenced(Seq Cur, Seq Old) {
   6455       unsigned C = representative(Cur.Index);
   6456       unsigned Target = representative(Old.Index);
   6457       while (C >= Target) {
   6458         if (C == Target)
   6459           return true;
   6460         C = Values[C].Parent;
   6461       }
   6462       return false;
   6463     }
   6464 
   6465   private:
   6466     /// \brief Pick a representative for a sequence.
   6467     unsigned representative(unsigned K) {
   6468       if (Values[K].Merged)
   6469         // Perform path compression as we go.
   6470         return Values[K].Parent = representative(Values[K].Parent);
   6471       return K;
   6472     }
   6473   };
   6474 
   6475   /// An object for which we can track unsequenced uses.
   6476   typedef NamedDecl *Object;
   6477 
   6478   /// Different flavors of object usage which we track. We only track the
   6479   /// least-sequenced usage of each kind.
   6480   enum UsageKind {
   6481     /// A read of an object. Multiple unsequenced reads are OK.
   6482     UK_Use,
   6483     /// A modification of an object which is sequenced before the value
   6484     /// computation of the expression, such as ++n in C++.
   6485     UK_ModAsValue,
   6486     /// A modification of an object which is not sequenced before the value
   6487     /// computation of the expression, such as n++.
   6488     UK_ModAsSideEffect,
   6489 
   6490     UK_Count = UK_ModAsSideEffect + 1
   6491   };
   6492 
   6493   struct Usage {
   6494     Usage() : Use(nullptr), Seq() {}
   6495     Expr *Use;
   6496     SequenceTree::Seq Seq;
   6497   };
   6498 
   6499   struct UsageInfo {
   6500     UsageInfo() : Diagnosed(false) {}
   6501     Usage Uses[UK_Count];
   6502     /// Have we issued a diagnostic for this variable already?
   6503     bool Diagnosed;
   6504   };
   6505   typedef llvm::SmallDenseMap<Object, UsageInfo, 16> UsageInfoMap;
   6506 
   6507   Sema &SemaRef;
   6508   /// Sequenced regions within the expression.
   6509   SequenceTree Tree;
   6510   /// Declaration modifications and references which we have seen.
   6511   UsageInfoMap UsageMap;
   6512   /// The region we are currently within.
   6513   SequenceTree::Seq Region;
   6514   /// Filled in with declarations which were modified as a side-effect
   6515   /// (that is, post-increment operations).
   6516   SmallVectorImpl<std::pair<Object, Usage> > *ModAsSideEffect;
   6517   /// Expressions to check later. We defer checking these to reduce
   6518   /// stack usage.
   6519   SmallVectorImpl<Expr *> &WorkList;
   6520 
   6521   /// RAII object wrapping the visitation of a sequenced subexpression of an
   6522   /// expression. At the end of this process, the side-effects of the evaluation
   6523   /// become sequenced with respect to the value computation of the result, so
   6524   /// we downgrade any UK_ModAsSideEffect within the evaluation to
   6525   /// UK_ModAsValue.
   6526   struct SequencedSubexpression {
   6527     SequencedSubexpression(SequenceChecker &Self)
   6528       : Self(Self), OldModAsSideEffect(Self.ModAsSideEffect) {
   6529       Self.ModAsSideEffect = &ModAsSideEffect;
   6530     }
   6531     ~SequencedSubexpression() {
   6532       for (unsigned I = 0, E = ModAsSideEffect.size(); I != E; ++I) {
   6533         UsageInfo &U = Self.UsageMap[ModAsSideEffect[I].first];
   6534         U.Uses[UK_ModAsSideEffect] = ModAsSideEffect[I].second;
   6535         Self.addUsage(U, ModAsSideEffect[I].first,
   6536                       ModAsSideEffect[I].second.Use, UK_ModAsValue);
   6537       }
   6538       Self.ModAsSideEffect = OldModAsSideEffect;
   6539     }
   6540 
   6541     SequenceChecker &Self;
   6542     SmallVector<std::pair<Object, Usage>, 4> ModAsSideEffect;
   6543     SmallVectorImpl<std::pair<Object, Usage> > *OldModAsSideEffect;
   6544   };
   6545 
   6546   /// RAII object wrapping the visitation of a subexpression which we might
   6547   /// choose to evaluate as a constant. If any subexpression is evaluated and
   6548   /// found to be non-constant, this allows us to suppress the evaluation of
   6549   /// the outer expression.
   6550   class EvaluationTracker {
   6551   public:
   6552     EvaluationTracker(SequenceChecker &Self)
   6553         : Self(Self), Prev(Self.EvalTracker), EvalOK(true) {
   6554       Self.EvalTracker = this;
   6555     }
   6556     ~EvaluationTracker() {
   6557       Self.EvalTracker = Prev;
   6558       if (Prev)
   6559         Prev->EvalOK &= EvalOK;
   6560     }
   6561 
   6562     bool evaluate(const Expr *E, bool &Result) {
   6563       if (!EvalOK || E->isValueDependent())
   6564         return false;
   6565       EvalOK = E->EvaluateAsBooleanCondition(Result, Self.SemaRef.Context);
   6566       return EvalOK;
   6567     }
   6568 
   6569   private:
   6570     SequenceChecker &Self;
   6571     EvaluationTracker *Prev;
   6572     bool EvalOK;
   6573   } *EvalTracker;
   6574 
   6575   /// \brief Find the object which is produced by the specified expression,
   6576   /// if any.
   6577   Object getObject(Expr *E, bool Mod) const {
   6578     E = E->IgnoreParenCasts();
   6579     if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) {
   6580       if (Mod && (UO->getOpcode() == UO_PreInc || UO->getOpcode() == UO_PreDec))
   6581         return getObject(UO->getSubExpr(), Mod);
   6582     } else if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
   6583       if (BO->getOpcode() == BO_Comma)
   6584         return getObject(BO->getRHS(), Mod);
   6585       if (Mod && BO->isAssignmentOp())
   6586         return getObject(BO->getLHS(), Mod);
   6587     } else if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) {
   6588       // FIXME: Check for more interesting cases, like "x.n = ++x.n".
   6589       if (isa<CXXThisExpr>(ME->getBase()->IgnoreParenCasts()))
   6590         return ME->getMemberDecl();
   6591     } else if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
   6592       // FIXME: If this is a reference, map through to its value.
   6593       return DRE->getDecl();
   6594     return nullptr;
   6595   }
   6596 
   6597   /// \brief Note that an object was modified or used by an expression.
   6598   void addUsage(UsageInfo &UI, Object O, Expr *Ref, UsageKind UK) {
   6599     Usage &U = UI.Uses[UK];
   6600     if (!U.Use || !Tree.isUnsequenced(Region, U.Seq)) {
   6601       if (UK == UK_ModAsSideEffect && ModAsSideEffect)
   6602         ModAsSideEffect->push_back(std::make_pair(O, U));
   6603       U.Use = Ref;
   6604       U.Seq = Region;
   6605     }
   6606   }
   6607   /// \brief Check whether a modification or use conflicts with a prior usage.
   6608   void checkUsage(Object O, UsageInfo &UI, Expr *Ref, UsageKind OtherKind,
   6609                   bool IsModMod) {
   6610     if (UI.Diagnosed)
   6611       return;
   6612 
   6613     const Usage &U = UI.Uses[OtherKind];
   6614     if (!U.Use || !Tree.isUnsequenced(Region, U.Seq))
   6615       return;
   6616 
   6617     Expr *Mod = U.Use;
   6618     Expr *ModOrUse = Ref;
   6619     if (OtherKind == UK_Use)
   6620       std::swap(Mod, ModOrUse);
   6621 
   6622     SemaRef.Diag(Mod->getExprLoc(),
   6623                  IsModMod ? diag::warn_unsequenced_mod_mod
   6624                           : diag::warn_unsequenced_mod_use)
   6625       << O << SourceRange(ModOrUse->getExprLoc());
   6626     UI.Diagnosed = true;
   6627   }
   6628 
   6629   void notePreUse(Object O, Expr *Use) {
   6630     UsageInfo &U = UsageMap[O];
   6631     // Uses conflict with other modifications.
   6632     checkUsage(O, U, Use, UK_ModAsValue, false);
   6633   }
   6634   void notePostUse(Object O, Expr *Use) {
   6635     UsageInfo &U = UsageMap[O];
   6636     checkUsage(O, U, Use, UK_ModAsSideEffect, false);
   6637     addUsage(U, O, Use, UK_Use);
   6638   }
   6639 
   6640   void notePreMod(Object O, Expr *Mod) {
   6641     UsageInfo &U = UsageMap[O];
   6642     // Modifications conflict with other modifications and with uses.
   6643     checkUsage(O, U, Mod, UK_ModAsValue, true);
   6644     checkUsage(O, U, Mod, UK_Use, false);
   6645   }
   6646   void notePostMod(Object O, Expr *Use, UsageKind UK) {
   6647     UsageInfo &U = UsageMap[O];
   6648     checkUsage(O, U, Use, UK_ModAsSideEffect, true);
   6649     addUsage(U, O, Use, UK);
   6650   }
   6651 
   6652 public:
   6653   SequenceChecker(Sema &S, Expr *E, SmallVectorImpl<Expr *> &WorkList)
   6654       : Base(S.Context), SemaRef(S), Region(Tree.root()),
   6655         ModAsSideEffect(nullptr), WorkList(WorkList), EvalTracker(nullptr) {
   6656     Visit(E);
   6657   }
   6658 
   6659   void VisitStmt(Stmt *S) {
   6660     // Skip all statements which aren't expressions for now.
   6661   }
   6662 
   6663   void VisitExpr(Expr *E) {
   6664     // By default, just recurse to evaluated subexpressions.
   6665     Base::VisitStmt(E);
   6666   }
   6667 
   6668   void VisitCastExpr(CastExpr *E) {
   6669     Object O = Object();
   6670     if (E->getCastKind() == CK_LValueToRValue)
   6671       O = getObject(E->getSubExpr(), false);
   6672 
   6673     if (O)
   6674       notePreUse(O, E);
   6675     VisitExpr(E);
   6676     if (O)
   6677       notePostUse(O, E);
   6678   }
   6679 
   6680   void VisitBinComma(BinaryOperator *BO) {
   6681     // C++11 [expr.comma]p1:
   6682     //   Every value computation and side effect associated with the left
   6683     //   expression is sequenced before every value computation and side
   6684     //   effect associated with the right expression.
   6685     SequenceTree::Seq LHS = Tree.allocate(Region);
   6686     SequenceTree::Seq RHS = Tree.allocate(Region);
   6687     SequenceTree::Seq OldRegion = Region;
   6688 
   6689     {
   6690       SequencedSubexpression SeqLHS(*this);
   6691       Region = LHS;
   6692       Visit(BO->getLHS());
   6693     }
   6694 
   6695     Region = RHS;
   6696     Visit(BO->getRHS());
   6697 
   6698     Region = OldRegion;
   6699 
   6700     // Forget that LHS and RHS are sequenced. They are both unsequenced
   6701     // with respect to other stuff.
   6702     Tree.merge(LHS);
   6703     Tree.merge(RHS);
   6704   }
   6705 
   6706   void VisitBinAssign(BinaryOperator *BO) {
   6707     // The modification is sequenced after the value computation of the LHS
   6708     // and RHS, so check it before inspecting the operands and update the
   6709     // map afterwards.
   6710     Object O = getObject(BO->getLHS(), true);
   6711     if (!O)
   6712       return VisitExpr(BO);
   6713 
   6714     notePreMod(O, BO);
   6715 
   6716     // C++11 [expr.ass]p7:
   6717     //   E1 op= E2 is equivalent to E1 = E1 op E2, except that E1 is evaluated
   6718     //   only once.
   6719     //
   6720     // Therefore, for a compound assignment operator, O is considered used
   6721     // everywhere except within the evaluation of E1 itself.
   6722     if (isa<CompoundAssignOperator>(BO))
   6723       notePreUse(O, BO);
   6724 
   6725     Visit(BO->getLHS());
   6726 
   6727     if (isa<CompoundAssignOperator>(BO))
   6728       notePostUse(O, BO);
   6729 
   6730     Visit(BO->getRHS());
   6731 
   6732     // C++11 [expr.ass]p1:
   6733     //   the assignment is sequenced [...] before the value computation of the
   6734     //   assignment expression.
   6735     // C11 6.5.16/3 has no such rule.
   6736     notePostMod(O, BO, SemaRef.getLangOpts().CPlusPlus ? UK_ModAsValue
   6737                                                        : UK_ModAsSideEffect);
   6738   }
   6739   void VisitCompoundAssignOperator(CompoundAssignOperator *CAO) {
   6740     VisitBinAssign(CAO);
   6741   }
   6742 
   6743   void VisitUnaryPreInc(UnaryOperator *UO) { VisitUnaryPreIncDec(UO); }
   6744   void VisitUnaryPreDec(UnaryOperator *UO) { VisitUnaryPreIncDec(UO); }
   6745   void VisitUnaryPreIncDec(UnaryOperator *UO) {
   6746     Object O = getObject(UO->getSubExpr(), true);
   6747     if (!O)
   6748       return VisitExpr(UO);
   6749 
   6750     notePreMod(O, UO);
   6751     Visit(UO->getSubExpr());
   6752     // C++11 [expr.pre.incr]p1:
   6753     //   the expression ++x is equivalent to x+=1
   6754     notePostMod(O, UO, SemaRef.getLangOpts().CPlusPlus ? UK_ModAsValue
   6755                                                        : UK_ModAsSideEffect);
   6756   }
   6757 
   6758   void VisitUnaryPostInc(UnaryOperator *UO) { VisitUnaryPostIncDec(UO); }
   6759   void VisitUnaryPostDec(UnaryOperator *UO) { VisitUnaryPostIncDec(UO); }
   6760   void VisitUnaryPostIncDec(UnaryOperator *UO) {
   6761     Object O = getObject(UO->getSubExpr(), true);
   6762     if (!O)
   6763       return VisitExpr(UO);
   6764 
   6765     notePreMod(O, UO);
   6766     Visit(UO->getSubExpr());
   6767     notePostMod(O, UO, UK_ModAsSideEffect);
   6768   }
   6769 
   6770   /// Don't visit the RHS of '&&' or '||' if it might not be evaluated.
   6771   void VisitBinLOr(BinaryOperator *BO) {
   6772     // The side-effects of the LHS of an '&&' are sequenced before the
   6773     // value computation of the RHS, and hence before the value computation
   6774     // of the '&&' itself, unless the LHS evaluates to zero. We treat them
   6775     // as if they were unconditionally sequenced.
   6776     EvaluationTracker Eval(*this);
   6777     {
   6778       SequencedSubexpression Sequenced(*this);
   6779       Visit(BO->getLHS());
   6780     }
   6781 
   6782     bool Result;
   6783     if (Eval.evaluate(BO->getLHS(), Result)) {
   6784       if (!Result)
   6785         Visit(BO->getRHS());
   6786     } else {
   6787       // Check for unsequenced operations in the RHS, treating it as an
   6788       // entirely separate evaluation.
   6789       //
   6790       // FIXME: If there are operations in the RHS which are unsequenced
   6791       // with respect to operations outside the RHS, and those operations
   6792       // are unconditionally evaluated, diagnose them.
   6793       WorkList.push_back(BO->getRHS());
   6794     }
   6795   }
   6796   void VisitBinLAnd(BinaryOperator *BO) {
   6797     EvaluationTracker Eval(*this);
   6798     {
   6799       SequencedSubexpression Sequenced(*this);
   6800       Visit(BO->getLHS());
   6801     }
   6802 
   6803     bool Result;
   6804     if (Eval.evaluate(BO->getLHS(), Result)) {
   6805       if (Result)
   6806         Visit(BO->getRHS());
   6807     } else {
   6808       WorkList.push_back(BO->getRHS());
   6809     }
   6810   }
   6811 
   6812   // Only visit the condition, unless we can be sure which subexpression will
   6813   // be chosen.
   6814   void VisitAbstractConditionalOperator(AbstractConditionalOperator *CO) {
   6815     EvaluationTracker Eval(*this);
   6816     {
   6817       SequencedSubexpression Sequenced(*this);
   6818       Visit(CO->getCond());
   6819     }
   6820 
   6821     bool Result;
   6822     if (Eval.evaluate(CO->getCond(), Result))
   6823       Visit(Result ? CO->getTrueExpr() : CO->getFalseExpr());
   6824     else {
   6825       WorkList.push_back(CO->getTrueExpr());
   6826       WorkList.push_back(CO->getFalseExpr());
   6827     }
   6828   }
   6829 
   6830   void VisitCallExpr(CallExpr *CE) {
   6831     // C++11 [intro.execution]p15:
   6832     //   When calling a function [...], every value computation and side effect
   6833     //   associated with any argument expression, or with the postfix expression
   6834     //   designating the called function, is sequenced before execution of every
   6835     //   expression or statement in the body of the function [and thus before
   6836     //   the value computation of its result].
   6837     SequencedSubexpression Sequenced(*this);
   6838     Base::VisitCallExpr(CE);
   6839 
   6840     // FIXME: CXXNewExpr and CXXDeleteExpr implicitly call functions.
   6841   }
   6842 
   6843   void VisitCXXConstructExpr(CXXConstructExpr *CCE) {
   6844     // This is a call, so all subexpressions are sequenced before the result.
   6845     SequencedSubexpression Sequenced(*this);
   6846 
   6847     if (!CCE->isListInitialization())
   6848       return VisitExpr(CCE);
   6849 
   6850     // In C++11, list initializations are sequenced.
   6851     SmallVector<SequenceTree::Seq, 32> Elts;
   6852     SequenceTree::Seq Parent = Region;
   6853     for (CXXConstructExpr::arg_iterator I = CCE->arg_begin(),
   6854                                         E = CCE->arg_end();
   6855          I != E; ++I) {
   6856       Region = Tree.allocate(Parent);
   6857       Elts.push_back(Region);
   6858       Visit(*I);
   6859     }
   6860 
   6861     // Forget that the initializers are sequenced.
   6862     Region = Parent;
   6863     for (unsigned I = 0; I < Elts.size(); ++I)
   6864       Tree.merge(Elts[I]);
   6865   }
   6866 
   6867   void VisitInitListExpr(InitListExpr *ILE) {
   6868     if (!SemaRef.getLangOpts().CPlusPlus11)
   6869       return VisitExpr(ILE);
   6870 
   6871     // In C++11, list initializations are sequenced.
   6872     SmallVector<SequenceTree::Seq, 32> Elts;
   6873     SequenceTree::Seq Parent = Region;
   6874     for (unsigned I = 0; I < ILE->getNumInits(); ++I) {
   6875       Expr *E = ILE->getInit(I);
   6876       if (!E) continue;
   6877       Region = Tree.allocate(Parent);
   6878       Elts.push_back(Region);
   6879       Visit(E);
   6880     }
   6881 
   6882     // Forget that the initializers are sequenced.
   6883     Region = Parent;
   6884     for (unsigned I = 0; I < Elts.size(); ++I)
   6885       Tree.merge(Elts[I]);
   6886   }
   6887 };
   6888 }
   6889 
   6890 void Sema::CheckUnsequencedOperations(Expr *E) {
   6891   SmallVector<Expr *, 8> WorkList;
   6892   WorkList.push_back(E);
   6893   while (!WorkList.empty()) {
   6894     Expr *Item = WorkList.pop_back_val();
   6895     SequenceChecker(*this, Item, WorkList);
   6896   }
   6897 }
   6898 
   6899 void Sema::CheckCompletedExpr(Expr *E, SourceLocation CheckLoc,
   6900                               bool IsConstexpr) {
   6901   CheckImplicitConversions(E, CheckLoc);
   6902   CheckUnsequencedOperations(E);
   6903   if (!IsConstexpr && !E->isValueDependent())
   6904     CheckForIntOverflow(E);
   6905 }
   6906 
   6907 void Sema::CheckBitFieldInitialization(SourceLocation InitLoc,
   6908                                        FieldDecl *BitField,
   6909                                        Expr *Init) {
   6910   (void) AnalyzeBitFieldAssignment(*this, BitField, Init, InitLoc);
   6911 }
   6912 
   6913 /// CheckParmsForFunctionDef - Check that the parameters of the given
   6914 /// function are appropriate for the definition of a function. This
   6915 /// takes care of any checks that cannot be performed on the
   6916 /// declaration itself, e.g., that the types of each of the function
   6917 /// parameters are complete.
   6918 bool Sema::CheckParmsForFunctionDef(ParmVarDecl *const *P,
   6919                                     ParmVarDecl *const *PEnd,
   6920                                     bool CheckParameterNames) {
   6921   bool HasInvalidParm = false;
   6922   for (; P != PEnd; ++P) {
   6923     ParmVarDecl *Param = *P;
   6924 
   6925     // C99 6.7.5.3p4: the parameters in a parameter type list in a
   6926     // function declarator that is part of a function definition of
   6927     // that function shall not have incomplete type.
   6928     //
   6929     // This is also C++ [dcl.fct]p6.
   6930     if (!Param->isInvalidDecl() &&
   6931         RequireCompleteType(Param->getLocation(), Param->getType(),
   6932                             diag::err_typecheck_decl_incomplete_type)) {
   6933       Param->setInvalidDecl();
   6934       HasInvalidParm = true;
   6935     }
   6936 
   6937     // C99 6.9.1p5: If the declarator includes a parameter type list, the
   6938     // declaration of each parameter shall include an identifier.
   6939     if (CheckParameterNames &&
   6940         Param->getIdentifier() == nullptr &&
   6941         !Param->isImplicit() &&
   6942         !getLangOpts().CPlusPlus)
   6943       Diag(Param->getLocation(), diag::err_parameter_name_omitted);
   6944 
   6945     // C99 6.7.5.3p12:
   6946     //   If the function declarator is not part of a definition of that
   6947     //   function, parameters may have incomplete type and may use the [*]
   6948     //   notation in their sequences of declarator specifiers to specify
   6949     //   variable length array types.
   6950     QualType PType = Param->getOriginalType();
   6951     while (const ArrayType *AT = Context.getAsArrayType(PType)) {
   6952       if (AT->getSizeModifier() == ArrayType::Star) {
   6953         // FIXME: This diagnostic should point the '[*]' if source-location
   6954         // information is added for it.
   6955         Diag(Param->getLocation(), diag::err_array_star_in_function_definition);
   6956         break;
   6957       }
   6958       PType= AT->getElementType();
   6959     }
   6960 
   6961     // MSVC destroys objects passed by value in the callee.  Therefore a
   6962     // function definition which takes such a parameter must be able to call the
   6963     // object's destructor.  However, we don't perform any direct access check
   6964     // on the dtor.
   6965     if (getLangOpts().CPlusPlus && Context.getTargetInfo()
   6966                                        .getCXXABI()
   6967                                        .areArgsDestroyedLeftToRightInCallee()) {
   6968       if (!Param->isInvalidDecl()) {
   6969         if (const RecordType *RT = Param->getType()->getAs<RecordType>()) {
   6970           CXXRecordDecl *ClassDecl = cast<CXXRecordDecl>(RT->getDecl());
   6971           if (!ClassDecl->isInvalidDecl() &&
   6972               !ClassDecl->hasIrrelevantDestructor() &&
   6973               !ClassDecl->isDependentContext()) {
   6974             CXXDestructorDecl *Destructor = LookupDestructor(ClassDecl);
   6975             MarkFunctionReferenced(Param->getLocation(), Destructor);
   6976             DiagnoseUseOfDecl(Destructor, Param->getLocation());
   6977           }
   6978         }
   6979       }
   6980     }
   6981   }
   6982 
   6983   return HasInvalidParm;
   6984 }
   6985 
   6986 /// CheckCastAlign - Implements -Wcast-align, which warns when a
   6987 /// pointer cast increases the alignment requirements.
   6988 void Sema::CheckCastAlign(Expr *Op, QualType T, SourceRange TRange) {
   6989   // This is actually a lot of work to potentially be doing on every
   6990   // cast; don't do it if we're ignoring -Wcast_align (as is the default).
   6991   if (getDiagnostics().isIgnored(diag::warn_cast_align, TRange.getBegin()))
   6992     return;
   6993 
   6994   // Ignore dependent types.
   6995   if (T->isDependentType() || Op->getType()->isDependentType())
   6996     return;
   6997 
   6998   // Require that the destination be a pointer type.
   6999   const PointerType *DestPtr = T->getAs<PointerType>();
   7000   if (!DestPtr) return;
   7001 
   7002   // If the destination has alignment 1, we're done.
   7003   QualType DestPointee = DestPtr->getPointeeType();
   7004   if (DestPointee->isIncompleteType()) return;
   7005   CharUnits DestAlign = Context.getTypeAlignInChars(DestPointee);
   7006   if (DestAlign.isOne()) return;
   7007 
   7008   // Require that the source be a pointer type.
   7009   const PointerType *SrcPtr = Op->getType()->getAs<PointerType>();
   7010   if (!SrcPtr) return;
   7011   QualType SrcPointee = SrcPtr->getPointeeType();
   7012 
   7013   // Whitelist casts from cv void*.  We already implicitly
   7014   // whitelisted casts to cv void*, since they have alignment 1.
   7015   // Also whitelist casts involving incomplete types, which implicitly
   7016   // includes 'void'.
   7017   if (SrcPointee->isIncompleteType()) return;
   7018 
   7019   CharUnits SrcAlign = Context.getTypeAlignInChars(SrcPointee);
   7020   if (SrcAlign >= DestAlign) return;
   7021 
   7022   Diag(TRange.getBegin(), diag::warn_cast_align)
   7023     << Op->getType() << T
   7024     << static_cast<unsigned>(SrcAlign.getQuantity())
   7025     << static_cast<unsigned>(DestAlign.getQuantity())
   7026     << TRange << Op->getSourceRange();
   7027 }
   7028 
   7029 static const Type* getElementType(const Expr *BaseExpr) {
   7030   const Type* EltType = BaseExpr->getType().getTypePtr();
   7031   if (EltType->isAnyPointerType())
   7032     return EltType->getPointeeType().getTypePtr();
   7033   else if (EltType->isArrayType())
   7034     return EltType->getBaseElementTypeUnsafe();
   7035   return EltType;
   7036 }
   7037 
   7038 /// \brief Check whether this array fits the idiom of a size-one tail padded
   7039 /// array member of a struct.
   7040 ///
   7041 /// We avoid emitting out-of-bounds access warnings for such arrays as they are
   7042 /// commonly used to emulate flexible arrays in C89 code.
   7043 static bool IsTailPaddedMemberArray(Sema &S, llvm::APInt Size,
   7044                                     const NamedDecl *ND) {
   7045   if (Size != 1 || !ND) return false;
   7046 
   7047   const FieldDecl *FD = dyn_cast<FieldDecl>(ND);
   7048   if (!FD) return false;
   7049 
   7050   // Don't consider sizes resulting from macro expansions or template argument
   7051   // substitution to form C89 tail-padded arrays.
   7052 
   7053   TypeSourceInfo *TInfo = FD->getTypeSourceInfo();
   7054   while (TInfo) {
   7055     TypeLoc TL = TInfo->getTypeLoc();
   7056     // Look through typedefs.
   7057     if (TypedefTypeLoc TTL = TL.getAs<TypedefTypeLoc>()) {
   7058       const TypedefNameDecl *TDL = TTL.getTypedefNameDecl();
   7059       TInfo = TDL->getTypeSourceInfo();
   7060       continue;
   7061     }
   7062     if (ConstantArrayTypeLoc CTL = TL.getAs<ConstantArrayTypeLoc>()) {
   7063       const Expr *SizeExpr = dyn_cast<IntegerLiteral>(CTL.getSizeExpr());
   7064       if (!SizeExpr || SizeExpr->getExprLoc().isMacroID())
   7065         return false;
   7066     }
   7067     break;
   7068   }
   7069 
   7070   const RecordDecl *RD = dyn_cast<RecordDecl>(FD->getDeclContext());
   7071   if (!RD) return false;
   7072   if (RD->isUnion()) return false;
   7073   if (const CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) {
   7074     if (!CRD->isStandardLayout()) return false;
   7075   }
   7076 
   7077   // See if this is the last field decl in the record.
   7078   const Decl *D = FD;
   7079   while ((D = D->getNextDeclInContext()))
   7080     if (isa<FieldDecl>(D))
   7081       return false;
   7082   return true;
   7083 }
   7084 
   7085 void Sema::CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
   7086                             const ArraySubscriptExpr *ASE,
   7087                             bool AllowOnePastEnd, bool IndexNegated) {
   7088   IndexExpr = IndexExpr->IgnoreParenImpCasts();
   7089   if (IndexExpr->isValueDependent())
   7090     return;
   7091 
   7092   const Type *EffectiveType = getElementType(BaseExpr);
   7093   BaseExpr = BaseExpr->IgnoreParenCasts();
   7094   const ConstantArrayType *ArrayTy =
   7095     Context.getAsConstantArrayType(BaseExpr->getType());
   7096   if (!ArrayTy)
   7097     return;
   7098 
   7099   llvm::APSInt index;
   7100   if (!IndexExpr->EvaluateAsInt(index, Context))
   7101     return;
   7102   if (IndexNegated)
   7103     index = -index;
   7104 
   7105   const NamedDecl *ND = nullptr;
   7106   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(BaseExpr))
   7107     ND = dyn_cast<NamedDecl>(DRE->getDecl());
   7108   if (const MemberExpr *ME = dyn_cast<MemberExpr>(BaseExpr))
   7109     ND = dyn_cast<NamedDecl>(ME->getMemberDecl());
   7110 
   7111   if (index.isUnsigned() || !index.isNegative()) {
   7112     llvm::APInt size = ArrayTy->getSize();
   7113     if (!size.isStrictlyPositive())
   7114       return;
   7115 
   7116     const Type* BaseType = getElementType(BaseExpr);
   7117     if (BaseType != EffectiveType) {
   7118       // Make sure we're comparing apples to apples when comparing index to size
   7119       uint64_t ptrarith_typesize = Context.getTypeSize(EffectiveType);
   7120       uint64_t array_typesize = Context.getTypeSize(BaseType);
   7121       // Handle ptrarith_typesize being zero, such as when casting to void*
   7122       if (!ptrarith_typesize) ptrarith_typesize = 1;
   7123       if (ptrarith_typesize != array_typesize) {
   7124         // There's a cast to a different size type involved
   7125         uint64_t ratio = array_typesize / ptrarith_typesize;
   7126         // TODO: Be smarter about handling cases where array_typesize is not a
   7127         // multiple of ptrarith_typesize
   7128         if (ptrarith_typesize * ratio == array_typesize)
   7129           size *= llvm::APInt(size.getBitWidth(), ratio);
   7130       }
   7131     }
   7132 
   7133     if (size.getBitWidth() > index.getBitWidth())
   7134       index = index.zext(size.getBitWidth());
   7135     else if (size.getBitWidth() < index.getBitWidth())
   7136       size = size.zext(index.getBitWidth());
   7137 
   7138     // For array subscripting the index must be less than size, but for pointer
   7139     // arithmetic also allow the index (offset) to be equal to size since
   7140     // computing the next address after the end of the array is legal and
   7141     // commonly done e.g. in C++ iterators and range-based for loops.
   7142     if (AllowOnePastEnd ? index.ule(size) : index.ult(size))
   7143       return;
   7144 
   7145     // Also don't warn for arrays of size 1 which are members of some
   7146     // structure. These are often used to approximate flexible arrays in C89
   7147     // code.
   7148     if (IsTailPaddedMemberArray(*this, size, ND))
   7149       return;
   7150 
   7151     // Suppress the warning if the subscript expression (as identified by the
   7152     // ']' location) and the index expression are both from macro expansions
   7153     // within a system header.
   7154     if (ASE) {
   7155       SourceLocation RBracketLoc = SourceMgr.getSpellingLoc(
   7156           ASE->getRBracketLoc());
   7157       if (SourceMgr.isInSystemHeader(RBracketLoc)) {
   7158         SourceLocation IndexLoc = SourceMgr.getSpellingLoc(
   7159             IndexExpr->getLocStart());
   7160         if (SourceMgr.isWrittenInSameFile(RBracketLoc, IndexLoc))
   7161           return;
   7162       }
   7163     }
   7164 
   7165     unsigned DiagID = diag::warn_ptr_arith_exceeds_bounds;
   7166     if (ASE)
   7167       DiagID = diag::warn_array_index_exceeds_bounds;
   7168 
   7169     DiagRuntimeBehavior(BaseExpr->getLocStart(), BaseExpr,
   7170                         PDiag(DiagID) << index.toString(10, true)
   7171                           << size.toString(10, true)
   7172                           << (unsigned)size.getLimitedValue(~0U)
   7173                           << IndexExpr->getSourceRange());
   7174   } else {
   7175     unsigned DiagID = diag::warn_array_index_precedes_bounds;
   7176     if (!ASE) {
   7177       DiagID = diag::warn_ptr_arith_precedes_bounds;
   7178       if (index.isNegative()) index = -index;
   7179     }
   7180 
   7181     DiagRuntimeBehavior(BaseExpr->getLocStart(), BaseExpr,
   7182                         PDiag(DiagID) << index.toString(10, true)
   7183                           << IndexExpr->getSourceRange());
   7184   }
   7185 
   7186   if (!ND) {
   7187     // Try harder to find a NamedDecl to point at in the note.
   7188     while (const ArraySubscriptExpr *ASE =
   7189            dyn_cast<ArraySubscriptExpr>(BaseExpr))
   7190       BaseExpr = ASE->getBase()->IgnoreParenCasts();
   7191     if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(BaseExpr))
   7192       ND = dyn_cast<NamedDecl>(DRE->getDecl());
   7193     if (const MemberExpr *ME = dyn_cast<MemberExpr>(BaseExpr))
   7194       ND = dyn_cast<NamedDecl>(ME->getMemberDecl());
   7195   }
   7196 
   7197   if (ND)
   7198     DiagRuntimeBehavior(ND->getLocStart(), BaseExpr,
   7199                         PDiag(diag::note_array_index_out_of_bounds)
   7200                           << ND->getDeclName());
   7201 }
   7202 
   7203 void Sema::CheckArrayAccess(const Expr *expr) {
   7204   int AllowOnePastEnd = 0;
   7205   while (expr) {
   7206     expr = expr->IgnoreParenImpCasts();
   7207     switch (expr->getStmtClass()) {
   7208       case Stmt::ArraySubscriptExprClass: {
   7209         const ArraySubscriptExpr *ASE = cast<ArraySubscriptExpr>(expr);
   7210         CheckArrayAccess(ASE->getBase(), ASE->getIdx(), ASE,
   7211                          AllowOnePastEnd > 0);
   7212         return;
   7213       }
   7214       case Stmt::UnaryOperatorClass: {
   7215         // Only unwrap the * and & unary operators
   7216         const UnaryOperator *UO = cast<UnaryOperator>(expr);
   7217         expr = UO->getSubExpr();
   7218         switch (UO->getOpcode()) {
   7219           case UO_AddrOf:
   7220             AllowOnePastEnd++;
   7221             break;
   7222           case UO_Deref:
   7223             AllowOnePastEnd--;
   7224             break;
   7225           default:
   7226             return;
   7227         }
   7228         break;
   7229       }
   7230       case Stmt::ConditionalOperatorClass: {
   7231         const ConditionalOperator *cond = cast<ConditionalOperator>(expr);
   7232         if (const Expr *lhs = cond->getLHS())
   7233           CheckArrayAccess(lhs);
   7234         if (const Expr *rhs = cond->getRHS())
   7235           CheckArrayAccess(rhs);
   7236         return;
   7237       }
   7238       default:
   7239         return;
   7240     }
   7241   }
   7242 }
   7243 
   7244 //===--- CHECK: Objective-C retain cycles ----------------------------------//
   7245 
   7246 namespace {
   7247   struct RetainCycleOwner {
   7248     RetainCycleOwner() : Variable(nullptr), Indirect(false) {}
   7249     VarDecl *Variable;
   7250     SourceRange Range;
   7251     SourceLocation Loc;
   7252     bool Indirect;
   7253 
   7254     void setLocsFrom(Expr *e) {
   7255       Loc = e->getExprLoc();
   7256       Range = e->getSourceRange();
   7257     }
   7258   };
   7259 }
   7260 
   7261 /// Consider whether capturing the given variable can possibly lead to
   7262 /// a retain cycle.
   7263 static bool considerVariable(VarDecl *var, Expr *ref, RetainCycleOwner &owner) {
   7264   // In ARC, it's captured strongly iff the variable has __strong
   7265   // lifetime.  In MRR, it's captured strongly if the variable is
   7266   // __block and has an appropriate type.
   7267   if (var->getType().getObjCLifetime() != Qualifiers::OCL_Strong)
   7268     return false;
   7269 
   7270   owner.Variable = var;
   7271   if (ref)
   7272     owner.setLocsFrom(ref);
   7273   return true;
   7274 }
   7275 
   7276 static bool findRetainCycleOwner(Sema &S, Expr *e, RetainCycleOwner &owner) {
   7277   while (true) {
   7278     e = e->IgnoreParens();
   7279     if (CastExpr *cast = dyn_cast<CastExpr>(e)) {
   7280       switch (cast->getCastKind()) {
   7281       case CK_BitCast:
   7282       case CK_LValueBitCast:
   7283       case CK_LValueToRValue:
   7284       case CK_ARCReclaimReturnedObject:
   7285         e = cast->getSubExpr();
   7286         continue;
   7287 
   7288       default:
   7289         return false;
   7290       }
   7291     }
   7292 
   7293     if (ObjCIvarRefExpr *ref = dyn_cast<ObjCIvarRefExpr>(e)) {
   7294       ObjCIvarDecl *ivar = ref->getDecl();
   7295       if (ivar->getType().getObjCLifetime() != Qualifiers::OCL_Strong)
   7296         return false;
   7297 
   7298       // Try to find a retain cycle in the base.
   7299       if (!findRetainCycleOwner(S, ref->getBase(), owner))
   7300         return false;
   7301 
   7302       if (ref->isFreeIvar()) owner.setLocsFrom(ref);
   7303       owner.Indirect = true;
   7304       return true;
   7305     }
   7306 
   7307     if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(e)) {
   7308       VarDecl *var = dyn_cast<VarDecl>(ref->getDecl());
   7309       if (!var) return false;
   7310       return considerVariable(var, ref, owner);
   7311     }
   7312 
   7313     if (MemberExpr *member = dyn_cast<MemberExpr>(e)) {
   7314       if (member->isArrow()) return false;
   7315 
   7316       // Don't count this as an indirect ownership.
   7317       e = member->getBase();
   7318       continue;
   7319     }
   7320 
   7321     if (PseudoObjectExpr *pseudo = dyn_cast<PseudoObjectExpr>(e)) {
   7322       // Only pay attention to pseudo-objects on property references.
   7323       ObjCPropertyRefExpr *pre
   7324         = dyn_cast<ObjCPropertyRefExpr>(pseudo->getSyntacticForm()
   7325                                               ->IgnoreParens());
   7326       if (!pre) return false;
   7327       if (pre->isImplicitProperty()) return false;
   7328       ObjCPropertyDecl *property = pre->getExplicitProperty();
   7329       if (!property->isRetaining() &&
   7330           !(property->getPropertyIvarDecl() &&
   7331             property->getPropertyIvarDecl()->getType()
   7332               .getObjCLifetime() == Qualifiers::OCL_Strong))
   7333           return false;
   7334 
   7335       owner.Indirect = true;
   7336       if (pre->isSuperReceiver()) {
   7337         owner.Variable = S.getCurMethodDecl()->getSelfDecl();
   7338         if (!owner.Variable)
   7339           return false;
   7340         owner.Loc = pre->getLocation();
   7341         owner.Range = pre->getSourceRange();
   7342         return true;
   7343       }
   7344       e = const_cast<Expr*>(cast<OpaqueValueExpr>(pre->getBase())
   7345                               ->getSourceExpr());
   7346       continue;
   7347     }
   7348 
   7349     // Array ivars?
   7350 
   7351     return false;
   7352   }
   7353 }
   7354 
   7355 namespace {
   7356   struct FindCaptureVisitor : EvaluatedExprVisitor<FindCaptureVisitor> {
   7357     FindCaptureVisitor(ASTContext &Context, VarDecl *variable)
   7358       : EvaluatedExprVisitor<FindCaptureVisitor>(Context),
   7359         Context(Context), Variable(variable), Capturer(nullptr),
   7360         VarWillBeReased(false) {}
   7361     ASTContext &Context;
   7362     VarDecl *Variable;
   7363     Expr *Capturer;
   7364     bool VarWillBeReased;
   7365 
   7366     void VisitDeclRefExpr(DeclRefExpr *ref) {
   7367       if (ref->getDecl() == Variable && !Capturer)
   7368         Capturer = ref;
   7369     }
   7370 
   7371     void VisitObjCIvarRefExpr(ObjCIvarRefExpr *ref) {
   7372       if (Capturer) return;
   7373       Visit(ref->getBase());
   7374       if (Capturer && ref->isFreeIvar())
   7375         Capturer = ref;
   7376     }
   7377 
   7378     void VisitBlockExpr(BlockExpr *block) {
   7379       // Look inside nested blocks
   7380       if (block->getBlockDecl()->capturesVariable(Variable))
   7381         Visit(block->getBlockDecl()->getBody());
   7382     }
   7383 
   7384     void VisitOpaqueValueExpr(OpaqueValueExpr *OVE) {
   7385       if (Capturer) return;
   7386       if (OVE->getSourceExpr())
   7387         Visit(OVE->getSourceExpr());
   7388     }
   7389     void VisitBinaryOperator(BinaryOperator *BinOp) {
   7390       if (!Variable || VarWillBeReased || BinOp->getOpcode() != BO_Assign)
   7391         return;
   7392       Expr *LHS = BinOp->getLHS();
   7393       if (const DeclRefExpr *DRE = dyn_cast_or_null<DeclRefExpr>(LHS)) {
   7394         if (DRE->getDecl() != Variable)
   7395           return;
   7396         if (Expr *RHS = BinOp->getRHS()) {
   7397           RHS = RHS->IgnoreParenCasts();
   7398           llvm::APSInt Value;
   7399           VarWillBeReased =
   7400             (RHS && RHS->isIntegerConstantExpr(Value, Context) && Value == 0);
   7401         }
   7402       }
   7403     }
   7404   };
   7405 }
   7406 
   7407 /// Check whether the given argument is a block which captures a
   7408 /// variable.
   7409 static Expr *findCapturingExpr(Sema &S, Expr *e, RetainCycleOwner &owner) {
   7410   assert(owner.Variable && owner.Loc.isValid());
   7411 
   7412   e = e->IgnoreParenCasts();
   7413 
   7414   // Look through [^{...} copy] and Block_copy(^{...}).
   7415   if (ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(e)) {
   7416     Selector Cmd = ME->getSelector();
   7417     if (Cmd.isUnarySelector() && Cmd.getNameForSlot(0) == "copy") {
   7418       e = ME->getInstanceReceiver();
   7419       if (!e)
   7420         return nullptr;
   7421       e = e->IgnoreParenCasts();
   7422     }
   7423   } else if (CallExpr *CE = dyn_cast<CallExpr>(e)) {
   7424     if (CE->getNumArgs() == 1) {
   7425       FunctionDecl *Fn = dyn_cast_or_null<FunctionDecl>(CE->getCalleeDecl());
   7426       if (Fn) {
   7427         const IdentifierInfo *FnI = Fn->getIdentifier();
   7428         if (FnI && FnI->isStr("_Block_copy")) {
   7429           e = CE->getArg(0)->IgnoreParenCasts();
   7430         }
   7431       }
   7432     }
   7433   }
   7434 
   7435   BlockExpr *block = dyn_cast<BlockExpr>(e);
   7436   if (!block || !block->getBlockDecl()->capturesVariable(owner.Variable))
   7437     return nullptr;
   7438 
   7439   FindCaptureVisitor visitor(S.Context, owner.Variable);
   7440   visitor.Visit(block->getBlockDecl()->getBody());
   7441   return visitor.VarWillBeReased ? nullptr : visitor.Capturer;
   7442 }
   7443 
   7444 static void diagnoseRetainCycle(Sema &S, Expr *capturer,
   7445                                 RetainCycleOwner &owner) {
   7446   assert(capturer);
   7447   assert(owner.Variable && owner.Loc.isValid());
   7448 
   7449   S.Diag(capturer->getExprLoc(), diag::warn_arc_retain_cycle)
   7450     << owner.Variable << capturer->getSourceRange();
   7451   S.Diag(owner.Loc, diag::note_arc_retain_cycle_owner)
   7452     << owner.Indirect << owner.Range;
   7453 }
   7454 
   7455 /// Check for a keyword selector that starts with the word 'add' or
   7456 /// 'set'.
   7457 static bool isSetterLikeSelector(Selector sel) {
   7458   if (sel.isUnarySelector()) return false;
   7459 
   7460   StringRef str = sel.getNameForSlot(0);
   7461   while (!str.empty() && str.front() == '_') str = str.substr(1);
   7462   if (str.startswith("set"))
   7463     str = str.substr(3);
   7464   else if (str.startswith("add")) {
   7465     // Specially whitelist 'addOperationWithBlock:'.
   7466     if (sel.getNumArgs() == 1 && str.startswith("addOperationWithBlock"))
   7467       return false;
   7468     str = str.substr(3);
   7469   }
   7470   else
   7471     return false;
   7472 
   7473   if (str.empty()) return true;
   7474   return !isLowercase(str.front());
   7475 }
   7476 
   7477 /// Check a message send to see if it's likely to cause a retain cycle.
   7478 void Sema::checkRetainCycles(ObjCMessageExpr *msg) {
   7479   // Only check instance methods whose selector looks like a setter.
   7480   if (!msg->isInstanceMessage() || !isSetterLikeSelector(msg->getSelector()))
   7481     return;
   7482 
   7483   // Try to find a variable that the receiver is strongly owned by.
   7484   RetainCycleOwner owner;
   7485   if (msg->getReceiverKind() == ObjCMessageExpr::Instance) {
   7486     if (!findRetainCycleOwner(*this, msg->getInstanceReceiver(), owner))
   7487       return;
   7488   } else {
   7489     assert(msg->getReceiverKind() == ObjCMessageExpr::SuperInstance);
   7490     owner.Variable = getCurMethodDecl()->getSelfDecl();
   7491     owner.Loc = msg->getSuperLoc();
   7492     owner.Range = msg->getSuperLoc();
   7493   }
   7494 
   7495   // Check whether the receiver is captured by any of the arguments.
   7496   for (unsigned i = 0, e = msg->getNumArgs(); i != e; ++i)
   7497     if (Expr *capturer = findCapturingExpr(*this, msg->getArg(i), owner))
   7498       return diagnoseRetainCycle(*this, capturer, owner);
   7499 }
   7500 
   7501 /// Check a property assign to see if it's likely to cause a retain cycle.
   7502 void Sema::checkRetainCycles(Expr *receiver, Expr *argument) {
   7503   RetainCycleOwner owner;
   7504   if (!findRetainCycleOwner(*this, receiver, owner))
   7505     return;
   7506 
   7507   if (Expr *capturer = findCapturingExpr(*this, argument, owner))
   7508     diagnoseRetainCycle(*this, capturer, owner);
   7509 }
   7510 
   7511 void Sema::checkRetainCycles(VarDecl *Var, Expr *Init) {
   7512   RetainCycleOwner Owner;
   7513   if (!considerVariable(Var, /*DeclRefExpr=*/nullptr, Owner))
   7514     return;
   7515 
   7516   // Because we don't have an expression for the variable, we have to set the
   7517   // location explicitly here.
   7518   Owner.Loc = Var->getLocation();
   7519   Owner.Range = Var->getSourceRange();
   7520 
   7521   if (Expr *Capturer = findCapturingExpr(*this, Init, Owner))
   7522     diagnoseRetainCycle(*this, Capturer, Owner);
   7523 }
   7524 
   7525 static bool checkUnsafeAssignLiteral(Sema &S, SourceLocation Loc,
   7526                                      Expr *RHS, bool isProperty) {
   7527   // Check if RHS is an Objective-C object literal, which also can get
   7528   // immediately zapped in a weak reference.  Note that we explicitly
   7529   // allow ObjCStringLiterals, since those are designed to never really die.
   7530   RHS = RHS->IgnoreParenImpCasts();
   7531 
   7532   // This enum needs to match with the 'select' in
   7533   // warn_objc_arc_literal_assign (off-by-1).
   7534   Sema::ObjCLiteralKind Kind = S.CheckLiteralKind(RHS);
   7535   if (Kind == Sema::LK_String || Kind == Sema::LK_None)
   7536     return false;
   7537 
   7538   S.Diag(Loc, diag::warn_arc_literal_assign)
   7539     << (unsigned) Kind
   7540     << (isProperty ? 0 : 1)
   7541     << RHS->getSourceRange();
   7542 
   7543   return true;
   7544 }
   7545 
   7546 static bool checkUnsafeAssignObject(Sema &S, SourceLocation Loc,
   7547                                     Qualifiers::ObjCLifetime LT,
   7548                                     Expr *RHS, bool isProperty) {
   7549   // Strip off any implicit cast added to get to the one ARC-specific.
   7550   while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {
   7551     if (cast->getCastKind() == CK_ARCConsumeObject) {
   7552       S.Diag(Loc, diag::warn_arc_retained_assign)
   7553         << (LT == Qualifiers::OCL_ExplicitNone)
   7554         << (isProperty ? 0 : 1)
   7555         << RHS->getSourceRange();
   7556       return true;
   7557     }
   7558     RHS = cast->getSubExpr();
   7559   }
   7560 
   7561   if (LT == Qualifiers::OCL_Weak &&
   7562       checkUnsafeAssignLiteral(S, Loc, RHS, isProperty))
   7563     return true;
   7564 
   7565   return false;
   7566 }
   7567 
   7568 bool Sema::checkUnsafeAssigns(SourceLocation Loc,
   7569                               QualType LHS, Expr *RHS) {
   7570   Qualifiers::ObjCLifetime LT = LHS.getObjCLifetime();
   7571 
   7572   if (LT != Qualifiers::OCL_Weak && LT != Qualifiers::OCL_ExplicitNone)
   7573     return false;
   7574 
   7575   if (checkUnsafeAssignObject(*this, Loc, LT, RHS, false))
   7576     return true;
   7577 
   7578   return false;
   7579 }
   7580 
   7581 void Sema::checkUnsafeExprAssigns(SourceLocation Loc,
   7582                               Expr *LHS, Expr *RHS) {
   7583   QualType LHSType;
   7584   // PropertyRef on LHS type need be directly obtained from
   7585   // its declaration as it has a PseudoType.
   7586   ObjCPropertyRefExpr *PRE
   7587     = dyn_cast<ObjCPropertyRefExpr>(LHS->IgnoreParens());
   7588   if (PRE && !PRE->isImplicitProperty()) {
   7589     const ObjCPropertyDecl *PD = PRE->getExplicitProperty();
   7590     if (PD)
   7591       LHSType = PD->getType();
   7592   }
   7593 
   7594   if (LHSType.isNull())
   7595     LHSType = LHS->getType();
   7596 
   7597   Qualifiers::ObjCLifetime LT = LHSType.getObjCLifetime();
   7598 
   7599   if (LT == Qualifiers::OCL_Weak) {
   7600     if (!Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, Loc))
   7601       getCurFunction()->markSafeWeakUse(LHS);
   7602   }
   7603 
   7604   if (checkUnsafeAssigns(Loc, LHSType, RHS))
   7605     return;
   7606 
   7607   // FIXME. Check for other life times.
   7608   if (LT != Qualifiers::OCL_None)
   7609     return;
   7610 
   7611   if (PRE) {
   7612     if (PRE->isImplicitProperty())
   7613       return;
   7614     const ObjCPropertyDecl *PD = PRE->getExplicitProperty();
   7615     if (!PD)
   7616       return;
   7617 
   7618     unsigned Attributes = PD->getPropertyAttributes();
   7619     if (Attributes & ObjCPropertyDecl::OBJC_PR_assign) {
   7620       // when 'assign' attribute was not explicitly specified
   7621       // by user, ignore it and rely on property type itself
   7622       // for lifetime info.
   7623       unsigned AsWrittenAttr = PD->getPropertyAttributesAsWritten();
   7624       if (!(AsWrittenAttr & ObjCPropertyDecl::OBJC_PR_assign) &&
   7625           LHSType->isObjCRetainableType())
   7626         return;
   7627 
   7628       while (ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(RHS)) {
   7629         if (cast->getCastKind() == CK_ARCConsumeObject) {
   7630           Diag(Loc, diag::warn_arc_retained_property_assign)
   7631           << RHS->getSourceRange();
   7632           return;
   7633         }
   7634         RHS = cast->getSubExpr();
   7635       }
   7636     }
   7637     else if (Attributes & ObjCPropertyDecl::OBJC_PR_weak) {
   7638       if (checkUnsafeAssignObject(*this, Loc, Qualifiers::OCL_Weak, RHS, true))
   7639         return;
   7640     }
   7641   }
   7642 }
   7643 
   7644 //===--- CHECK: Empty statement body (-Wempty-body) ---------------------===//
   7645 
   7646 namespace {
   7647 bool ShouldDiagnoseEmptyStmtBody(const SourceManager &SourceMgr,
   7648                                  SourceLocation StmtLoc,
   7649                                  const NullStmt *Body) {
   7650   // Do not warn if the body is a macro that expands to nothing, e.g:
   7651   //
   7652   // #define CALL(x)
   7653   // if (condition)
   7654   //   CALL(0);
   7655   //
   7656   if (Body->hasLeadingEmptyMacro())
   7657     return false;
   7658 
   7659   // Get line numbers of statement and body.
   7660   bool StmtLineInvalid;
   7661   unsigned StmtLine = SourceMgr.getSpellingLineNumber(StmtLoc,
   7662                                                       &StmtLineInvalid);
   7663   if (StmtLineInvalid)
   7664     return false;
   7665 
   7666   bool BodyLineInvalid;
   7667   unsigned BodyLine = SourceMgr.getSpellingLineNumber(Body->getSemiLoc(),
   7668                                                       &BodyLineInvalid);
   7669   if (BodyLineInvalid)
   7670     return false;
   7671 
   7672   // Warn if null statement and body are on the same line.
   7673   if (StmtLine != BodyLine)
   7674     return false;
   7675 
   7676   return true;
   7677 }
   7678 } // Unnamed namespace
   7679 
   7680 void Sema::DiagnoseEmptyStmtBody(SourceLocation StmtLoc,
   7681                                  const Stmt *Body,
   7682                                  unsigned DiagID) {
   7683   // Since this is a syntactic check, don't emit diagnostic for template
   7684   // instantiations, this just adds noise.
   7685   if (CurrentInstantiationScope)
   7686     return;
   7687 
   7688   // The body should be a null statement.
   7689   const NullStmt *NBody = dyn_cast<NullStmt>(Body);
   7690   if (!NBody)
   7691     return;
   7692 
   7693   // Do the usual checks.
   7694   if (!ShouldDiagnoseEmptyStmtBody(SourceMgr, StmtLoc, NBody))
   7695     return;
   7696 
   7697   Diag(NBody->getSemiLoc(), DiagID);
   7698   Diag(NBody->getSemiLoc(), diag::note_empty_body_on_separate_line);
   7699 }
   7700 
   7701 void Sema::DiagnoseEmptyLoopBody(const Stmt *S,
   7702                                  const Stmt *PossibleBody) {
   7703   assert(!CurrentInstantiationScope); // Ensured by caller
   7704 
   7705   SourceLocation StmtLoc;
   7706   const Stmt *Body;
   7707   unsigned DiagID;
   7708   if (const ForStmt *FS = dyn_cast<ForStmt>(S)) {
   7709     StmtLoc = FS->getRParenLoc();
   7710     Body = FS->getBody();
   7711     DiagID = diag::warn_empty_for_body;
   7712   } else if (const WhileStmt *WS = dyn_cast<WhileStmt>(S)) {
   7713     StmtLoc = WS->getCond()->getSourceRange().getEnd();
   7714     Body = WS->getBody();
   7715     DiagID = diag::warn_empty_while_body;
   7716   } else
   7717     return; // Neither `for' nor `while'.
   7718 
   7719   // The body should be a null statement.
   7720   const NullStmt *NBody = dyn_cast<NullStmt>(Body);
   7721   if (!NBody)
   7722     return;
   7723 
   7724   // Skip expensive checks if diagnostic is disabled.
   7725   if (Diags.isIgnored(DiagID, NBody->getSemiLoc()))
   7726     return;
   7727 
   7728   // Do the usual checks.
   7729   if (!ShouldDiagnoseEmptyStmtBody(SourceMgr, StmtLoc, NBody))
   7730     return;
   7731 
   7732   // `for(...);' and `while(...);' are popular idioms, so in order to keep
   7733   // noise level low, emit diagnostics only if for/while is followed by a
   7734   // CompoundStmt, e.g.:
   7735   //    for (int i = 0; i < n; i++);
   7736   //    {
   7737   //      a(i);
   7738   //    }
   7739   // or if for/while is followed by a statement with more indentation
   7740   // than for/while itself:
   7741   //    for (int i = 0; i < n; i++);
   7742   //      a(i);
   7743   bool ProbableTypo = isa<CompoundStmt>(PossibleBody);
   7744   if (!ProbableTypo) {
   7745     bool BodyColInvalid;
   7746     unsigned BodyCol = SourceMgr.getPresumedColumnNumber(
   7747                              PossibleBody->getLocStart(),
   7748                              &BodyColInvalid);
   7749     if (BodyColInvalid)
   7750       return;
   7751 
   7752     bool StmtColInvalid;
   7753     unsigned StmtCol = SourceMgr.getPresumedColumnNumber(
   7754                              S->getLocStart(),
   7755                              &StmtColInvalid);
   7756     if (StmtColInvalid)
   7757       return;
   7758 
   7759     if (BodyCol > StmtCol)
   7760       ProbableTypo = true;
   7761   }
   7762 
   7763   if (ProbableTypo) {
   7764     Diag(NBody->getSemiLoc(), DiagID);
   7765     Diag(NBody->getSemiLoc(), diag::note_empty_body_on_separate_line);
   7766   }
   7767 }
   7768 
   7769 //===--- Layout compatibility ----------------------------------------------//
   7770 
   7771 namespace {
   7772 
   7773 bool isLayoutCompatible(ASTContext &C, QualType T1, QualType T2);
   7774 
   7775 /// \brief Check if two enumeration types are layout-compatible.
   7776 bool isLayoutCompatible(ASTContext &C, EnumDecl *ED1, EnumDecl *ED2) {
   7777   // C++11 [dcl.enum] p8:
   7778   // Two enumeration types are layout-compatible if they have the same
   7779   // underlying type.
   7780   return ED1->isComplete() && ED2->isComplete() &&
   7781          C.hasSameType(ED1->getIntegerType(), ED2->getIntegerType());
   7782 }
   7783 
   7784 /// \brief Check if two fields are layout-compatible.
   7785 bool isLayoutCompatible(ASTContext &C, FieldDecl *Field1, FieldDecl *Field2) {
   7786   if (!isLayoutCompatible(C, Field1->getType(), Field2->getType()))
   7787     return false;
   7788 
   7789   if (Field1->isBitField() != Field2->isBitField())
   7790     return false;
   7791 
   7792   if (Field1->isBitField()) {
   7793     // Make sure that the bit-fields are the same length.
   7794     unsigned Bits1 = Field1->getBitWidthValue(C);
   7795     unsigned Bits2 = Field2->getBitWidthValue(C);
   7796 
   7797     if (Bits1 != Bits2)
   7798       return false;
   7799   }
   7800 
   7801   return true;
   7802 }
   7803 
   7804 /// \brief Check if two standard-layout structs are layout-compatible.
   7805 /// (C++11 [class.mem] p17)
   7806 bool isLayoutCompatibleStruct(ASTContext &C,
   7807                               RecordDecl *RD1,
   7808                               RecordDecl *RD2) {
   7809   // If both records are C++ classes, check that base classes match.
   7810   if (const CXXRecordDecl *D1CXX = dyn_cast<CXXRecordDecl>(RD1)) {
   7811     // If one of records is a CXXRecordDecl we are in C++ mode,
   7812     // thus the other one is a CXXRecordDecl, too.
   7813     const CXXRecordDecl *D2CXX = cast<CXXRecordDecl>(RD2);
   7814     // Check number of base classes.
   7815     if (D1CXX->getNumBases() != D2CXX->getNumBases())
   7816       return false;
   7817 
   7818     // Check the base classes.
   7819     for (CXXRecordDecl::base_class_const_iterator
   7820                Base1 = D1CXX->bases_begin(),
   7821            BaseEnd1 = D1CXX->bases_end(),
   7822               Base2 = D2CXX->bases_begin();
   7823          Base1 != BaseEnd1;
   7824          ++Base1, ++Base2) {
   7825       if (!isLayoutCompatible(C, Base1->getType(), Base2->getType()))
   7826         return false;
   7827     }
   7828   } else if (const CXXRecordDecl *D2CXX = dyn_cast<CXXRecordDecl>(RD2)) {
   7829     // If only RD2 is a C++ class, it should have zero base classes.
   7830     if (D2CXX->getNumBases() > 0)
   7831       return false;
   7832   }
   7833 
   7834   // Check the fields.
   7835   RecordDecl::field_iterator Field2 = RD2->field_begin(),
   7836                              Field2End = RD2->field_end(),
   7837                              Field1 = RD1->field_begin(),
   7838                              Field1End = RD1->field_end();
   7839   for ( ; Field1 != Field1End && Field2 != Field2End; ++Field1, ++Field2) {
   7840     if (!isLayoutCompatible(C, *Field1, *Field2))
   7841       return false;
   7842   }
   7843   if (Field1 != Field1End || Field2 != Field2End)
   7844     return false;
   7845 
   7846   return true;
   7847 }
   7848 
   7849 /// \brief Check if two standard-layout unions are layout-compatible.
   7850 /// (C++11 [class.mem] p18)
   7851 bool isLayoutCompatibleUnion(ASTContext &C,
   7852                              RecordDecl *RD1,
   7853                              RecordDecl *RD2) {
   7854   llvm::SmallPtrSet<FieldDecl *, 8> UnmatchedFields;
   7855   for (auto *Field2 : RD2->fields())
   7856     UnmatchedFields.insert(Field2);
   7857 
   7858   for (auto *Field1 : RD1->fields()) {
   7859     llvm::SmallPtrSet<FieldDecl *, 8>::iterator
   7860         I = UnmatchedFields.begin(),
   7861         E = UnmatchedFields.end();
   7862 
   7863     for ( ; I != E; ++I) {
   7864       if (isLayoutCompatible(C, Field1, *I)) {
   7865         bool Result = UnmatchedFields.erase(*I);
   7866         (void) Result;
   7867         assert(Result);
   7868         break;
   7869       }
   7870     }
   7871     if (I == E)
   7872       return false;
   7873   }
   7874 
   7875   return UnmatchedFields.empty();
   7876 }
   7877 
   7878 bool isLayoutCompatible(ASTContext &C, RecordDecl *RD1, RecordDecl *RD2) {
   7879   if (RD1->isUnion() != RD2->isUnion())
   7880     return false;
   7881 
   7882   if (RD1->isUnion())
   7883     return isLayoutCompatibleUnion(C, RD1, RD2);
   7884   else
   7885     return isLayoutCompatibleStruct(C, RD1, RD2);
   7886 }
   7887 
   7888 /// \brief Check if two types are layout-compatible in C++11 sense.
   7889 bool isLayoutCompatible(ASTContext &C, QualType T1, QualType T2) {
   7890   if (T1.isNull() || T2.isNull())
   7891     return false;
   7892 
   7893   // C++11 [basic.types] p11:
   7894   // If two types T1 and T2 are the same type, then T1 and T2 are
   7895   // layout-compatible types.
   7896   if (C.hasSameType(T1, T2))
   7897     return true;
   7898 
   7899   T1 = T1.getCanonicalType().getUnqualifiedType();
   7900   T2 = T2.getCanonicalType().getUnqualifiedType();
   7901 
   7902   const Type::TypeClass TC1 = T1->getTypeClass();
   7903   const Type::TypeClass TC2 = T2->getTypeClass();
   7904 
   7905   if (TC1 != TC2)
   7906     return false;
   7907 
   7908   if (TC1 == Type::Enum) {
   7909     return isLayoutCompatible(C,
   7910                               cast<EnumType>(T1)->getDecl(),
   7911                               cast<EnumType>(T2)->getDecl());
   7912   } else if (TC1 == Type::Record) {
   7913     if (!T1->isStandardLayoutType() || !T2->isStandardLayoutType())
   7914       return false;
   7915 
   7916     return isLayoutCompatible(C,
   7917                               cast<RecordType>(T1)->getDecl(),
   7918                               cast<RecordType>(T2)->getDecl());
   7919   }
   7920 
   7921   return false;
   7922 }
   7923 }
   7924 
   7925 //===--- CHECK: pointer_with_type_tag attribute: datatypes should match ----//
   7926 
   7927 namespace {
   7928 /// \brief Given a type tag expression find the type tag itself.
   7929 ///
   7930 /// \param TypeExpr Type tag expression, as it appears in user's code.
   7931 ///
   7932 /// \param VD Declaration of an identifier that appears in a type tag.
   7933 ///
   7934 /// \param MagicValue Type tag magic value.
   7935 bool FindTypeTagExpr(const Expr *TypeExpr, const ASTContext &Ctx,
   7936                      const ValueDecl **VD, uint64_t *MagicValue) {
   7937   while(true) {
   7938     if (!TypeExpr)
   7939       return false;
   7940 
   7941     TypeExpr = TypeExpr->IgnoreParenImpCasts()->IgnoreParenCasts();
   7942 
   7943     switch (TypeExpr->getStmtClass()) {
   7944     case Stmt::UnaryOperatorClass: {
   7945       const UnaryOperator *UO = cast<UnaryOperator>(TypeExpr);
   7946       if (UO->getOpcode() == UO_AddrOf || UO->getOpcode() == UO_Deref) {
   7947         TypeExpr = UO->getSubExpr();
   7948         continue;
   7949       }
   7950       return false;
   7951     }
   7952 
   7953     case Stmt::DeclRefExprClass: {
   7954       const DeclRefExpr *DRE = cast<DeclRefExpr>(TypeExpr);
   7955       *VD = DRE->getDecl();
   7956       return true;
   7957     }
   7958 
   7959     case Stmt::IntegerLiteralClass: {
   7960       const IntegerLiteral *IL = cast<IntegerLiteral>(TypeExpr);
   7961       llvm::APInt MagicValueAPInt = IL->getValue();
   7962       if (MagicValueAPInt.getActiveBits() <= 64) {
   7963         *MagicValue = MagicValueAPInt.getZExtValue();
   7964         return true;
   7965       } else
   7966         return false;
   7967     }
   7968 
   7969     case Stmt::BinaryConditionalOperatorClass:
   7970     case Stmt::ConditionalOperatorClass: {
   7971       const AbstractConditionalOperator *ACO =
   7972           cast<AbstractConditionalOperator>(TypeExpr);
   7973       bool Result;
   7974       if (ACO->getCond()->EvaluateAsBooleanCondition(Result, Ctx)) {
   7975         if (Result)
   7976           TypeExpr = ACO->getTrueExpr();
   7977         else
   7978           TypeExpr = ACO->getFalseExpr();
   7979         continue;
   7980       }
   7981       return false;
   7982     }
   7983 
   7984     case Stmt::BinaryOperatorClass: {
   7985       const BinaryOperator *BO = cast<BinaryOperator>(TypeExpr);
   7986       if (BO->getOpcode() == BO_Comma) {
   7987         TypeExpr = BO->getRHS();
   7988         continue;
   7989       }
   7990       return false;
   7991     }
   7992 
   7993     default:
   7994       return false;
   7995     }
   7996   }
   7997 }
   7998 
   7999 /// \brief Retrieve the C type corresponding to type tag TypeExpr.
   8000 ///
   8001 /// \param TypeExpr Expression that specifies a type tag.
   8002 ///
   8003 /// \param MagicValues Registered magic values.
   8004 ///
   8005 /// \param FoundWrongKind Set to true if a type tag was found, but of a wrong
   8006 ///        kind.
   8007 ///
   8008 /// \param TypeInfo Information about the corresponding C type.
   8009 ///
   8010 /// \returns true if the corresponding C type was found.
   8011 bool GetMatchingCType(
   8012         const IdentifierInfo *ArgumentKind,
   8013         const Expr *TypeExpr, const ASTContext &Ctx,
   8014         const llvm::DenseMap<Sema::TypeTagMagicValue,
   8015                              Sema::TypeTagData> *MagicValues,
   8016         bool &FoundWrongKind,
   8017         Sema::TypeTagData &TypeInfo) {
   8018   FoundWrongKind = false;
   8019 
   8020   // Variable declaration that has type_tag_for_datatype attribute.
   8021   const ValueDecl *VD = nullptr;
   8022 
   8023   uint64_t MagicValue;
   8024 
   8025   if (!FindTypeTagExpr(TypeExpr, Ctx, &VD, &MagicValue))
   8026     return false;
   8027 
   8028   if (VD) {
   8029     if (TypeTagForDatatypeAttr *I = VD->getAttr<TypeTagForDatatypeAttr>()) {
   8030       if (I->getArgumentKind() != ArgumentKind) {
   8031         FoundWrongKind = true;
   8032         return false;
   8033       }
   8034       TypeInfo.Type = I->getMatchingCType();
   8035       TypeInfo.LayoutCompatible = I->getLayoutCompatible();
   8036       TypeInfo.MustBeNull = I->getMustBeNull();
   8037       return true;
   8038     }
   8039     return false;
   8040   }
   8041 
   8042   if (!MagicValues)
   8043     return false;
   8044 
   8045   llvm::DenseMap<Sema::TypeTagMagicValue,
   8046                  Sema::TypeTagData>::const_iterator I =
   8047       MagicValues->find(std::make_pair(ArgumentKind, MagicValue));
   8048   if (I == MagicValues->end())
   8049     return false;
   8050 
   8051   TypeInfo = I->second;
   8052   return true;
   8053 }
   8054 } // unnamed namespace
   8055 
   8056 void Sema::RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind,
   8057                                       uint64_t MagicValue, QualType Type,
   8058                                       bool LayoutCompatible,
   8059                                       bool MustBeNull) {
   8060   if (!TypeTagForDatatypeMagicValues)
   8061     TypeTagForDatatypeMagicValues.reset(
   8062         new llvm::DenseMap<TypeTagMagicValue, TypeTagData>);
   8063 
   8064   TypeTagMagicValue Magic(ArgumentKind, MagicValue);
   8065   (*TypeTagForDatatypeMagicValues)[Magic] =
   8066       TypeTagData(Type, LayoutCompatible, MustBeNull);
   8067 }
   8068 
   8069 namespace {
   8070 bool IsSameCharType(QualType T1, QualType T2) {
   8071   const BuiltinType *BT1 = T1->getAs<BuiltinType>();
   8072   if (!BT1)
   8073     return false;
   8074 
   8075   const BuiltinType *BT2 = T2->getAs<BuiltinType>();
   8076   if (!BT2)
   8077     return false;
   8078 
   8079   BuiltinType::Kind T1Kind = BT1->getKind();
   8080   BuiltinType::Kind T2Kind = BT2->getKind();
   8081 
   8082   return (T1Kind == BuiltinType::SChar  && T2Kind == BuiltinType::Char_S) ||
   8083          (T1Kind == BuiltinType::UChar  && T2Kind == BuiltinType::Char_U) ||
   8084          (T1Kind == BuiltinType::Char_U && T2Kind == BuiltinType::UChar) ||
   8085          (T1Kind == BuiltinType::Char_S && T2Kind == BuiltinType::SChar);
   8086 }
   8087 } // unnamed namespace
   8088 
   8089 void Sema::CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr,
   8090                                     const Expr * const *ExprArgs) {
   8091   const IdentifierInfo *ArgumentKind = Attr->getArgumentKind();
   8092   bool IsPointerAttr = Attr->getIsPointer();
   8093 
   8094   const Expr *TypeTagExpr = ExprArgs[Attr->getTypeTagIdx()];
   8095   bool FoundWrongKind;
   8096   TypeTagData TypeInfo;
   8097   if (!GetMatchingCType(ArgumentKind, TypeTagExpr, Context,
   8098                         TypeTagForDatatypeMagicValues.get(),
   8099                         FoundWrongKind, TypeInfo)) {
   8100     if (FoundWrongKind)
   8101       Diag(TypeTagExpr->getExprLoc(),
   8102            diag::warn_type_tag_for_datatype_wrong_kind)
   8103         << TypeTagExpr->getSourceRange();
   8104     return;
   8105   }
   8106 
   8107   const Expr *ArgumentExpr = ExprArgs[Attr->getArgumentIdx()];
   8108   if (IsPointerAttr) {
   8109     // Skip implicit cast of pointer to `void *' (as a function argument).
   8110     if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(ArgumentExpr))
   8111       if (ICE->getType()->isVoidPointerType() &&
   8112           ICE->getCastKind() == CK_BitCast)
   8113         ArgumentExpr = ICE->getSubExpr();
   8114   }
   8115   QualType ArgumentType = ArgumentExpr->getType();
   8116 
   8117   // Passing a `void*' pointer shouldn't trigger a warning.
   8118   if (IsPointerAttr && ArgumentType->isVoidPointerType())
   8119     return;
   8120 
   8121   if (TypeInfo.MustBeNull) {
   8122     // Type tag with matching void type requires a null pointer.
   8123     if (!ArgumentExpr->isNullPointerConstant(Context,
   8124                                              Expr::NPC_ValueDependentIsNotNull)) {
   8125       Diag(ArgumentExpr->getExprLoc(),
   8126            diag::warn_type_safety_null_pointer_required)
   8127           << ArgumentKind->getName()
   8128           << ArgumentExpr->getSourceRange()
   8129           << TypeTagExpr->getSourceRange();
   8130     }
   8131     return;
   8132   }
   8133 
   8134   QualType RequiredType = TypeInfo.Type;
   8135   if (IsPointerAttr)
   8136     RequiredType = Context.getPointerType(RequiredType);
   8137 
   8138   bool mismatch = false;
   8139   if (!TypeInfo.LayoutCompatible) {
   8140     mismatch = !Context.hasSameType(ArgumentType, RequiredType);
   8141 
   8142     // C++11 [basic.fundamental] p1:
   8143     // Plain char, signed char, and unsigned char are three distinct types.
   8144     //
   8145     // But we treat plain `char' as equivalent to `signed char' or `unsigned
   8146     // char' depending on the current char signedness mode.
   8147     if (mismatch)
   8148       if ((IsPointerAttr && IsSameCharType(ArgumentType->getPointeeType(),
   8149                                            RequiredType->getPointeeType())) ||
   8150           (!IsPointerAttr && IsSameCharType(ArgumentType, RequiredType)))
   8151         mismatch = false;
   8152   } else
   8153     if (IsPointerAttr)
   8154       mismatch = !isLayoutCompatible(Context,
   8155                                      ArgumentType->getPointeeType(),
   8156                                      RequiredType->getPointeeType());
   8157     else
   8158       mismatch = !isLayoutCompatible(Context, ArgumentType, RequiredType);
   8159 
   8160   if (mismatch)
   8161     Diag(ArgumentExpr->getExprLoc(), diag::warn_type_safety_type_mismatch)
   8162         << ArgumentType << ArgumentKind
   8163         << TypeInfo.LayoutCompatible << RequiredType
   8164         << ArgumentExpr->getSourceRange()
   8165         << TypeTagExpr->getSourceRange();
   8166 }
   8167 
   8168