1 //===--- SemaExpr.cpp - Semantic Analysis for Expressions -----------------===// 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 semantic analysis for expressions. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "clang/Sema/SemaInternal.h" 15 #include "clang/Sema/Initialization.h" 16 #include "clang/Sema/Lookup.h" 17 #include "clang/Sema/AnalysisBasedWarnings.h" 18 #include "clang/AST/ASTContext.h" 19 #include "clang/AST/ASTMutationListener.h" 20 #include "clang/AST/CXXInheritance.h" 21 #include "clang/AST/DeclObjC.h" 22 #include "clang/AST/DeclTemplate.h" 23 #include "clang/AST/EvaluatedExprVisitor.h" 24 #include "clang/AST/Expr.h" 25 #include "clang/AST/ExprCXX.h" 26 #include "clang/AST/ExprObjC.h" 27 #include "clang/AST/RecursiveASTVisitor.h" 28 #include "clang/AST/TypeLoc.h" 29 #include "clang/Basic/PartialDiagnostic.h" 30 #include "clang/Basic/SourceManager.h" 31 #include "clang/Basic/TargetInfo.h" 32 #include "clang/Lex/LiteralSupport.h" 33 #include "clang/Lex/Preprocessor.h" 34 #include "clang/Sema/DeclSpec.h" 35 #include "clang/Sema/Designator.h" 36 #include "clang/Sema/Scope.h" 37 #include "clang/Sema/ScopeInfo.h" 38 #include "clang/Sema/ParsedTemplate.h" 39 #include "clang/Sema/SemaFixItUtils.h" 40 #include "clang/Sema/Template.h" 41 using namespace clang; 42 using namespace sema; 43 44 /// \brief Determine whether the use of this declaration is valid, without 45 /// emitting diagnostics. 46 bool Sema::CanUseDecl(NamedDecl *D) { 47 // See if this is an auto-typed variable whose initializer we are parsing. 48 if (ParsingInitForAutoVars.count(D)) 49 return false; 50 51 // See if this is a deleted function. 52 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 53 if (FD->isDeleted()) 54 return false; 55 } 56 57 // See if this function is unavailable. 58 if (D->getAvailability() == AR_Unavailable && 59 cast<Decl>(CurContext)->getAvailability() != AR_Unavailable) 60 return false; 61 62 return true; 63 } 64 65 static AvailabilityResult DiagnoseAvailabilityOfDecl(Sema &S, 66 NamedDecl *D, SourceLocation Loc, 67 const ObjCInterfaceDecl *UnknownObjCClass) { 68 // See if this declaration is unavailable or deprecated. 69 std::string Message; 70 AvailabilityResult Result = D->getAvailability(&Message); 71 switch (Result) { 72 case AR_Available: 73 case AR_NotYetIntroduced: 74 break; 75 76 case AR_Deprecated: 77 S.EmitDeprecationWarning(D, Message, Loc, UnknownObjCClass); 78 break; 79 80 case AR_Unavailable: 81 if (S.getCurContextAvailability() != AR_Unavailable) { 82 if (Message.empty()) { 83 if (!UnknownObjCClass) 84 S.Diag(Loc, diag::err_unavailable) << D->getDeclName(); 85 else 86 S.Diag(Loc, diag::warn_unavailable_fwdclass_message) 87 << D->getDeclName(); 88 } 89 else 90 S.Diag(Loc, diag::err_unavailable_message) 91 << D->getDeclName() << Message; 92 S.Diag(D->getLocation(), diag::note_unavailable_here) 93 << isa<FunctionDecl>(D) << false; 94 } 95 break; 96 } 97 return Result; 98 } 99 100 /// \brief Determine whether the use of this declaration is valid, and 101 /// emit any corresponding diagnostics. 102 /// 103 /// This routine diagnoses various problems with referencing 104 /// declarations that can occur when using a declaration. For example, 105 /// it might warn if a deprecated or unavailable declaration is being 106 /// used, or produce an error (and return true) if a C++0x deleted 107 /// function is being used. 108 /// 109 /// \returns true if there was an error (this declaration cannot be 110 /// referenced), false otherwise. 111 /// 112 bool Sema::DiagnoseUseOfDecl(NamedDecl *D, SourceLocation Loc, 113 const ObjCInterfaceDecl *UnknownObjCClass) { 114 if (getLangOptions().CPlusPlus && isa<FunctionDecl>(D)) { 115 // If there were any diagnostics suppressed by template argument deduction, 116 // emit them now. 117 llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1> >::iterator 118 Pos = SuppressedDiagnostics.find(D->getCanonicalDecl()); 119 if (Pos != SuppressedDiagnostics.end()) { 120 SmallVectorImpl<PartialDiagnosticAt> &Suppressed = Pos->second; 121 for (unsigned I = 0, N = Suppressed.size(); I != N; ++I) 122 Diag(Suppressed[I].first, Suppressed[I].second); 123 124 // Clear out the list of suppressed diagnostics, so that we don't emit 125 // them again for this specialization. However, we don't obsolete this 126 // entry from the table, because we want to avoid ever emitting these 127 // diagnostics again. 128 Suppressed.clear(); 129 } 130 } 131 132 // See if this is an auto-typed variable whose initializer we are parsing. 133 if (ParsingInitForAutoVars.count(D)) { 134 Diag(Loc, diag::err_auto_variable_cannot_appear_in_own_initializer) 135 << D->getDeclName(); 136 return true; 137 } 138 139 // See if this is a deleted function. 140 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 141 if (FD->isDeleted()) { 142 Diag(Loc, diag::err_deleted_function_use); 143 Diag(D->getLocation(), diag::note_unavailable_here) << 1 << true; 144 return true; 145 } 146 } 147 AvailabilityResult Result = 148 DiagnoseAvailabilityOfDecl(*this, D, Loc, UnknownObjCClass); 149 150 // Warn if this is used but marked unused. 151 if (D->hasAttr<UnusedAttr>()) 152 Diag(Loc, diag::warn_used_but_marked_unused) << D->getDeclName(); 153 // For available enumerator, it will become unavailable/deprecated 154 // if its enum declaration is as such. 155 if (Result == AR_Available) 156 if (const EnumConstantDecl *ECD = dyn_cast<EnumConstantDecl>(D)) { 157 const DeclContext *DC = ECD->getDeclContext(); 158 if (const EnumDecl *TheEnumDecl = dyn_cast<EnumDecl>(DC)) 159 DiagnoseAvailabilityOfDecl(*this, 160 const_cast< EnumDecl *>(TheEnumDecl), 161 Loc, UnknownObjCClass); 162 } 163 return false; 164 } 165 166 /// \brief Retrieve the message suffix that should be added to a 167 /// diagnostic complaining about the given function being deleted or 168 /// unavailable. 169 std::string Sema::getDeletedOrUnavailableSuffix(const FunctionDecl *FD) { 170 // FIXME: C++0x implicitly-deleted special member functions could be 171 // detected here so that we could improve diagnostics to say, e.g., 172 // "base class 'A' had a deleted copy constructor". 173 if (FD->isDeleted()) 174 return std::string(); 175 176 std::string Message; 177 if (FD->getAvailability(&Message)) 178 return ": " + Message; 179 180 return std::string(); 181 } 182 183 /// DiagnoseSentinelCalls - This routine checks whether a call or 184 /// message-send is to a declaration with the sentinel attribute, and 185 /// if so, it checks that the requirements of the sentinel are 186 /// satisfied. 187 void Sema::DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc, 188 Expr **args, unsigned numArgs) { 189 const SentinelAttr *attr = D->getAttr<SentinelAttr>(); 190 if (!attr) 191 return; 192 193 // The number of formal parameters of the declaration. 194 unsigned numFormalParams; 195 196 // The kind of declaration. This is also an index into a %select in 197 // the diagnostic. 198 enum CalleeType { CT_Function, CT_Method, CT_Block } calleeType; 199 200 if (ObjCMethodDecl *MD = dyn_cast<ObjCMethodDecl>(D)) { 201 numFormalParams = MD->param_size(); 202 calleeType = CT_Method; 203 } else if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { 204 numFormalParams = FD->param_size(); 205 calleeType = CT_Function; 206 } else if (isa<VarDecl>(D)) { 207 QualType type = cast<ValueDecl>(D)->getType(); 208 const FunctionType *fn = 0; 209 if (const PointerType *ptr = type->getAs<PointerType>()) { 210 fn = ptr->getPointeeType()->getAs<FunctionType>(); 211 if (!fn) return; 212 calleeType = CT_Function; 213 } else if (const BlockPointerType *ptr = type->getAs<BlockPointerType>()) { 214 fn = ptr->getPointeeType()->castAs<FunctionType>(); 215 calleeType = CT_Block; 216 } else { 217 return; 218 } 219 220 if (const FunctionProtoType *proto = dyn_cast<FunctionProtoType>(fn)) { 221 numFormalParams = proto->getNumArgs(); 222 } else { 223 numFormalParams = 0; 224 } 225 } else { 226 return; 227 } 228 229 // "nullPos" is the number of formal parameters at the end which 230 // effectively count as part of the variadic arguments. This is 231 // useful if you would prefer to not have *any* formal parameters, 232 // but the language forces you to have at least one. 233 unsigned nullPos = attr->getNullPos(); 234 assert((nullPos == 0 || nullPos == 1) && "invalid null position on sentinel"); 235 numFormalParams = (nullPos > numFormalParams ? 0 : numFormalParams - nullPos); 236 237 // The number of arguments which should follow the sentinel. 238 unsigned numArgsAfterSentinel = attr->getSentinel(); 239 240 // If there aren't enough arguments for all the formal parameters, 241 // the sentinel, and the args after the sentinel, complain. 242 if (numArgs < numFormalParams + numArgsAfterSentinel + 1) { 243 Diag(Loc, diag::warn_not_enough_argument) << D->getDeclName(); 244 Diag(D->getLocation(), diag::note_sentinel_here) << calleeType; 245 return; 246 } 247 248 // Otherwise, find the sentinel expression. 249 Expr *sentinelExpr = args[numArgs - numArgsAfterSentinel - 1]; 250 if (!sentinelExpr) return; 251 if (sentinelExpr->isValueDependent()) return; 252 253 // nullptr_t is always treated as null. 254 if (sentinelExpr->getType()->isNullPtrType()) return; 255 256 if (sentinelExpr->getType()->isAnyPointerType() && 257 sentinelExpr->IgnoreParenCasts()->isNullPointerConstant(Context, 258 Expr::NPC_ValueDependentIsNull)) 259 return; 260 261 // Unfortunately, __null has type 'int'. 262 if (isa<GNUNullExpr>(sentinelExpr)) return; 263 264 // Pick a reasonable string to insert. Optimistically use 'nil' or 265 // 'NULL' if those are actually defined in the context. Only use 266 // 'nil' for ObjC methods, where it's much more likely that the 267 // variadic arguments form a list of object pointers. 268 SourceLocation MissingNilLoc 269 = PP.getLocForEndOfToken(sentinelExpr->getLocEnd()); 270 std::string NullValue; 271 if (calleeType == CT_Method && 272 PP.getIdentifierInfo("nil")->hasMacroDefinition()) 273 NullValue = "nil"; 274 else if (PP.getIdentifierInfo("NULL")->hasMacroDefinition()) 275 NullValue = "NULL"; 276 else 277 NullValue = "(void*) 0"; 278 279 if (MissingNilLoc.isInvalid()) 280 Diag(Loc, diag::warn_missing_sentinel) << calleeType; 281 else 282 Diag(MissingNilLoc, diag::warn_missing_sentinel) 283 << calleeType 284 << FixItHint::CreateInsertion(MissingNilLoc, ", " + NullValue); 285 Diag(D->getLocation(), diag::note_sentinel_here) << calleeType; 286 } 287 288 SourceRange Sema::getExprRange(Expr *E) const { 289 return E ? E->getSourceRange() : SourceRange(); 290 } 291 292 //===----------------------------------------------------------------------===// 293 // Standard Promotions and Conversions 294 //===----------------------------------------------------------------------===// 295 296 /// DefaultFunctionArrayConversion (C99 6.3.2.1p3, C99 6.3.2.1p4). 297 ExprResult Sema::DefaultFunctionArrayConversion(Expr *E) { 298 // Handle any placeholder expressions which made it here. 299 if (E->getType()->isPlaceholderType()) { 300 ExprResult result = CheckPlaceholderExpr(E); 301 if (result.isInvalid()) return ExprError(); 302 E = result.take(); 303 } 304 305 QualType Ty = E->getType(); 306 assert(!Ty.isNull() && "DefaultFunctionArrayConversion - missing type"); 307 308 if (Ty->isFunctionType()) 309 E = ImpCastExprToType(E, Context.getPointerType(Ty), 310 CK_FunctionToPointerDecay).take(); 311 else if (Ty->isArrayType()) { 312 // In C90 mode, arrays only promote to pointers if the array expression is 313 // an lvalue. The relevant legalese is C90 6.2.2.1p3: "an lvalue that has 314 // type 'array of type' is converted to an expression that has type 'pointer 315 // to type'...". In C99 this was changed to: C99 6.3.2.1p3: "an expression 316 // that has type 'array of type' ...". The relevant change is "an lvalue" 317 // (C90) to "an expression" (C99). 318 // 319 // C++ 4.2p1: 320 // An lvalue or rvalue of type "array of N T" or "array of unknown bound of 321 // T" can be converted to an rvalue of type "pointer to T". 322 // 323 if (getLangOptions().C99 || getLangOptions().CPlusPlus || E->isLValue()) 324 E = ImpCastExprToType(E, Context.getArrayDecayedType(Ty), 325 CK_ArrayToPointerDecay).take(); 326 } 327 return Owned(E); 328 } 329 330 static void CheckForNullPointerDereference(Sema &S, Expr *E) { 331 // Check to see if we are dereferencing a null pointer. If so, 332 // and if not volatile-qualified, this is undefined behavior that the 333 // optimizer will delete, so warn about it. People sometimes try to use this 334 // to get a deterministic trap and are surprised by clang's behavior. This 335 // only handles the pattern "*null", which is a very syntactic check. 336 if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E->IgnoreParenCasts())) 337 if (UO->getOpcode() == UO_Deref && 338 UO->getSubExpr()->IgnoreParenCasts()-> 339 isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) && 340 !UO->getType().isVolatileQualified()) { 341 S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, 342 S.PDiag(diag::warn_indirection_through_null) 343 << UO->getSubExpr()->getSourceRange()); 344 S.DiagRuntimeBehavior(UO->getOperatorLoc(), UO, 345 S.PDiag(diag::note_indirection_through_null)); 346 } 347 } 348 349 ExprResult Sema::DefaultLvalueConversion(Expr *E) { 350 // Handle any placeholder expressions which made it here. 351 if (E->getType()->isPlaceholderType()) { 352 ExprResult result = CheckPlaceholderExpr(E); 353 if (result.isInvalid()) return ExprError(); 354 E = result.take(); 355 } 356 357 // C++ [conv.lval]p1: 358 // A glvalue of a non-function, non-array type T can be 359 // converted to a prvalue. 360 if (!E->isGLValue()) return Owned(E); 361 362 QualType T = E->getType(); 363 assert(!T.isNull() && "r-value conversion on typeless expression?"); 364 365 // We can't do lvalue-to-rvalue on atomics yet. 366 if (T->isAtomicType()) 367 return Owned(E); 368 369 // We don't want to throw lvalue-to-rvalue casts on top of 370 // expressions of certain types in C++. 371 if (getLangOptions().CPlusPlus && 372 (E->getType() == Context.OverloadTy || 373 T->isDependentType() || 374 T->isRecordType())) 375 return Owned(E); 376 377 // The C standard is actually really unclear on this point, and 378 // DR106 tells us what the result should be but not why. It's 379 // generally best to say that void types just doesn't undergo 380 // lvalue-to-rvalue at all. Note that expressions of unqualified 381 // 'void' type are never l-values, but qualified void can be. 382 if (T->isVoidType()) 383 return Owned(E); 384 385 CheckForNullPointerDereference(*this, E); 386 387 // C++ [conv.lval]p1: 388 // [...] If T is a non-class type, the type of the prvalue is the 389 // cv-unqualified version of T. Otherwise, the type of the 390 // rvalue is T. 391 // 392 // C99 6.3.2.1p2: 393 // If the lvalue has qualified type, the value has the unqualified 394 // version of the type of the lvalue; otherwise, the value has the 395 // type of the lvalue. 396 if (T.hasQualifiers()) 397 T = T.getUnqualifiedType(); 398 399 ExprResult Res = Owned(ImplicitCastExpr::Create(Context, T, CK_LValueToRValue, 400 E, 0, VK_RValue)); 401 402 return Res; 403 } 404 405 ExprResult Sema::DefaultFunctionArrayLvalueConversion(Expr *E) { 406 ExprResult Res = DefaultFunctionArrayConversion(E); 407 if (Res.isInvalid()) 408 return ExprError(); 409 Res = DefaultLvalueConversion(Res.take()); 410 if (Res.isInvalid()) 411 return ExprError(); 412 return move(Res); 413 } 414 415 416 /// UsualUnaryConversions - Performs various conversions that are common to most 417 /// operators (C99 6.3). The conversions of array and function types are 418 /// sometimes suppressed. For example, the array->pointer conversion doesn't 419 /// apply if the array is an argument to the sizeof or address (&) operators. 420 /// In these instances, this routine should *not* be called. 421 ExprResult Sema::UsualUnaryConversions(Expr *E) { 422 // First, convert to an r-value. 423 ExprResult Res = DefaultFunctionArrayLvalueConversion(E); 424 if (Res.isInvalid()) 425 return Owned(E); 426 E = Res.take(); 427 428 QualType Ty = E->getType(); 429 assert(!Ty.isNull() && "UsualUnaryConversions - missing type"); 430 431 // Half FP is a bit different: it's a storage-only type, meaning that any 432 // "use" of it should be promoted to float. 433 if (Ty->isHalfType()) 434 return ImpCastExprToType(Res.take(), Context.FloatTy, CK_FloatingCast); 435 436 // Try to perform integral promotions if the object has a theoretically 437 // promotable type. 438 if (Ty->isIntegralOrUnscopedEnumerationType()) { 439 // C99 6.3.1.1p2: 440 // 441 // The following may be used in an expression wherever an int or 442 // unsigned int may be used: 443 // - an object or expression with an integer type whose integer 444 // conversion rank is less than or equal to the rank of int 445 // and unsigned int. 446 // - A bit-field of type _Bool, int, signed int, or unsigned int. 447 // 448 // If an int can represent all values of the original type, the 449 // value is converted to an int; otherwise, it is converted to an 450 // unsigned int. These are called the integer promotions. All 451 // other types are unchanged by the integer promotions. 452 453 QualType PTy = Context.isPromotableBitField(E); 454 if (!PTy.isNull()) { 455 E = ImpCastExprToType(E, PTy, CK_IntegralCast).take(); 456 return Owned(E); 457 } 458 if (Ty->isPromotableIntegerType()) { 459 QualType PT = Context.getPromotedIntegerType(Ty); 460 E = ImpCastExprToType(E, PT, CK_IntegralCast).take(); 461 return Owned(E); 462 } 463 } 464 return Owned(E); 465 } 466 467 /// DefaultArgumentPromotion (C99 6.5.2.2p6). Used for function calls that 468 /// do not have a prototype. Arguments that have type float are promoted to 469 /// double. All other argument types are converted by UsualUnaryConversions(). 470 ExprResult Sema::DefaultArgumentPromotion(Expr *E) { 471 QualType Ty = E->getType(); 472 assert(!Ty.isNull() && "DefaultArgumentPromotion - missing type"); 473 474 ExprResult Res = UsualUnaryConversions(E); 475 if (Res.isInvalid()) 476 return Owned(E); 477 E = Res.take(); 478 479 // If this is a 'float' (CVR qualified or typedef) promote to double. 480 if (Ty->isSpecificBuiltinType(BuiltinType::Float)) 481 E = ImpCastExprToType(E, Context.DoubleTy, CK_FloatingCast).take(); 482 483 // C++ performs lvalue-to-rvalue conversion as a default argument 484 // promotion, even on class types, but note: 485 // C++11 [conv.lval]p2: 486 // When an lvalue-to-rvalue conversion occurs in an unevaluated 487 // operand or a subexpression thereof the value contained in the 488 // referenced object is not accessed. Otherwise, if the glvalue 489 // has a class type, the conversion copy-initializes a temporary 490 // of type T from the glvalue and the result of the conversion 491 // is a prvalue for the temporary. 492 // FIXME: add some way to gate this entire thing for correctness in 493 // potentially potentially evaluated contexts. 494 if (getLangOptions().CPlusPlus && E->isGLValue() && 495 ExprEvalContexts.back().Context != Unevaluated) { 496 ExprResult Temp = PerformCopyInitialization( 497 InitializedEntity::InitializeTemporary(E->getType()), 498 E->getExprLoc(), 499 Owned(E)); 500 if (Temp.isInvalid()) 501 return ExprError(); 502 E = Temp.get(); 503 } 504 505 return Owned(E); 506 } 507 508 /// DefaultVariadicArgumentPromotion - Like DefaultArgumentPromotion, but 509 /// will warn if the resulting type is not a POD type, and rejects ObjC 510 /// interfaces passed by value. 511 ExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, 512 FunctionDecl *FDecl) { 513 if (const BuiltinType *PlaceholderTy = E->getType()->getAsPlaceholderType()) { 514 // Strip the unbridged-cast placeholder expression off, if applicable. 515 if (PlaceholderTy->getKind() == BuiltinType::ARCUnbridgedCast && 516 (CT == VariadicMethod || 517 (FDecl && FDecl->hasAttr<CFAuditedTransferAttr>()))) { 518 E = stripARCUnbridgedCast(E); 519 520 // Otherwise, do normal placeholder checking. 521 } else { 522 ExprResult ExprRes = CheckPlaceholderExpr(E); 523 if (ExprRes.isInvalid()) 524 return ExprError(); 525 E = ExprRes.take(); 526 } 527 } 528 529 ExprResult ExprRes = DefaultArgumentPromotion(E); 530 if (ExprRes.isInvalid()) 531 return ExprError(); 532 E = ExprRes.take(); 533 534 // Don't allow one to pass an Objective-C interface to a vararg. 535 if (E->getType()->isObjCObjectType() && 536 DiagRuntimeBehavior(E->getLocStart(), 0, 537 PDiag(diag::err_cannot_pass_objc_interface_to_vararg) 538 << E->getType() << CT)) 539 return ExprError(); 540 541 // Complain about passing non-POD types through varargs. However, don't 542 // perform this check for incomplete types, which we can get here when we're 543 // in an unevaluated context. 544 if (!E->getType()->isIncompleteType() && !E->getType().isPODType(Context)) { 545 // C++0x [expr.call]p7: 546 // Passing a potentially-evaluated argument of class type (Clause 9) 547 // having a non-trivial copy constructor, a non-trivial move constructor, 548 // or a non-trivial destructor, with no corresponding parameter, 549 // is conditionally-supported with implementation-defined semantics. 550 bool TrivialEnough = false; 551 if (getLangOptions().CPlusPlus0x && !E->getType()->isDependentType()) { 552 if (CXXRecordDecl *Record = E->getType()->getAsCXXRecordDecl()) { 553 if (Record->hasTrivialCopyConstructor() && 554 Record->hasTrivialMoveConstructor() && 555 Record->hasTrivialDestructor()) { 556 DiagRuntimeBehavior(E->getLocStart(), 0, 557 PDiag(diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg) 558 << E->getType() << CT); 559 TrivialEnough = true; 560 } 561 } 562 } 563 564 if (!TrivialEnough && 565 getLangOptions().ObjCAutoRefCount && 566 E->getType()->isObjCLifetimeType()) 567 TrivialEnough = true; 568 569 if (TrivialEnough) { 570 // Nothing to diagnose. This is okay. 571 } else if (DiagRuntimeBehavior(E->getLocStart(), 0, 572 PDiag(diag::warn_cannot_pass_non_pod_arg_to_vararg) 573 << getLangOptions().CPlusPlus0x << E->getType() 574 << CT)) { 575 // Turn this into a trap. 576 CXXScopeSpec SS; 577 UnqualifiedId Name; 578 Name.setIdentifier(PP.getIdentifierInfo("__builtin_trap"), 579 E->getLocStart()); 580 ExprResult TrapFn = ActOnIdExpression(TUScope, SS, Name, true, false); 581 if (TrapFn.isInvalid()) 582 return ExprError(); 583 584 ExprResult Call = ActOnCallExpr(TUScope, TrapFn.get(), E->getLocStart(), 585 MultiExprArg(), E->getLocEnd()); 586 if (Call.isInvalid()) 587 return ExprError(); 588 589 ExprResult Comma = ActOnBinOp(TUScope, E->getLocStart(), tok::comma, 590 Call.get(), E); 591 if (Comma.isInvalid()) 592 return ExprError(); 593 E = Comma.get(); 594 } 595 } 596 597 return Owned(E); 598 } 599 600 /// \brief Converts an integer to complex float type. Helper function of 601 /// UsualArithmeticConversions() 602 /// 603 /// \return false if the integer expression is an integer type and is 604 /// successfully converted to the complex type. 605 static bool handleIntegerToComplexFloatConversion(Sema &S, ExprResult &IntExpr, 606 ExprResult &ComplexExpr, 607 QualType IntTy, 608 QualType ComplexTy, 609 bool SkipCast) { 610 if (IntTy->isComplexType() || IntTy->isRealFloatingType()) return true; 611 if (SkipCast) return false; 612 if (IntTy->isIntegerType()) { 613 QualType fpTy = cast<ComplexType>(ComplexTy)->getElementType(); 614 IntExpr = S.ImpCastExprToType(IntExpr.take(), fpTy, CK_IntegralToFloating); 615 IntExpr = S.ImpCastExprToType(IntExpr.take(), ComplexTy, 616 CK_FloatingRealToComplex); 617 } else { 618 assert(IntTy->isComplexIntegerType()); 619 IntExpr = S.ImpCastExprToType(IntExpr.take(), ComplexTy, 620 CK_IntegralComplexToFloatingComplex); 621 } 622 return false; 623 } 624 625 /// \brief Takes two complex float types and converts them to the same type. 626 /// Helper function of UsualArithmeticConversions() 627 static QualType 628 handleComplexFloatToComplexFloatConverstion(Sema &S, ExprResult &LHS, 629 ExprResult &RHS, QualType LHSType, 630 QualType RHSType, 631 bool IsCompAssign) { 632 int order = S.Context.getFloatingTypeOrder(LHSType, RHSType); 633 634 if (order < 0) { 635 // _Complex float -> _Complex double 636 if (!IsCompAssign) 637 LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_FloatingComplexCast); 638 return RHSType; 639 } 640 if (order > 0) 641 // _Complex float -> _Complex double 642 RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_FloatingComplexCast); 643 return LHSType; 644 } 645 646 /// \brief Converts otherExpr to complex float and promotes complexExpr if 647 /// necessary. Helper function of UsualArithmeticConversions() 648 static QualType handleOtherComplexFloatConversion(Sema &S, 649 ExprResult &ComplexExpr, 650 ExprResult &OtherExpr, 651 QualType ComplexTy, 652 QualType OtherTy, 653 bool ConvertComplexExpr, 654 bool ConvertOtherExpr) { 655 int order = S.Context.getFloatingTypeOrder(ComplexTy, OtherTy); 656 657 // If just the complexExpr is complex, the otherExpr needs to be converted, 658 // and the complexExpr might need to be promoted. 659 if (order > 0) { // complexExpr is wider 660 // float -> _Complex double 661 if (ConvertOtherExpr) { 662 QualType fp = cast<ComplexType>(ComplexTy)->getElementType(); 663 OtherExpr = S.ImpCastExprToType(OtherExpr.take(), fp, CK_FloatingCast); 664 OtherExpr = S.ImpCastExprToType(OtherExpr.take(), ComplexTy, 665 CK_FloatingRealToComplex); 666 } 667 return ComplexTy; 668 } 669 670 // otherTy is at least as wide. Find its corresponding complex type. 671 QualType result = (order == 0 ? ComplexTy : 672 S.Context.getComplexType(OtherTy)); 673 674 // double -> _Complex double 675 if (ConvertOtherExpr) 676 OtherExpr = S.ImpCastExprToType(OtherExpr.take(), result, 677 CK_FloatingRealToComplex); 678 679 // _Complex float -> _Complex double 680 if (ConvertComplexExpr && order < 0) 681 ComplexExpr = S.ImpCastExprToType(ComplexExpr.take(), result, 682 CK_FloatingComplexCast); 683 684 return result; 685 } 686 687 /// \brief Handle arithmetic conversion with complex types. Helper function of 688 /// UsualArithmeticConversions() 689 static QualType handleComplexFloatConversion(Sema &S, ExprResult &LHS, 690 ExprResult &RHS, QualType LHSType, 691 QualType RHSType, 692 bool IsCompAssign) { 693 // if we have an integer operand, the result is the complex type. 694 if (!handleIntegerToComplexFloatConversion(S, RHS, LHS, RHSType, LHSType, 695 /*skipCast*/false)) 696 return LHSType; 697 if (!handleIntegerToComplexFloatConversion(S, LHS, RHS, LHSType, RHSType, 698 /*skipCast*/IsCompAssign)) 699 return RHSType; 700 701 // This handles complex/complex, complex/float, or float/complex. 702 // When both operands are complex, the shorter operand is converted to the 703 // type of the longer, and that is the type of the result. This corresponds 704 // to what is done when combining two real floating-point operands. 705 // The fun begins when size promotion occur across type domains. 706 // From H&S 6.3.4: When one operand is complex and the other is a real 707 // floating-point type, the less precise type is converted, within it's 708 // real or complex domain, to the precision of the other type. For example, 709 // when combining a "long double" with a "double _Complex", the 710 // "double _Complex" is promoted to "long double _Complex". 711 712 bool LHSComplexFloat = LHSType->isComplexType(); 713 bool RHSComplexFloat = RHSType->isComplexType(); 714 715 // If both are complex, just cast to the more precise type. 716 if (LHSComplexFloat && RHSComplexFloat) 717 return handleComplexFloatToComplexFloatConverstion(S, LHS, RHS, 718 LHSType, RHSType, 719 IsCompAssign); 720 721 // If only one operand is complex, promote it if necessary and convert the 722 // other operand to complex. 723 if (LHSComplexFloat) 724 return handleOtherComplexFloatConversion( 725 S, LHS, RHS, LHSType, RHSType, /*convertComplexExpr*/!IsCompAssign, 726 /*convertOtherExpr*/ true); 727 728 assert(RHSComplexFloat); 729 return handleOtherComplexFloatConversion( 730 S, RHS, LHS, RHSType, LHSType, /*convertComplexExpr*/true, 731 /*convertOtherExpr*/ !IsCompAssign); 732 } 733 734 /// \brief Hande arithmetic conversion from integer to float. Helper function 735 /// of UsualArithmeticConversions() 736 static QualType handleIntToFloatConversion(Sema &S, ExprResult &FloatExpr, 737 ExprResult &IntExpr, 738 QualType FloatTy, QualType IntTy, 739 bool ConvertFloat, bool ConvertInt) { 740 if (IntTy->isIntegerType()) { 741 if (ConvertInt) 742 // Convert intExpr to the lhs floating point type. 743 IntExpr = S.ImpCastExprToType(IntExpr.take(), FloatTy, 744 CK_IntegralToFloating); 745 return FloatTy; 746 } 747 748 // Convert both sides to the appropriate complex float. 749 assert(IntTy->isComplexIntegerType()); 750 QualType result = S.Context.getComplexType(FloatTy); 751 752 // _Complex int -> _Complex float 753 if (ConvertInt) 754 IntExpr = S.ImpCastExprToType(IntExpr.take(), result, 755 CK_IntegralComplexToFloatingComplex); 756 757 // float -> _Complex float 758 if (ConvertFloat) 759 FloatExpr = S.ImpCastExprToType(FloatExpr.take(), result, 760 CK_FloatingRealToComplex); 761 762 return result; 763 } 764 765 /// \brief Handle arithmethic conversion with floating point types. Helper 766 /// function of UsualArithmeticConversions() 767 static QualType handleFloatConversion(Sema &S, ExprResult &LHS, 768 ExprResult &RHS, QualType LHSType, 769 QualType RHSType, bool IsCompAssign) { 770 bool LHSFloat = LHSType->isRealFloatingType(); 771 bool RHSFloat = RHSType->isRealFloatingType(); 772 773 // If we have two real floating types, convert the smaller operand 774 // to the bigger result. 775 if (LHSFloat && RHSFloat) { 776 int order = S.Context.getFloatingTypeOrder(LHSType, RHSType); 777 if (order > 0) { 778 RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_FloatingCast); 779 return LHSType; 780 } 781 782 assert(order < 0 && "illegal float comparison"); 783 if (!IsCompAssign) 784 LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_FloatingCast); 785 return RHSType; 786 } 787 788 if (LHSFloat) 789 return handleIntToFloatConversion(S, LHS, RHS, LHSType, RHSType, 790 /*convertFloat=*/!IsCompAssign, 791 /*convertInt=*/ true); 792 assert(RHSFloat); 793 return handleIntToFloatConversion(S, RHS, LHS, RHSType, LHSType, 794 /*convertInt=*/ true, 795 /*convertFloat=*/!IsCompAssign); 796 } 797 798 /// \brief Handle conversions with GCC complex int extension. Helper function 799 /// of UsualArithmeticConversions() 800 // FIXME: if the operands are (int, _Complex long), we currently 801 // don't promote the complex. Also, signedness? 802 static QualType handleComplexIntConversion(Sema &S, ExprResult &LHS, 803 ExprResult &RHS, QualType LHSType, 804 QualType RHSType, 805 bool IsCompAssign) { 806 const ComplexType *LHSComplexInt = LHSType->getAsComplexIntegerType(); 807 const ComplexType *RHSComplexInt = RHSType->getAsComplexIntegerType(); 808 809 if (LHSComplexInt && RHSComplexInt) { 810 int order = S.Context.getIntegerTypeOrder(LHSComplexInt->getElementType(), 811 RHSComplexInt->getElementType()); 812 assert(order && "inequal types with equal element ordering"); 813 if (order > 0) { 814 // _Complex int -> _Complex long 815 RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_IntegralComplexCast); 816 return LHSType; 817 } 818 819 if (!IsCompAssign) 820 LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_IntegralComplexCast); 821 return RHSType; 822 } 823 824 if (LHSComplexInt) { 825 // int -> _Complex int 826 RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_IntegralRealToComplex); 827 return LHSType; 828 } 829 830 assert(RHSComplexInt); 831 // int -> _Complex int 832 if (!IsCompAssign) 833 LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_IntegralRealToComplex); 834 return RHSType; 835 } 836 837 /// \brief Handle integer arithmetic conversions. Helper function of 838 /// UsualArithmeticConversions() 839 static QualType handleIntegerConversion(Sema &S, ExprResult &LHS, 840 ExprResult &RHS, QualType LHSType, 841 QualType RHSType, bool IsCompAssign) { 842 // The rules for this case are in C99 6.3.1.8 843 int order = S.Context.getIntegerTypeOrder(LHSType, RHSType); 844 bool LHSSigned = LHSType->hasSignedIntegerRepresentation(); 845 bool RHSSigned = RHSType->hasSignedIntegerRepresentation(); 846 if (LHSSigned == RHSSigned) { 847 // Same signedness; use the higher-ranked type 848 if (order >= 0) { 849 RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_IntegralCast); 850 return LHSType; 851 } else if (!IsCompAssign) 852 LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_IntegralCast); 853 return RHSType; 854 } else if (order != (LHSSigned ? 1 : -1)) { 855 // The unsigned type has greater than or equal rank to the 856 // signed type, so use the unsigned type 857 if (RHSSigned) { 858 RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_IntegralCast); 859 return LHSType; 860 } else if (!IsCompAssign) 861 LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_IntegralCast); 862 return RHSType; 863 } else if (S.Context.getIntWidth(LHSType) != S.Context.getIntWidth(RHSType)) { 864 // The two types are different widths; if we are here, that 865 // means the signed type is larger than the unsigned type, so 866 // use the signed type. 867 if (LHSSigned) { 868 RHS = S.ImpCastExprToType(RHS.take(), LHSType, CK_IntegralCast); 869 return LHSType; 870 } else if (!IsCompAssign) 871 LHS = S.ImpCastExprToType(LHS.take(), RHSType, CK_IntegralCast); 872 return RHSType; 873 } else { 874 // The signed type is higher-ranked than the unsigned type, 875 // but isn't actually any bigger (like unsigned int and long 876 // on most 32-bit systems). Use the unsigned type corresponding 877 // to the signed type. 878 QualType result = 879 S.Context.getCorrespondingUnsignedType(LHSSigned ? LHSType : RHSType); 880 RHS = S.ImpCastExprToType(RHS.take(), result, CK_IntegralCast); 881 if (!IsCompAssign) 882 LHS = S.ImpCastExprToType(LHS.take(), result, CK_IntegralCast); 883 return result; 884 } 885 } 886 887 /// UsualArithmeticConversions - Performs various conversions that are common to 888 /// binary operators (C99 6.3.1.8). If both operands aren't arithmetic, this 889 /// routine returns the first non-arithmetic type found. The client is 890 /// responsible for emitting appropriate error diagnostics. 891 /// FIXME: verify the conversion rules for "complex int" are consistent with 892 /// GCC. 893 QualType Sema::UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS, 894 bool IsCompAssign) { 895 if (!IsCompAssign) { 896 LHS = UsualUnaryConversions(LHS.take()); 897 if (LHS.isInvalid()) 898 return QualType(); 899 } 900 901 RHS = UsualUnaryConversions(RHS.take()); 902 if (RHS.isInvalid()) 903 return QualType(); 904 905 // For conversion purposes, we ignore any qualifiers. 906 // For example, "const float" and "float" are equivalent. 907 QualType LHSType = 908 Context.getCanonicalType(LHS.get()->getType()).getUnqualifiedType(); 909 QualType RHSType = 910 Context.getCanonicalType(RHS.get()->getType()).getUnqualifiedType(); 911 912 // If both types are identical, no conversion is needed. 913 if (LHSType == RHSType) 914 return LHSType; 915 916 // If either side is a non-arithmetic type (e.g. a pointer), we are done. 917 // The caller can deal with this (e.g. pointer + int). 918 if (!LHSType->isArithmeticType() || !RHSType->isArithmeticType()) 919 return LHSType; 920 921 // Apply unary and bitfield promotions to the LHS's type. 922 QualType LHSUnpromotedType = LHSType; 923 if (LHSType->isPromotableIntegerType()) 924 LHSType = Context.getPromotedIntegerType(LHSType); 925 QualType LHSBitfieldPromoteTy = Context.isPromotableBitField(LHS.get()); 926 if (!LHSBitfieldPromoteTy.isNull()) 927 LHSType = LHSBitfieldPromoteTy; 928 if (LHSType != LHSUnpromotedType && !IsCompAssign) 929 LHS = ImpCastExprToType(LHS.take(), LHSType, CK_IntegralCast); 930 931 // If both types are identical, no conversion is needed. 932 if (LHSType == RHSType) 933 return LHSType; 934 935 // At this point, we have two different arithmetic types. 936 937 // Handle complex types first (C99 6.3.1.8p1). 938 if (LHSType->isComplexType() || RHSType->isComplexType()) 939 return handleComplexFloatConversion(*this, LHS, RHS, LHSType, RHSType, 940 IsCompAssign); 941 942 // Now handle "real" floating types (i.e. float, double, long double). 943 if (LHSType->isRealFloatingType() || RHSType->isRealFloatingType()) 944 return handleFloatConversion(*this, LHS, RHS, LHSType, RHSType, 945 IsCompAssign); 946 947 // Handle GCC complex int extension. 948 if (LHSType->isComplexIntegerType() || RHSType->isComplexIntegerType()) 949 return handleComplexIntConversion(*this, LHS, RHS, LHSType, RHSType, 950 IsCompAssign); 951 952 // Finally, we have two differing integer types. 953 return handleIntegerConversion(*this, LHS, RHS, LHSType, RHSType, 954 IsCompAssign); 955 } 956 957 //===----------------------------------------------------------------------===// 958 // Semantic Analysis for various Expression Types 959 //===----------------------------------------------------------------------===// 960 961 962 ExprResult 963 Sema::ActOnGenericSelectionExpr(SourceLocation KeyLoc, 964 SourceLocation DefaultLoc, 965 SourceLocation RParenLoc, 966 Expr *ControllingExpr, 967 MultiTypeArg ArgTypes, 968 MultiExprArg ArgExprs) { 969 unsigned NumAssocs = ArgTypes.size(); 970 assert(NumAssocs == ArgExprs.size()); 971 972 ParsedType *ParsedTypes = ArgTypes.release(); 973 Expr **Exprs = ArgExprs.release(); 974 975 TypeSourceInfo **Types = new TypeSourceInfo*[NumAssocs]; 976 for (unsigned i = 0; i < NumAssocs; ++i) { 977 if (ParsedTypes[i]) 978 (void) GetTypeFromParser(ParsedTypes[i], &Types[i]); 979 else 980 Types[i] = 0; 981 } 982 983 ExprResult ER = CreateGenericSelectionExpr(KeyLoc, DefaultLoc, RParenLoc, 984 ControllingExpr, Types, Exprs, 985 NumAssocs); 986 delete [] Types; 987 return ER; 988 } 989 990 ExprResult 991 Sema::CreateGenericSelectionExpr(SourceLocation KeyLoc, 992 SourceLocation DefaultLoc, 993 SourceLocation RParenLoc, 994 Expr *ControllingExpr, 995 TypeSourceInfo **Types, 996 Expr **Exprs, 997 unsigned NumAssocs) { 998 bool TypeErrorFound = false, 999 IsResultDependent = ControllingExpr->isTypeDependent(), 1000 ContainsUnexpandedParameterPack 1001 = ControllingExpr->containsUnexpandedParameterPack(); 1002 1003 for (unsigned i = 0; i < NumAssocs; ++i) { 1004 if (Exprs[i]->containsUnexpandedParameterPack()) 1005 ContainsUnexpandedParameterPack = true; 1006 1007 if (Types[i]) { 1008 if (Types[i]->getType()->containsUnexpandedParameterPack()) 1009 ContainsUnexpandedParameterPack = true; 1010 1011 if (Types[i]->getType()->isDependentType()) { 1012 IsResultDependent = true; 1013 } else { 1014 // C1X 6.5.1.1p2 "The type name in a generic association shall specify a 1015 // complete object type other than a variably modified type." 1016 unsigned D = 0; 1017 if (Types[i]->getType()->isIncompleteType()) 1018 D = diag::err_assoc_type_incomplete; 1019 else if (!Types[i]->getType()->isObjectType()) 1020 D = diag::err_assoc_type_nonobject; 1021 else if (Types[i]->getType()->isVariablyModifiedType()) 1022 D = diag::err_assoc_type_variably_modified; 1023 1024 if (D != 0) { 1025 Diag(Types[i]->getTypeLoc().getBeginLoc(), D) 1026 << Types[i]->getTypeLoc().getSourceRange() 1027 << Types[i]->getType(); 1028 TypeErrorFound = true; 1029 } 1030 1031 // C1X 6.5.1.1p2 "No two generic associations in the same generic 1032 // selection shall specify compatible types." 1033 for (unsigned j = i+1; j < NumAssocs; ++j) 1034 if (Types[j] && !Types[j]->getType()->isDependentType() && 1035 Context.typesAreCompatible(Types[i]->getType(), 1036 Types[j]->getType())) { 1037 Diag(Types[j]->getTypeLoc().getBeginLoc(), 1038 diag::err_assoc_compatible_types) 1039 << Types[j]->getTypeLoc().getSourceRange() 1040 << Types[j]->getType() 1041 << Types[i]->getType(); 1042 Diag(Types[i]->getTypeLoc().getBeginLoc(), 1043 diag::note_compat_assoc) 1044 << Types[i]->getTypeLoc().getSourceRange() 1045 << Types[i]->getType(); 1046 TypeErrorFound = true; 1047 } 1048 } 1049 } 1050 } 1051 if (TypeErrorFound) 1052 return ExprError(); 1053 1054 // If we determined that the generic selection is result-dependent, don't 1055 // try to compute the result expression. 1056 if (IsResultDependent) 1057 return Owned(new (Context) GenericSelectionExpr( 1058 Context, KeyLoc, ControllingExpr, 1059 Types, Exprs, NumAssocs, DefaultLoc, 1060 RParenLoc, ContainsUnexpandedParameterPack)); 1061 1062 SmallVector<unsigned, 1> CompatIndices; 1063 unsigned DefaultIndex = -1U; 1064 for (unsigned i = 0; i < NumAssocs; ++i) { 1065 if (!Types[i]) 1066 DefaultIndex = i; 1067 else if (Context.typesAreCompatible(ControllingExpr->getType(), 1068 Types[i]->getType())) 1069 CompatIndices.push_back(i); 1070 } 1071 1072 // C1X 6.5.1.1p2 "The controlling expression of a generic selection shall have 1073 // type compatible with at most one of the types named in its generic 1074 // association list." 1075 if (CompatIndices.size() > 1) { 1076 // We strip parens here because the controlling expression is typically 1077 // parenthesized in macro definitions. 1078 ControllingExpr = ControllingExpr->IgnoreParens(); 1079 Diag(ControllingExpr->getLocStart(), diag::err_generic_sel_multi_match) 1080 << ControllingExpr->getSourceRange() << ControllingExpr->getType() 1081 << (unsigned) CompatIndices.size(); 1082 for (SmallVector<unsigned, 1>::iterator I = CompatIndices.begin(), 1083 E = CompatIndices.end(); I != E; ++I) { 1084 Diag(Types[*I]->getTypeLoc().getBeginLoc(), 1085 diag::note_compat_assoc) 1086 << Types[*I]->getTypeLoc().getSourceRange() 1087 << Types[*I]->getType(); 1088 } 1089 return ExprError(); 1090 } 1091 1092 // C1X 6.5.1.1p2 "If a generic selection has no default generic association, 1093 // its controlling expression shall have type compatible with exactly one of 1094 // the types named in its generic association list." 1095 if (DefaultIndex == -1U && CompatIndices.size() == 0) { 1096 // We strip parens here because the controlling expression is typically 1097 // parenthesized in macro definitions. 1098 ControllingExpr = ControllingExpr->IgnoreParens(); 1099 Diag(ControllingExpr->getLocStart(), diag::err_generic_sel_no_match) 1100 << ControllingExpr->getSourceRange() << ControllingExpr->getType(); 1101 return ExprError(); 1102 } 1103 1104 // C1X 6.5.1.1p3 "If a generic selection has a generic association with a 1105 // type name that is compatible with the type of the controlling expression, 1106 // then the result expression of the generic selection is the expression 1107 // in that generic association. Otherwise, the result expression of the 1108 // generic selection is the expression in the default generic association." 1109 unsigned ResultIndex = 1110 CompatIndices.size() ? CompatIndices[0] : DefaultIndex; 1111 1112 return Owned(new (Context) GenericSelectionExpr( 1113 Context, KeyLoc, ControllingExpr, 1114 Types, Exprs, NumAssocs, DefaultLoc, 1115 RParenLoc, ContainsUnexpandedParameterPack, 1116 ResultIndex)); 1117 } 1118 1119 /// ActOnStringLiteral - The specified tokens were lexed as pasted string 1120 /// fragments (e.g. "foo" "bar" L"baz"). The result string has to handle string 1121 /// concatenation ([C99 5.1.1.2, translation phase #6]), so it may come from 1122 /// multiple tokens. However, the common case is that StringToks points to one 1123 /// string. 1124 /// 1125 ExprResult 1126 Sema::ActOnStringLiteral(const Token *StringToks, unsigned NumStringToks) { 1127 assert(NumStringToks && "Must have at least one string!"); 1128 1129 StringLiteralParser Literal(StringToks, NumStringToks, PP); 1130 if (Literal.hadError) 1131 return ExprError(); 1132 1133 SmallVector<SourceLocation, 4> StringTokLocs; 1134 for (unsigned i = 0; i != NumStringToks; ++i) 1135 StringTokLocs.push_back(StringToks[i].getLocation()); 1136 1137 QualType StrTy = Context.CharTy; 1138 if (Literal.isWide()) 1139 StrTy = Context.getWCharType(); 1140 else if (Literal.isUTF16()) 1141 StrTy = Context.Char16Ty; 1142 else if (Literal.isUTF32()) 1143 StrTy = Context.Char32Ty; 1144 else if (Literal.isPascal()) 1145 StrTy = Context.UnsignedCharTy; 1146 1147 StringLiteral::StringKind Kind = StringLiteral::Ascii; 1148 if (Literal.isWide()) 1149 Kind = StringLiteral::Wide; 1150 else if (Literal.isUTF8()) 1151 Kind = StringLiteral::UTF8; 1152 else if (Literal.isUTF16()) 1153 Kind = StringLiteral::UTF16; 1154 else if (Literal.isUTF32()) 1155 Kind = StringLiteral::UTF32; 1156 1157 // A C++ string literal has a const-qualified element type (C++ 2.13.4p1). 1158 if (getLangOptions().CPlusPlus || getLangOptions().ConstStrings) 1159 StrTy.addConst(); 1160 1161 // Get an array type for the string, according to C99 6.4.5. This includes 1162 // the nul terminator character as well as the string length for pascal 1163 // strings. 1164 StrTy = Context.getConstantArrayType(StrTy, 1165 llvm::APInt(32, Literal.GetNumStringChars()+1), 1166 ArrayType::Normal, 0); 1167 1168 // Pass &StringTokLocs[0], StringTokLocs.size() to factory! 1169 return Owned(StringLiteral::Create(Context, Literal.GetString(), 1170 Kind, Literal.Pascal, StrTy, 1171 &StringTokLocs[0], 1172 StringTokLocs.size())); 1173 } 1174 1175 enum CaptureResult { 1176 /// No capture is required. 1177 CR_NoCapture, 1178 1179 /// A capture is required. 1180 CR_Capture, 1181 1182 /// A by-ref capture is required. 1183 CR_CaptureByRef, 1184 1185 /// An error occurred when trying to capture the given variable. 1186 CR_Error 1187 }; 1188 1189 /// Diagnose an uncapturable value reference. 1190 /// 1191 /// \param var - the variable referenced 1192 /// \param DC - the context which we couldn't capture through 1193 static CaptureResult 1194 diagnoseUncapturableValueReference(Sema &S, SourceLocation loc, 1195 VarDecl *var, DeclContext *DC) { 1196 switch (S.ExprEvalContexts.back().Context) { 1197 case Sema::Unevaluated: 1198 // The argument will never be evaluated, so don't complain. 1199 return CR_NoCapture; 1200 1201 case Sema::PotentiallyEvaluated: 1202 case Sema::PotentiallyEvaluatedIfUsed: 1203 break; 1204 1205 case Sema::PotentiallyPotentiallyEvaluated: 1206 // FIXME: delay these! 1207 break; 1208 } 1209 1210 // Don't diagnose about capture if we're not actually in code right 1211 // now; in general, there are more appropriate places that will 1212 // diagnose this. 1213 if (!S.CurContext->isFunctionOrMethod()) return CR_NoCapture; 1214 1215 // Certain madnesses can happen with parameter declarations, which 1216 // we want to ignore. 1217 if (isa<ParmVarDecl>(var)) { 1218 // - If the parameter still belongs to the translation unit, then 1219 // we're actually just using one parameter in the declaration of 1220 // the next. This is useful in e.g. VLAs. 1221 if (isa<TranslationUnitDecl>(var->getDeclContext())) 1222 return CR_NoCapture; 1223 1224 // - This particular madness can happen in ill-formed default 1225 // arguments; claim it's okay and let downstream code handle it. 1226 if (S.CurContext == var->getDeclContext()->getParent()) 1227 return CR_NoCapture; 1228 } 1229 1230 DeclarationName functionName; 1231 if (FunctionDecl *fn = dyn_cast<FunctionDecl>(var->getDeclContext())) 1232 functionName = fn->getDeclName(); 1233 // FIXME: variable from enclosing block that we couldn't capture from! 1234 1235 S.Diag(loc, diag::err_reference_to_local_var_in_enclosing_function) 1236 << var->getIdentifier() << functionName; 1237 S.Diag(var->getLocation(), diag::note_local_variable_declared_here) 1238 << var->getIdentifier(); 1239 1240 return CR_Error; 1241 } 1242 1243 /// There is a well-formed capture at a particular scope level; 1244 /// propagate it through all the nested blocks. 1245 static CaptureResult propagateCapture(Sema &S, unsigned ValidScopeIndex, 1246 const BlockDecl::Capture &Capture) { 1247 VarDecl *var = Capture.getVariable(); 1248 1249 // Update all the inner blocks with the capture information. 1250 for (unsigned i = ValidScopeIndex + 1, e = S.FunctionScopes.size(); 1251 i != e; ++i) { 1252 BlockScopeInfo *innerBlock = cast<BlockScopeInfo>(S.FunctionScopes[i]); 1253 innerBlock->Captures.push_back( 1254 BlockDecl::Capture(Capture.getVariable(), Capture.isByRef(), 1255 /*nested*/ true, Capture.getCopyExpr())); 1256 innerBlock->CaptureMap[var] = innerBlock->Captures.size(); // +1 1257 } 1258 1259 return Capture.isByRef() ? CR_CaptureByRef : CR_Capture; 1260 } 1261 1262 /// shouldCaptureValueReference - Determine if a reference to the 1263 /// given value in the current context requires a variable capture. 1264 /// 1265 /// This also keeps the captures set in the BlockScopeInfo records 1266 /// up-to-date. 1267 static CaptureResult shouldCaptureValueReference(Sema &S, SourceLocation loc, 1268 ValueDecl *Value) { 1269 // Only variables ever require capture. 1270 VarDecl *var = dyn_cast<VarDecl>(Value); 1271 if (!var) return CR_NoCapture; 1272 1273 // Fast path: variables from the current context never require capture. 1274 DeclContext *DC = S.CurContext; 1275 if (var->getDeclContext() == DC) return CR_NoCapture; 1276 1277 // Only variables with local storage require capture. 1278 // FIXME: What about 'const' variables in C++? 1279 if (!var->hasLocalStorage()) return CR_NoCapture; 1280 1281 // Otherwise, we need to capture. 1282 1283 unsigned functionScopesIndex = S.FunctionScopes.size() - 1; 1284 do { 1285 // Only blocks (and eventually C++0x closures) can capture; other 1286 // scopes don't work. 1287 if (!isa<BlockDecl>(DC)) 1288 return diagnoseUncapturableValueReference(S, loc, var, DC); 1289 1290 BlockScopeInfo *blockScope = 1291 cast<BlockScopeInfo>(S.FunctionScopes[functionScopesIndex]); 1292 assert(blockScope->TheDecl == static_cast<BlockDecl*>(DC)); 1293 1294 // Check whether we've already captured it in this block. If so, 1295 // we're done. 1296 if (unsigned indexPlus1 = blockScope->CaptureMap[var]) 1297 return propagateCapture(S, functionScopesIndex, 1298 blockScope->Captures[indexPlus1 - 1]); 1299 1300 functionScopesIndex--; 1301 DC = cast<BlockDecl>(DC)->getDeclContext(); 1302 } while (var->getDeclContext() != DC); 1303 1304 // Okay, we descended all the way to the block that defines the variable. 1305 // Actually try to capture it. 1306 QualType type = var->getType(); 1307 1308 // Prohibit variably-modified types. 1309 if (type->isVariablyModifiedType()) { 1310 S.Diag(loc, diag::err_ref_vm_type); 1311 S.Diag(var->getLocation(), diag::note_declared_at); 1312 return CR_Error; 1313 } 1314 1315 // Prohibit arrays, even in __block variables, but not references to 1316 // them. 1317 if (type->isArrayType()) { 1318 S.Diag(loc, diag::err_ref_array_type); 1319 S.Diag(var->getLocation(), diag::note_declared_at); 1320 return CR_Error; 1321 } 1322 1323 S.MarkDeclarationReferenced(loc, var); 1324 1325 // The BlocksAttr indicates the variable is bound by-reference. 1326 bool byRef = var->hasAttr<BlocksAttr>(); 1327 1328 // Build a copy expression. 1329 Expr *copyExpr = 0; 1330 const RecordType *rtype; 1331 if (!byRef && S.getLangOptions().CPlusPlus && !type->isDependentType() && 1332 (rtype = type->getAs<RecordType>())) { 1333 1334 // The capture logic needs the destructor, so make sure we mark it. 1335 // Usually this is unnecessary because most local variables have 1336 // their destructors marked at declaration time, but parameters are 1337 // an exception because it's technically only the call site that 1338 // actually requires the destructor. 1339 if (isa<ParmVarDecl>(var)) 1340 S.FinalizeVarWithDestructor(var, rtype); 1341 1342 // According to the blocks spec, the capture of a variable from 1343 // the stack requires a const copy constructor. This is not true 1344 // of the copy/move done to move a __block variable to the heap. 1345 type.addConst(); 1346 1347 Expr *declRef = new (S.Context) DeclRefExpr(var, type, VK_LValue, loc); 1348 ExprResult result = 1349 S.PerformCopyInitialization( 1350 InitializedEntity::InitializeBlock(var->getLocation(), 1351 type, false), 1352 loc, S.Owned(declRef)); 1353 1354 // Build a full-expression copy expression if initialization 1355 // succeeded and used a non-trivial constructor. Recover from 1356 // errors by pretending that the copy isn't necessary. 1357 if (!result.isInvalid() && 1358 !cast<CXXConstructExpr>(result.get())->getConstructor()->isTrivial()) { 1359 result = S.MaybeCreateExprWithCleanups(result); 1360 copyExpr = result.take(); 1361 } 1362 } 1363 1364 // We're currently at the declarer; go back to the closure. 1365 functionScopesIndex++; 1366 BlockScopeInfo *blockScope = 1367 cast<BlockScopeInfo>(S.FunctionScopes[functionScopesIndex]); 1368 1369 // Build a valid capture in this scope. 1370 blockScope->Captures.push_back( 1371 BlockDecl::Capture(var, byRef, /*nested*/ false, copyExpr)); 1372 blockScope->CaptureMap[var] = blockScope->Captures.size(); // +1 1373 1374 // Propagate that to inner captures if necessary. 1375 return propagateCapture(S, functionScopesIndex, 1376 blockScope->Captures.back()); 1377 } 1378 1379 static ExprResult BuildBlockDeclRefExpr(Sema &S, ValueDecl *VD, 1380 const DeclarationNameInfo &NameInfo, 1381 bool ByRef) { 1382 assert(isa<VarDecl>(VD) && "capturing non-variable"); 1383 1384 VarDecl *var = cast<VarDecl>(VD); 1385 assert(var->hasLocalStorage() && "capturing non-local"); 1386 assert(ByRef == var->hasAttr<BlocksAttr>() && "byref set wrong"); 1387 1388 QualType exprType = var->getType().getNonReferenceType(); 1389 1390 BlockDeclRefExpr *BDRE; 1391 if (!ByRef) { 1392 // The variable will be bound by copy; make it const within the 1393 // closure, but record that this was done in the expression. 1394 bool constAdded = !exprType.isConstQualified(); 1395 exprType.addConst(); 1396 1397 BDRE = new (S.Context) BlockDeclRefExpr(var, exprType, VK_LValue, 1398 NameInfo.getLoc(), false, 1399 constAdded); 1400 } else { 1401 BDRE = new (S.Context) BlockDeclRefExpr(var, exprType, VK_LValue, 1402 NameInfo.getLoc(), true); 1403 } 1404 1405 return S.Owned(BDRE); 1406 } 1407 1408 ExprResult 1409 Sema::BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, 1410 SourceLocation Loc, 1411 const CXXScopeSpec *SS) { 1412 DeclarationNameInfo NameInfo(D->getDeclName(), Loc); 1413 return BuildDeclRefExpr(D, Ty, VK, NameInfo, SS); 1414 } 1415 1416 /// BuildDeclRefExpr - Build an expression that references a 1417 /// declaration that does not require a closure capture. 1418 ExprResult 1419 Sema::BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, 1420 const DeclarationNameInfo &NameInfo, 1421 const CXXScopeSpec *SS) { 1422 if (getLangOptions().CUDA) 1423 if (const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext)) 1424 if (const FunctionDecl *Callee = dyn_cast<FunctionDecl>(D)) { 1425 CUDAFunctionTarget CallerTarget = IdentifyCUDATarget(Caller), 1426 CalleeTarget = IdentifyCUDATarget(Callee); 1427 if (CheckCUDATarget(CallerTarget, CalleeTarget)) { 1428 Diag(NameInfo.getLoc(), diag::err_ref_bad_target) 1429 << CalleeTarget << D->getIdentifier() << CallerTarget; 1430 Diag(D->getLocation(), diag::note_previous_decl) 1431 << D->getIdentifier(); 1432 return ExprError(); 1433 } 1434 } 1435 1436 MarkDeclarationReferenced(NameInfo.getLoc(), D); 1437 1438 Expr *E = DeclRefExpr::Create(Context, 1439 SS? SS->getWithLocInContext(Context) 1440 : NestedNameSpecifierLoc(), 1441 D, NameInfo, Ty, VK); 1442 1443 // Just in case we're building an illegal pointer-to-member. 1444 FieldDecl *FD = dyn_cast<FieldDecl>(D); 1445 if (FD && FD->isBitField()) 1446 E->setObjectKind(OK_BitField); 1447 1448 return Owned(E); 1449 } 1450 1451 /// Decomposes the given name into a DeclarationNameInfo, its location, and 1452 /// possibly a list of template arguments. 1453 /// 1454 /// If this produces template arguments, it is permitted to call 1455 /// DecomposeTemplateName. 1456 /// 1457 /// This actually loses a lot of source location information for 1458 /// non-standard name kinds; we should consider preserving that in 1459 /// some way. 1460 void 1461 Sema::DecomposeUnqualifiedId(const UnqualifiedId &Id, 1462 TemplateArgumentListInfo &Buffer, 1463 DeclarationNameInfo &NameInfo, 1464 const TemplateArgumentListInfo *&TemplateArgs) { 1465 if (Id.getKind() == UnqualifiedId::IK_TemplateId) { 1466 Buffer.setLAngleLoc(Id.TemplateId->LAngleLoc); 1467 Buffer.setRAngleLoc(Id.TemplateId->RAngleLoc); 1468 1469 ASTTemplateArgsPtr TemplateArgsPtr(*this, 1470 Id.TemplateId->getTemplateArgs(), 1471 Id.TemplateId->NumArgs); 1472 translateTemplateArguments(TemplateArgsPtr, Buffer); 1473 TemplateArgsPtr.release(); 1474 1475 TemplateName TName = Id.TemplateId->Template.get(); 1476 SourceLocation TNameLoc = Id.TemplateId->TemplateNameLoc; 1477 NameInfo = Context.getNameForTemplate(TName, TNameLoc); 1478 TemplateArgs = &Buffer; 1479 } else { 1480 NameInfo = GetNameFromUnqualifiedId(Id); 1481 TemplateArgs = 0; 1482 } 1483 } 1484 1485 /// Diagnose an empty lookup. 1486 /// 1487 /// \return false if new lookup candidates were found 1488 bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, 1489 CorrectTypoContext CTC, 1490 TemplateArgumentListInfo *ExplicitTemplateArgs, 1491 Expr **Args, unsigned NumArgs) { 1492 DeclarationName Name = R.getLookupName(); 1493 1494 unsigned diagnostic = diag::err_undeclared_var_use; 1495 unsigned diagnostic_suggest = diag::err_undeclared_var_use_suggest; 1496 if (Name.getNameKind() == DeclarationName::CXXOperatorName || 1497 Name.getNameKind() == DeclarationName::CXXLiteralOperatorName || 1498 Name.getNameKind() == DeclarationName::CXXConversionFunctionName) { 1499 diagnostic = diag::err_undeclared_use; 1500 diagnostic_suggest = diag::err_undeclared_use_suggest; 1501 } 1502 1503 // If the original lookup was an unqualified lookup, fake an 1504 // unqualified lookup. This is useful when (for example) the 1505 // original lookup would not have found something because it was a 1506 // dependent name. 1507 for (DeclContext *DC = SS.isEmpty() ? CurContext : 0; 1508 DC; DC = DC->getParent()) { 1509 if (isa<CXXRecordDecl>(DC)) { 1510 LookupQualifiedName(R, DC); 1511 1512 if (!R.empty()) { 1513 // Don't give errors about ambiguities in this lookup. 1514 R.suppressDiagnostics(); 1515 1516 CXXMethodDecl *CurMethod = dyn_cast<CXXMethodDecl>(CurContext); 1517 bool isInstance = CurMethod && 1518 CurMethod->isInstance() && 1519 DC == CurMethod->getParent(); 1520 1521 // Give a code modification hint to insert 'this->'. 1522 // TODO: fixit for inserting 'Base<T>::' in the other cases. 1523 // Actually quite difficult! 1524 if (isInstance) { 1525 UnresolvedLookupExpr *ULE = cast<UnresolvedLookupExpr>( 1526 CallsUndergoingInstantiation.back()->getCallee()); 1527 CXXMethodDecl *DepMethod = cast_or_null<CXXMethodDecl>( 1528 CurMethod->getInstantiatedFromMemberFunction()); 1529 if (DepMethod) { 1530 if (getLangOptions().MicrosoftExt) 1531 diagnostic = diag::warn_found_via_dependent_bases_lookup; 1532 Diag(R.getNameLoc(), diagnostic) << Name 1533 << FixItHint::CreateInsertion(R.getNameLoc(), "this->"); 1534 QualType DepThisType = DepMethod->getThisType(Context); 1535 CXXThisExpr *DepThis = new (Context) CXXThisExpr( 1536 R.getNameLoc(), DepThisType, false); 1537 TemplateArgumentListInfo TList; 1538 if (ULE->hasExplicitTemplateArgs()) 1539 ULE->copyTemplateArgumentsInto(TList); 1540 1541 CXXScopeSpec SS; 1542 SS.Adopt(ULE->getQualifierLoc()); 1543 CXXDependentScopeMemberExpr *DepExpr = 1544 CXXDependentScopeMemberExpr::Create( 1545 Context, DepThis, DepThisType, true, SourceLocation(), 1546 SS.getWithLocInContext(Context), NULL, 1547 R.getLookupNameInfo(), 1548 ULE->hasExplicitTemplateArgs() ? &TList : 0); 1549 CallsUndergoingInstantiation.back()->setCallee(DepExpr); 1550 } else { 1551 // FIXME: we should be able to handle this case too. It is correct 1552 // to add this-> here. This is a workaround for PR7947. 1553 Diag(R.getNameLoc(), diagnostic) << Name; 1554 } 1555 } else { 1556 Diag(R.getNameLoc(), diagnostic) << Name; 1557 } 1558 1559 // Do we really want to note all of these? 1560 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) 1561 Diag((*I)->getLocation(), diag::note_dependent_var_use); 1562 1563 // Tell the callee to try to recover. 1564 return false; 1565 } 1566 1567 R.clear(); 1568 } 1569 } 1570 1571 // We didn't find anything, so try to correct for a typo. 1572 TypoCorrection Corrected; 1573 if (S && (Corrected = CorrectTypo(R.getLookupNameInfo(), R.getLookupKind(), 1574 S, &SS, NULL, false, CTC))) { 1575 std::string CorrectedStr(Corrected.getAsString(getLangOptions())); 1576 std::string CorrectedQuotedStr(Corrected.getQuoted(getLangOptions())); 1577 R.setLookupName(Corrected.getCorrection()); 1578 1579 if (NamedDecl *ND = Corrected.getCorrectionDecl()) { 1580 if (Corrected.isOverloaded()) { 1581 OverloadCandidateSet OCS(R.getNameLoc()); 1582 OverloadCandidateSet::iterator Best; 1583 for (TypoCorrection::decl_iterator CD = Corrected.begin(), 1584 CDEnd = Corrected.end(); 1585 CD != CDEnd; ++CD) { 1586 if (FunctionTemplateDecl *FTD = 1587 dyn_cast<FunctionTemplateDecl>(*CD)) 1588 AddTemplateOverloadCandidate( 1589 FTD, DeclAccessPair::make(FTD, AS_none), ExplicitTemplateArgs, 1590 Args, NumArgs, OCS); 1591 else if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*CD)) 1592 if (!ExplicitTemplateArgs || ExplicitTemplateArgs->size() == 0) 1593 AddOverloadCandidate(FD, DeclAccessPair::make(FD, AS_none), 1594 Args, NumArgs, OCS); 1595 } 1596 switch (OCS.BestViableFunction(*this, R.getNameLoc(), Best)) { 1597 case OR_Success: 1598 ND = Best->Function; 1599 break; 1600 default: 1601 break; 1602 } 1603 } 1604 R.addDecl(ND); 1605 if (isa<ValueDecl>(ND) || isa<FunctionTemplateDecl>(ND)) { 1606 if (SS.isEmpty()) 1607 Diag(R.getNameLoc(), diagnostic_suggest) << Name << CorrectedQuotedStr 1608 << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr); 1609 else 1610 Diag(R.getNameLoc(), diag::err_no_member_suggest) 1611 << Name << computeDeclContext(SS, false) << CorrectedQuotedStr 1612 << SS.getRange() 1613 << FixItHint::CreateReplacement(R.getNameLoc(), CorrectedStr); 1614 if (ND) 1615 Diag(ND->getLocation(), diag::note_previous_decl) 1616 << CorrectedQuotedStr; 1617 1618 // Tell the callee to try to recover. 1619 return false; 1620 } 1621 1622 if (isa<TypeDecl>(ND) || isa<ObjCInterfaceDecl>(ND)) { 1623 // FIXME: If we ended up with a typo for a type name or 1624 // Objective-C class name, we're in trouble because the parser 1625 // is in the wrong place to recover. Suggest the typo 1626 // correction, but don't make it a fix-it since we're not going 1627 // to recover well anyway. 1628 if (SS.isEmpty()) 1629 Diag(R.getNameLoc(), diagnostic_suggest) 1630 << Name << CorrectedQuotedStr; 1631 else 1632 Diag(R.getNameLoc(), diag::err_no_member_suggest) 1633 << Name << computeDeclContext(SS, false) << CorrectedQuotedStr 1634 << SS.getRange(); 1635 1636 // Don't try to recover; it won't work. 1637 return true; 1638 } 1639 } else { 1640 // FIXME: We found a keyword. Suggest it, but don't provide a fix-it 1641 // because we aren't able to recover. 1642 if (SS.isEmpty()) 1643 Diag(R.getNameLoc(), diagnostic_suggest) << Name << CorrectedQuotedStr; 1644 else 1645 Diag(R.getNameLoc(), diag::err_no_member_suggest) 1646 << Name << computeDeclContext(SS, false) << CorrectedQuotedStr 1647 << SS.getRange(); 1648 return true; 1649 } 1650 } 1651 R.clear(); 1652 1653 // Emit a special diagnostic for failed member lookups. 1654 // FIXME: computing the declaration context might fail here (?) 1655 if (!SS.isEmpty()) { 1656 Diag(R.getNameLoc(), diag::err_no_member) 1657 << Name << computeDeclContext(SS, false) 1658 << SS.getRange(); 1659 return true; 1660 } 1661 1662 // Give up, we can't recover. 1663 Diag(R.getNameLoc(), diagnostic) << Name; 1664 return true; 1665 } 1666 1667 ExprResult Sema::ActOnIdExpression(Scope *S, 1668 CXXScopeSpec &SS, 1669 UnqualifiedId &Id, 1670 bool HasTrailingLParen, 1671 bool IsAddressOfOperand) { 1672 assert(!(IsAddressOfOperand && HasTrailingLParen) && 1673 "cannot be direct & operand and have a trailing lparen"); 1674 1675 if (SS.isInvalid()) 1676 return ExprError(); 1677 1678 TemplateArgumentListInfo TemplateArgsBuffer; 1679 1680 // Decompose the UnqualifiedId into the following data. 1681 DeclarationNameInfo NameInfo; 1682 const TemplateArgumentListInfo *TemplateArgs; 1683 DecomposeUnqualifiedId(Id, TemplateArgsBuffer, NameInfo, TemplateArgs); 1684 1685 DeclarationName Name = NameInfo.getName(); 1686 IdentifierInfo *II = Name.getAsIdentifierInfo(); 1687 SourceLocation NameLoc = NameInfo.getLoc(); 1688 1689 // C++ [temp.dep.expr]p3: 1690 // An id-expression is type-dependent if it contains: 1691 // -- an identifier that was declared with a dependent type, 1692 // (note: handled after lookup) 1693 // -- a template-id that is dependent, 1694 // (note: handled in BuildTemplateIdExpr) 1695 // -- a conversion-function-id that specifies a dependent type, 1696 // -- a nested-name-specifier that contains a class-name that 1697 // names a dependent type. 1698 // Determine whether this is a member of an unknown specialization; 1699 // we need to handle these differently. 1700 bool DependentID = false; 1701 if (Name.getNameKind() == DeclarationName::CXXConversionFunctionName && 1702 Name.getCXXNameType()->isDependentType()) { 1703 DependentID = true; 1704 } else if (SS.isSet()) { 1705 if (DeclContext *DC = computeDeclContext(SS, false)) { 1706 if (RequireCompleteDeclContext(SS, DC)) 1707 return ExprError(); 1708 } else { 1709 DependentID = true; 1710 } 1711 } 1712 1713 if (DependentID) 1714 return ActOnDependentIdExpression(SS, NameInfo, IsAddressOfOperand, 1715 TemplateArgs); 1716 1717 bool IvarLookupFollowUp = false; 1718 // Perform the required lookup. 1719 LookupResult R(*this, NameInfo, 1720 (Id.getKind() == UnqualifiedId::IK_ImplicitSelfParam) 1721 ? LookupObjCImplicitSelfParam : LookupOrdinaryName); 1722 if (TemplateArgs) { 1723 // Lookup the template name again to correctly establish the context in 1724 // which it was found. This is really unfortunate as we already did the 1725 // lookup to determine that it was a template name in the first place. If 1726 // this becomes a performance hit, we can work harder to preserve those 1727 // results until we get here but it's likely not worth it. 1728 bool MemberOfUnknownSpecialization; 1729 LookupTemplateName(R, S, SS, QualType(), /*EnteringContext=*/false, 1730 MemberOfUnknownSpecialization); 1731 1732 if (MemberOfUnknownSpecialization || 1733 (R.getResultKind() == LookupResult::NotFoundInCurrentInstantiation)) 1734 return ActOnDependentIdExpression(SS, NameInfo, IsAddressOfOperand, 1735 TemplateArgs); 1736 } else { 1737 IvarLookupFollowUp = (!SS.isSet() && II && getCurMethodDecl()); 1738 LookupParsedName(R, S, &SS, !IvarLookupFollowUp); 1739 1740 // If the result might be in a dependent base class, this is a dependent 1741 // id-expression. 1742 if (R.getResultKind() == LookupResult::NotFoundInCurrentInstantiation) 1743 return ActOnDependentIdExpression(SS, NameInfo, IsAddressOfOperand, 1744 TemplateArgs); 1745 1746 // If this reference is in an Objective-C method, then we need to do 1747 // some special Objective-C lookup, too. 1748 if (IvarLookupFollowUp) { 1749 ExprResult E(LookupInObjCMethod(R, S, II, true)); 1750 if (E.isInvalid()) 1751 return ExprError(); 1752 1753 if (Expr *Ex = E.takeAs<Expr>()) 1754 return Owned(Ex); 1755 1756 // for further use, this must be set to false if in class method. 1757 IvarLookupFollowUp = getCurMethodDecl()->isInstanceMethod(); 1758 } 1759 } 1760 1761 if (R.isAmbiguous()) 1762 return ExprError(); 1763 1764 // Determine whether this name might be a candidate for 1765 // argument-dependent lookup. 1766 bool ADL = UseArgumentDependentLookup(SS, R, HasTrailingLParen); 1767 1768 if (R.empty() && !ADL) { 1769 // Otherwise, this could be an implicitly declared function reference (legal 1770 // in C90, extension in C99, forbidden in C++). 1771 if (HasTrailingLParen && II && !getLangOptions().CPlusPlus) { 1772 NamedDecl *D = ImplicitlyDefineFunction(NameLoc, *II, S); 1773 if (D) R.addDecl(D); 1774 } 1775 1776 // If this name wasn't predeclared and if this is not a function 1777 // call, diagnose the problem. 1778 if (R.empty()) { 1779 1780 // In Microsoft mode, if we are inside a template class member function 1781 // and we can't resolve an identifier then assume the identifier is type 1782 // dependent. The goal is to postpone name lookup to instantiation time 1783 // to be able to search into type dependent base classes. 1784 if (getLangOptions().MicrosoftMode && CurContext->isDependentContext() && 1785 isa<CXXMethodDecl>(CurContext)) 1786 return ActOnDependentIdExpression(SS, NameInfo, IsAddressOfOperand, 1787 TemplateArgs); 1788 1789 if (DiagnoseEmptyLookup(S, SS, R, CTC_Unknown)) 1790 return ExprError(); 1791 1792 assert(!R.empty() && 1793 "DiagnoseEmptyLookup returned false but added no results"); 1794 1795 // If we found an Objective-C instance variable, let 1796 // LookupInObjCMethod build the appropriate expression to 1797 // reference the ivar. 1798 if (ObjCIvarDecl *Ivar = R.getAsSingle<ObjCIvarDecl>()) { 1799 R.clear(); 1800 ExprResult E(LookupInObjCMethod(R, S, Ivar->getIdentifier())); 1801 // In a hopelessly buggy code, Objective-C instance variable 1802 // lookup fails and no expression will be built to reference it. 1803 if (!E.isInvalid() && !E.get()) 1804 return ExprError(); 1805 return move(E); 1806 } 1807 } 1808 } 1809 1810 // This is guaranteed from this point on. 1811 assert(!R.empty() || ADL); 1812 1813 // Check whether this might be a C++ implicit instance member access. 1814 // C++ [class.mfct.non-static]p3: 1815 // When an id-expression that is not part of a class member access 1816 // syntax and not used to form a pointer to member is used in the 1817 // body of a non-static member function of class X, if name lookup 1818 // resolves the name in the id-expression to a non-static non-type 1819 // member of some class C, the id-expression is transformed into a 1820 // class member access expression using (*this) as the 1821 // postfix-expression to the left of the . operator. 1822 // 1823 // But we don't actually need to do this for '&' operands if R 1824 // resolved to a function or overloaded function set, because the 1825 // expression is ill-formed if it actually works out to be a 1826 // non-static member function: 1827 // 1828 // C++ [expr.ref]p4: 1829 // Otherwise, if E1.E2 refers to a non-static member function. . . 1830 // [t]he expression can be used only as the left-hand operand of a 1831 // member function call. 1832 // 1833 // There are other safeguards against such uses, but it's important 1834 // to get this right here so that we don't end up making a 1835 // spuriously dependent expression if we're inside a dependent 1836 // instance method. 1837 if (!R.empty() && (*R.begin())->isCXXClassMember()) { 1838 bool MightBeImplicitMember; 1839 if (!IsAddressOfOperand) 1840 MightBeImplicitMember = true; 1841 else if (!SS.isEmpty()) 1842 MightBeImplicitMember = false; 1843 else if (R.isOverloadedResult()) 1844 MightBeImplicitMember = false; 1845 else if (R.isUnresolvableResult()) 1846 MightBeImplicitMember = true; 1847 else 1848 MightBeImplicitMember = isa<FieldDecl>(R.getFoundDecl()) || 1849 isa<IndirectFieldDecl>(R.getFoundDecl()); 1850 1851 if (MightBeImplicitMember) 1852 return BuildPossibleImplicitMemberExpr(SS, R, TemplateArgs); 1853 } 1854 1855 if (TemplateArgs) 1856 return BuildTemplateIdExpr(SS, R, ADL, *TemplateArgs); 1857 1858 return BuildDeclarationNameExpr(SS, R, ADL); 1859 } 1860 1861 /// BuildQualifiedDeclarationNameExpr - Build a C++ qualified 1862 /// declaration name, generally during template instantiation. 1863 /// There's a large number of things which don't need to be done along 1864 /// this path. 1865 ExprResult 1866 Sema::BuildQualifiedDeclarationNameExpr(CXXScopeSpec &SS, 1867 const DeclarationNameInfo &NameInfo) { 1868 DeclContext *DC; 1869 if (!(DC = computeDeclContext(SS, false)) || DC->isDependentContext()) 1870 return BuildDependentDeclRefExpr(SS, NameInfo, 0); 1871 1872 if (RequireCompleteDeclContext(SS, DC)) 1873 return ExprError(); 1874 1875 LookupResult R(*this, NameInfo, LookupOrdinaryName); 1876 LookupQualifiedName(R, DC); 1877 1878 if (R.isAmbiguous()) 1879 return ExprError(); 1880 1881 if (R.empty()) { 1882 Diag(NameInfo.getLoc(), diag::err_no_member) 1883 << NameInfo.getName() << DC << SS.getRange(); 1884 return ExprError(); 1885 } 1886 1887 return BuildDeclarationNameExpr(SS, R, /*ADL*/ false); 1888 } 1889 1890 /// LookupInObjCMethod - The parser has read a name in, and Sema has 1891 /// detected that we're currently inside an ObjC method. Perform some 1892 /// additional lookup. 1893 /// 1894 /// Ideally, most of this would be done by lookup, but there's 1895 /// actually quite a lot of extra work involved. 1896 /// 1897 /// Returns a null sentinel to indicate trivial success. 1898 ExprResult 1899 Sema::LookupInObjCMethod(LookupResult &Lookup, Scope *S, 1900 IdentifierInfo *II, bool AllowBuiltinCreation) { 1901 SourceLocation Loc = Lookup.getNameLoc(); 1902 ObjCMethodDecl *CurMethod = getCurMethodDecl(); 1903 1904 // There are two cases to handle here. 1) scoped lookup could have failed, 1905 // in which case we should look for an ivar. 2) scoped lookup could have 1906 // found a decl, but that decl is outside the current instance method (i.e. 1907 // a global variable). In these two cases, we do a lookup for an ivar with 1908 // this name, if the lookup sucedes, we replace it our current decl. 1909 1910 // If we're in a class method, we don't normally want to look for 1911 // ivars. But if we don't find anything else, and there's an 1912 // ivar, that's an error. 1913 bool IsClassMethod = CurMethod->isClassMethod(); 1914 1915 bool LookForIvars; 1916 if (Lookup.empty()) 1917 LookForIvars = true; 1918 else if (IsClassMethod) 1919 LookForIvars = false; 1920 else 1921 LookForIvars = (Lookup.isSingleResult() && 1922 Lookup.getFoundDecl()->isDefinedOutsideFunctionOrMethod()); 1923 ObjCInterfaceDecl *IFace = 0; 1924 if (LookForIvars) { 1925 IFace = CurMethod->getClassInterface(); 1926 ObjCInterfaceDecl *ClassDeclared; 1927 ObjCIvarDecl *IV = 0; 1928 if (IFace && (IV = IFace->lookupInstanceVariable(II, ClassDeclared))) { 1929 // Diagnose using an ivar in a class method. 1930 if (IsClassMethod) 1931 return ExprError(Diag(Loc, diag::error_ivar_use_in_class_method) 1932 << IV->getDeclName()); 1933 1934 // If we're referencing an invalid decl, just return this as a silent 1935 // error node. The error diagnostic was already emitted on the decl. 1936 if (IV->isInvalidDecl()) 1937 return ExprError(); 1938 1939 // Check if referencing a field with __attribute__((deprecated)). 1940 if (DiagnoseUseOfDecl(IV, Loc)) 1941 return ExprError(); 1942 1943 // Diagnose the use of an ivar outside of the declaring class. 1944 if (IV->getAccessControl() == ObjCIvarDecl::Private && 1945 ClassDeclared != IFace) 1946 Diag(Loc, diag::error_private_ivar_access) << IV->getDeclName(); 1947 1948 // FIXME: This should use a new expr for a direct reference, don't 1949 // turn this into Self->ivar, just return a BareIVarExpr or something. 1950 IdentifierInfo &II = Context.Idents.get("self"); 1951 UnqualifiedId SelfName; 1952 SelfName.setIdentifier(&II, SourceLocation()); 1953 SelfName.setKind(UnqualifiedId::IK_ImplicitSelfParam); 1954 CXXScopeSpec SelfScopeSpec; 1955 ExprResult SelfExpr = ActOnIdExpression(S, SelfScopeSpec, 1956 SelfName, false, false); 1957 if (SelfExpr.isInvalid()) 1958 return ExprError(); 1959 1960 SelfExpr = DefaultLvalueConversion(SelfExpr.take()); 1961 if (SelfExpr.isInvalid()) 1962 return ExprError(); 1963 1964 MarkDeclarationReferenced(Loc, IV); 1965 return Owned(new (Context) 1966 ObjCIvarRefExpr(IV, IV->getType(), Loc, 1967 SelfExpr.take(), true, true)); 1968 } 1969 } else if (CurMethod->isInstanceMethod()) { 1970 // We should warn if a local variable hides an ivar. 1971 if (ObjCInterfaceDecl *IFace = CurMethod->getClassInterface()) { 1972 ObjCInterfaceDecl *ClassDeclared; 1973 if (ObjCIvarDecl *IV = IFace->lookupInstanceVariable(II, ClassDeclared)) { 1974 if (IV->getAccessControl() != ObjCIvarDecl::Private || 1975 IFace == ClassDeclared) 1976 Diag(Loc, diag::warn_ivar_use_hidden) << IV->getDeclName(); 1977 } 1978 } 1979 } 1980 1981 if (Lookup.empty() && II && AllowBuiltinCreation) { 1982 // FIXME. Consolidate this with similar code in LookupName. 1983 if (unsigned BuiltinID = II->getBuiltinID()) { 1984 if (!(getLangOptions().CPlusPlus && 1985 Context.BuiltinInfo.isPredefinedLibFunction(BuiltinID))) { 1986 NamedDecl *D = LazilyCreateBuiltin((IdentifierInfo *)II, BuiltinID, 1987 S, Lookup.isForRedeclaration(), 1988 Lookup.getNameLoc()); 1989 if (D) Lookup.addDecl(D); 1990 } 1991 } 1992 } 1993 // Sentinel value saying that we didn't do anything special. 1994 return Owned((Expr*) 0); 1995 } 1996 1997 /// \brief Cast a base object to a member's actual type. 1998 /// 1999 /// Logically this happens in three phases: 2000 /// 2001 /// * First we cast from the base type to the naming class. 2002 /// The naming class is the class into which we were looking 2003 /// when we found the member; it's the qualifier type if a 2004 /// qualifier was provided, and otherwise it's the base type. 2005 /// 2006 /// * Next we cast from the naming class to the declaring class. 2007 /// If the member we found was brought into a class's scope by 2008 /// a using declaration, this is that class; otherwise it's 2009 /// the class declaring the member. 2010 /// 2011 /// * Finally we cast from the declaring class to the "true" 2012 /// declaring class of the member. This conversion does not 2013 /// obey access control. 2014 ExprResult 2015 Sema::PerformObjectMemberConversion(Expr *From, 2016 NestedNameSpecifier *Qualifier, 2017 NamedDecl *FoundDecl, 2018 NamedDecl *Member) { 2019 CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Member->getDeclContext()); 2020 if (!RD) 2021 return Owned(From); 2022 2023 QualType DestRecordType; 2024 QualType DestType; 2025 QualType FromRecordType; 2026 QualType FromType = From->getType(); 2027 bool PointerConversions = false; 2028 if (isa<FieldDecl>(Member)) { 2029 DestRecordType = Context.getCanonicalType(Context.getTypeDeclType(RD)); 2030 2031 if (FromType->getAs<PointerType>()) { 2032 DestType = Context.getPointerType(DestRecordType); 2033 FromRecordType = FromType->getPointeeType(); 2034 PointerConversions = true; 2035 } else { 2036 DestType = DestRecordType; 2037 FromRecordType = FromType; 2038 } 2039 } else if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Member)) { 2040 if (Method->isStatic()) 2041 return Owned(From); 2042 2043 DestType = Method->getThisType(Context); 2044 DestRecordType = DestType->getPointeeType(); 2045 2046 if (FromType->getAs<PointerType>()) { 2047 FromRecordType = FromType->getPointeeType(); 2048 PointerConversions = true; 2049 } else { 2050 FromRecordType = FromType; 2051 DestType = DestRecordType; 2052 } 2053 } else { 2054 // No conversion necessary. 2055 return Owned(From); 2056 } 2057 2058 if (DestType->isDependentType() || FromType->isDependentType()) 2059 return Owned(From); 2060 2061 // If the unqualified types are the same, no conversion is necessary. 2062 if (Context.hasSameUnqualifiedType(FromRecordType, DestRecordType)) 2063 return Owned(From); 2064 2065 SourceRange FromRange = From->getSourceRange(); 2066 SourceLocation FromLoc = FromRange.getBegin(); 2067 2068 ExprValueKind VK = From->getValueKind(); 2069 2070 // C++ [class.member.lookup]p8: 2071 // [...] Ambiguities can often be resolved by qualifying a name with its 2072 // class name. 2073 // 2074 // If the member was a qualified name and the qualified referred to a 2075 // specific base subobject type, we'll cast to that intermediate type 2076 // first and then to the object in which the member is declared. That allows 2077 // one to resolve ambiguities in, e.g., a diamond-shaped hierarchy such as: 2078 // 2079 // class Base { public: int x; }; 2080 // class Derived1 : public Base { }; 2081 // class Derived2 : public Base { }; 2082 // class VeryDerived : public Derived1, public Derived2 { void f(); }; 2083 // 2084 // void VeryDerived::f() { 2085 // x = 17; // error: ambiguous base subobjects 2086 // Derived1::x = 17; // okay, pick the Base subobject of Derived1 2087 // } 2088 if (Qualifier) { 2089 QualType QType = QualType(Qualifier->getAsType(), 0); 2090 assert(!QType.isNull() && "lookup done with dependent qualifier?"); 2091 assert(QType->isRecordType() && "lookup done with non-record type"); 2092 2093 QualType QRecordType = QualType(QType->getAs<RecordType>(), 0); 2094 2095 // In C++98, the qualifier type doesn't actually have to be a base 2096 // type of the object type, in which case we just ignore it. 2097 // Otherwise build the appropriate casts. 2098 if (IsDerivedFrom(FromRecordType, QRecordType)) { 2099 CXXCastPath BasePath; 2100 if (CheckDerivedToBaseConversion(FromRecordType, QRecordType, 2101 FromLoc, FromRange, &BasePath)) 2102 return ExprError(); 2103 2104 if (PointerConversions) 2105 QType = Context.getPointerType(QType); 2106 From = ImpCastExprToType(From, QType, CK_UncheckedDerivedToBase, 2107 VK, &BasePath).take(); 2108 2109 FromType = QType; 2110 FromRecordType = QRecordType; 2111 2112 // If the qualifier type was the same as the destination type, 2113 // we're done. 2114 if (Context.hasSameUnqualifiedType(FromRecordType, DestRecordType)) 2115 return Owned(From); 2116 } 2117 } 2118 2119 bool IgnoreAccess = false; 2120 2121 // If we actually found the member through a using declaration, cast 2122 // down to the using declaration's type. 2123 // 2124 // Pointer equality is fine here because only one declaration of a 2125 // class ever has member declarations. 2126 if (FoundDecl->getDeclContext() != Member->getDeclContext()) { 2127 assert(isa<UsingShadowDecl>(FoundDecl)); 2128 QualType URecordType = Context.getTypeDeclType( 2129 cast<CXXRecordDecl>(FoundDecl->getDeclContext())); 2130 2131 // We only need to do this if the naming-class to declaring-class 2132 // conversion is non-trivial. 2133 if (!Context.hasSameUnqualifiedType(FromRecordType, URecordType)) { 2134 assert(IsDerivedFrom(FromRecordType, URecordType)); 2135 CXXCastPath BasePath; 2136 if (CheckDerivedToBaseConversion(FromRecordType, URecordType, 2137 FromLoc, FromRange, &BasePath)) 2138 return ExprError(); 2139 2140 QualType UType = URecordType; 2141 if (PointerConversions) 2142 UType = Context.getPointerType(UType); 2143 From = ImpCastExprToType(From, UType, CK_UncheckedDerivedToBase, 2144 VK, &BasePath).take(); 2145 FromType = UType; 2146 FromRecordType = URecordType; 2147 } 2148 2149 // We don't do access control for the conversion from the 2150 // declaring class to the true declaring class. 2151 IgnoreAccess = true; 2152 } 2153 2154 CXXCastPath BasePath; 2155 if (CheckDerivedToBaseConversion(FromRecordType, DestRecordType, 2156 FromLoc, FromRange, &BasePath, 2157 IgnoreAccess)) 2158 return ExprError(); 2159 2160 return ImpCastExprToType(From, DestType, CK_UncheckedDerivedToBase, 2161 VK, &BasePath); 2162 } 2163 2164 bool Sema::UseArgumentDependentLookup(const CXXScopeSpec &SS, 2165 const LookupResult &R, 2166 bool HasTrailingLParen) { 2167 // Only when used directly as the postfix-expression of a call. 2168 if (!HasTrailingLParen) 2169 return false; 2170 2171 // Never if a scope specifier was provided. 2172 if (SS.isSet()) 2173 return false; 2174 2175 // Only in C++ or ObjC++. 2176 if (!getLangOptions().CPlusPlus) 2177 return false; 2178 2179 // Turn off ADL when we find certain kinds of declarations during 2180 // normal lookup: 2181 for (LookupResult::iterator I = R.begin(), E = R.end(); I != E; ++I) { 2182 NamedDecl *D = *I; 2183 2184 // C++0x [basic.lookup.argdep]p3: 2185 // -- a declaration of a class member 2186 // Since using decls preserve this property, we check this on the 2187 // original decl. 2188 if (D->isCXXClassMember()) 2189 return false; 2190 2191 // C++0x [basic.lookup.argdep]p3: 2192 // -- a block-scope function declaration that is not a 2193 // using-declaration 2194 // NOTE: we also trigger this for function templates (in fact, we 2195 // don't check the decl type at all, since all other decl types 2196 // turn off ADL anyway). 2197 if (isa<UsingShadowDecl>(D)) 2198 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 2199 else if (D->getDeclContext()->isFunctionOrMethod()) 2200 return false; 2201 2202 // C++0x [basic.lookup.argdep]p3: 2203 // -- a declaration that is neither a function or a function 2204 // template 2205 // And also for builtin functions. 2206 if (isa<FunctionDecl>(D)) { 2207 FunctionDecl *FDecl = cast<FunctionDecl>(D); 2208 2209 // But also builtin functions. 2210 if (FDecl->getBuiltinID() && FDecl->isImplicit()) 2211 return false; 2212 } else if (!isa<FunctionTemplateDecl>(D)) 2213 return false; 2214 } 2215 2216 return true; 2217 } 2218 2219 2220 /// Diagnoses obvious problems with the use of the given declaration 2221 /// as an expression. This is only actually called for lookups that 2222 /// were not overloaded, and it doesn't promise that the declaration 2223 /// will in fact be used. 2224 static bool CheckDeclInExpr(Sema &S, SourceLocation Loc, NamedDecl *D) { 2225 if (isa<TypedefNameDecl>(D)) { 2226 S.Diag(Loc, diag::err_unexpected_typedef) << D->getDeclName(); 2227 return true; 2228 } 2229 2230 if (isa<ObjCInterfaceDecl>(D)) { 2231 S.Diag(Loc, diag::err_unexpected_interface) << D->getDeclName(); 2232 return true; 2233 } 2234 2235 if (isa<NamespaceDecl>(D)) { 2236 S.Diag(Loc, diag::err_unexpected_namespace) << D->getDeclName(); 2237 return true; 2238 } 2239 2240 return false; 2241 } 2242 2243 ExprResult 2244 Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, 2245 LookupResult &R, 2246 bool NeedsADL) { 2247 // If this is a single, fully-resolved result and we don't need ADL, 2248 // just build an ordinary singleton decl ref. 2249 if (!NeedsADL && R.isSingleResult() && !R.getAsSingle<FunctionTemplateDecl>()) 2250 return BuildDeclarationNameExpr(SS, R.getLookupNameInfo(), 2251 R.getFoundDecl()); 2252 2253 // We only need to check the declaration if there's exactly one 2254 // result, because in the overloaded case the results can only be 2255 // functions and function templates. 2256 if (R.isSingleResult() && 2257 CheckDeclInExpr(*this, R.getNameLoc(), R.getFoundDecl())) 2258 return ExprError(); 2259 2260 // Otherwise, just build an unresolved lookup expression. Suppress 2261 // any lookup-related diagnostics; we'll hash these out later, when 2262 // we've picked a target. 2263 R.suppressDiagnostics(); 2264 2265 UnresolvedLookupExpr *ULE 2266 = UnresolvedLookupExpr::Create(Context, R.getNamingClass(), 2267 SS.getWithLocInContext(Context), 2268 R.getLookupNameInfo(), 2269 NeedsADL, R.isOverloadedResult(), 2270 R.begin(), R.end()); 2271 2272 return Owned(ULE); 2273 } 2274 2275 /// \brief Complete semantic analysis for a reference to the given declaration. 2276 ExprResult 2277 Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS, 2278 const DeclarationNameInfo &NameInfo, 2279 NamedDecl *D) { 2280 assert(D && "Cannot refer to a NULL declaration"); 2281 assert(!isa<FunctionTemplateDecl>(D) && 2282 "Cannot refer unambiguously to a function template"); 2283 2284 SourceLocation Loc = NameInfo.getLoc(); 2285 if (CheckDeclInExpr(*this, Loc, D)) 2286 return ExprError(); 2287 2288 if (TemplateDecl *Template = dyn_cast<TemplateDecl>(D)) { 2289 // Specifically diagnose references to class templates that are missing 2290 // a template argument list. 2291 Diag(Loc, diag::err_template_decl_ref) 2292 << Template << SS.getRange(); 2293 Diag(Template->getLocation(), diag::note_template_decl_here); 2294 return ExprError(); 2295 } 2296 2297 // Make sure that we're referring to a value. 2298 ValueDecl *VD = dyn_cast<ValueDecl>(D); 2299 if (!VD) { 2300 Diag(Loc, diag::err_ref_non_value) 2301 << D << SS.getRange(); 2302 Diag(D->getLocation(), diag::note_declared_at); 2303 return ExprError(); 2304 } 2305 2306 // Check whether this declaration can be used. Note that we suppress 2307 // this check when we're going to perform argument-dependent lookup 2308 // on this function name, because this might not be the function 2309 // that overload resolution actually selects. 2310 if (DiagnoseUseOfDecl(VD, Loc)) 2311 return ExprError(); 2312 2313 // Only create DeclRefExpr's for valid Decl's. 2314 if (VD->isInvalidDecl()) 2315 return ExprError(); 2316 2317 // Handle members of anonymous structs and unions. If we got here, 2318 // and the reference is to a class member indirect field, then this 2319 // must be the subject of a pointer-to-member expression. 2320 if (IndirectFieldDecl *indirectField = dyn_cast<IndirectFieldDecl>(VD)) 2321 if (!indirectField->isCXXClassMember()) 2322 return BuildAnonymousStructUnionMemberReference(SS, NameInfo.getLoc(), 2323 indirectField); 2324 2325 // If the identifier reference is inside a block, and it refers to a value 2326 // that is outside the block, create a BlockDeclRefExpr instead of a 2327 // DeclRefExpr. This ensures the value is treated as a copy-in snapshot when 2328 // the block is formed. 2329 // 2330 // We do not do this for things like enum constants, global variables, etc, 2331 // as they do not get snapshotted. 2332 // 2333 switch (shouldCaptureValueReference(*this, NameInfo.getLoc(), VD)) { 2334 case CR_Error: 2335 return ExprError(); 2336 2337 case CR_Capture: 2338 assert(!SS.isSet() && "referenced local variable with scope specifier?"); 2339 return BuildBlockDeclRefExpr(*this, VD, NameInfo, /*byref*/ false); 2340 2341 case CR_CaptureByRef: 2342 assert(!SS.isSet() && "referenced local variable with scope specifier?"); 2343 return BuildBlockDeclRefExpr(*this, VD, NameInfo, /*byref*/ true); 2344 2345 case CR_NoCapture: { 2346 // If this reference is not in a block or if the referenced 2347 // variable is within the block, create a normal DeclRefExpr. 2348 2349 QualType type = VD->getType(); 2350 ExprValueKind valueKind = VK_RValue; 2351 2352 switch (D->getKind()) { 2353 // Ignore all the non-ValueDecl kinds. 2354 #define ABSTRACT_DECL(kind) 2355 #define VALUE(type, base) 2356 #define DECL(type, base) \ 2357 case Decl::type: 2358 #include "clang/AST/DeclNodes.inc" 2359 llvm_unreachable("invalid value decl kind"); 2360 return ExprError(); 2361 2362 // These shouldn't make it here. 2363 case Decl::ObjCAtDefsField: 2364 case Decl::ObjCIvar: 2365 llvm_unreachable("forming non-member reference to ivar?"); 2366 return ExprError(); 2367 2368 // Enum constants are always r-values and never references. 2369 // Unresolved using declarations are dependent. 2370 case Decl::EnumConstant: 2371 case Decl::UnresolvedUsingValue: 2372 valueKind = VK_RValue; 2373 break; 2374 2375 // Fields and indirect fields that got here must be for 2376 // pointer-to-member expressions; we just call them l-values for 2377 // internal consistency, because this subexpression doesn't really 2378 // exist in the high-level semantics. 2379 case Decl::Field: 2380 case Decl::IndirectField: 2381 assert(getLangOptions().CPlusPlus && 2382 "building reference to field in C?"); 2383 2384 // These can't have reference type in well-formed programs, but 2385 // for internal consistency we do this anyway. 2386 type = type.getNonReferenceType(); 2387 valueKind = VK_LValue; 2388 break; 2389 2390 // Non-type template parameters are either l-values or r-values 2391 // depending on the type. 2392 case Decl::NonTypeTemplateParm: { 2393 if (const ReferenceType *reftype = type->getAs<ReferenceType>()) { 2394 type = reftype->getPointeeType(); 2395 valueKind = VK_LValue; // even if the parameter is an r-value reference 2396 break; 2397 } 2398 2399 // For non-references, we need to strip qualifiers just in case 2400 // the template parameter was declared as 'const int' or whatever. 2401 valueKind = VK_RValue; 2402 type = type.getUnqualifiedType(); 2403 break; 2404 } 2405 2406 case Decl::Var: 2407 // In C, "extern void blah;" is valid and is an r-value. 2408 if (!getLangOptions().CPlusPlus && 2409 !type.hasQualifiers() && 2410 type->isVoidType()) { 2411 valueKind = VK_RValue; 2412 break; 2413 } 2414 // fallthrough 2415 2416 case Decl::ImplicitParam: 2417 case Decl::ParmVar: 2418 // These are always l-values. 2419 valueKind = VK_LValue; 2420 type = type.getNonReferenceType(); 2421 break; 2422 2423 case Decl::Function: { 2424 const FunctionType *fty = type->castAs<FunctionType>(); 2425 2426 // If we're referring to a function with an __unknown_anytype 2427 // result type, make the entire expression __unknown_anytype. 2428 if (fty->getResultType() == Context.UnknownAnyTy) { 2429 type = Context.UnknownAnyTy; 2430 valueKind = VK_RValue; 2431 break; 2432 } 2433 2434 // Functions are l-values in C++. 2435 if (getLangOptions().CPlusPlus) { 2436 valueKind = VK_LValue; 2437 break; 2438 } 2439 2440 // C99 DR 316 says that, if a function type comes from a 2441 // function definition (without a prototype), that type is only 2442 // used for checking compatibility. Therefore, when referencing 2443 // the function, we pretend that we don't have the full function 2444 // type. 2445 if (!cast<FunctionDecl>(VD)->hasPrototype() && 2446 isa<FunctionProtoType>(fty)) 2447 type = Context.getFunctionNoProtoType(fty->getResultType(), 2448 fty->getExtInfo()); 2449 2450 // Functions are r-values in C. 2451 valueKind = VK_RValue; 2452 break; 2453 } 2454 2455 case Decl::CXXMethod: 2456 // If we're referring to a method with an __unknown_anytype 2457 // result type, make the entire expression __unknown_anytype. 2458 // This should only be possible with a type written directly. 2459 if (const FunctionProtoType *proto 2460 = dyn_cast<FunctionProtoType>(VD->getType())) 2461 if (proto->getResultType() == Context.UnknownAnyTy) { 2462 type = Context.UnknownAnyTy; 2463 valueKind = VK_RValue; 2464 break; 2465 } 2466 2467 // C++ methods are l-values if static, r-values if non-static. 2468 if (cast<CXXMethodDecl>(VD)->isStatic()) { 2469 valueKind = VK_LValue; 2470 break; 2471 } 2472 // fallthrough 2473 2474 case Decl::CXXConversion: 2475 case Decl::CXXDestructor: 2476 case Decl::CXXConstructor: 2477 valueKind = VK_RValue; 2478 break; 2479 } 2480 2481 return BuildDeclRefExpr(VD, type, valueKind, NameInfo, &SS); 2482 } 2483 2484 } 2485 2486 llvm_unreachable("unknown capture result"); 2487 return ExprError(); 2488 } 2489 2490 ExprResult Sema::ActOnPredefinedExpr(SourceLocation Loc, tok::TokenKind Kind) { 2491 PredefinedExpr::IdentType IT; 2492 2493 switch (Kind) { 2494 default: llvm_unreachable("Unknown simple primary expr!"); 2495 case tok::kw___func__: IT = PredefinedExpr::Func; break; // [C99 6.4.2.2] 2496 case tok::kw___FUNCTION__: IT = PredefinedExpr::Function; break; 2497 case tok::kw___PRETTY_FUNCTION__: IT = PredefinedExpr::PrettyFunction; break; 2498 } 2499 2500 // Pre-defined identifiers are of type char[x], where x is the length of the 2501 // string. 2502 2503 Decl *currentDecl = getCurFunctionOrMethodDecl(); 2504 if (!currentDecl && getCurBlock()) 2505 currentDecl = getCurBlock()->TheDecl; 2506 if (!currentDecl) { 2507 Diag(Loc, diag::ext_predef_outside_function); 2508 currentDecl = Context.getTranslationUnitDecl(); 2509 } 2510 2511 QualType ResTy; 2512 if (cast<DeclContext>(currentDecl)->isDependentContext()) { 2513 ResTy = Context.DependentTy; 2514 } else { 2515 unsigned Length = PredefinedExpr::ComputeName(IT, currentDecl).length(); 2516 2517 llvm::APInt LengthI(32, Length + 1); 2518 ResTy = Context.CharTy.withConst(); 2519 ResTy = Context.getConstantArrayType(ResTy, LengthI, ArrayType::Normal, 0); 2520 } 2521 return Owned(new (Context) PredefinedExpr(Loc, ResTy, IT)); 2522 } 2523 2524 ExprResult Sema::ActOnCharacterConstant(const Token &Tok) { 2525 llvm::SmallString<16> CharBuffer; 2526 bool Invalid = false; 2527 StringRef ThisTok = PP.getSpelling(Tok, CharBuffer, &Invalid); 2528 if (Invalid) 2529 return ExprError(); 2530 2531 CharLiteralParser Literal(ThisTok.begin(), ThisTok.end(), Tok.getLocation(), 2532 PP, Tok.getKind()); 2533 if (Literal.hadError()) 2534 return ExprError(); 2535 2536 QualType Ty; 2537 if (!getLangOptions().CPlusPlus) 2538 Ty = Context.IntTy; // 'x' and L'x' -> int in C. 2539 else if (Literal.isWide()) 2540 Ty = Context.WCharTy; // L'x' -> wchar_t in C++. 2541 else if (Literal.isUTF16()) 2542 Ty = Context.Char16Ty; // u'x' -> char16_t in C++0x. 2543 else if (Literal.isUTF32()) 2544 Ty = Context.Char32Ty; // U'x' -> char32_t in C++0x. 2545 else if (Literal.isMultiChar()) 2546 Ty = Context.IntTy; // 'wxyz' -> int in C++. 2547 else 2548 Ty = Context.CharTy; // 'x' -> char in C++ 2549 2550 CharacterLiteral::CharacterKind Kind = CharacterLiteral::Ascii; 2551 if (Literal.isWide()) 2552 Kind = CharacterLiteral::Wide; 2553 else if (Literal.isUTF16()) 2554 Kind = CharacterLiteral::UTF16; 2555 else if (Literal.isUTF32()) 2556 Kind = CharacterLiteral::UTF32; 2557 2558 return Owned(new (Context) CharacterLiteral(Literal.getValue(), Kind, Ty, 2559 Tok.getLocation())); 2560 } 2561 2562 ExprResult Sema::ActOnNumericConstant(const Token &Tok) { 2563 // Fast path for a single digit (which is quite common). A single digit 2564 // cannot have a trigraph, escaped newline, radix prefix, or type suffix. 2565 if (Tok.getLength() == 1) { 2566 const char Val = PP.getSpellingOfSingleCharacterNumericConstant(Tok); 2567 unsigned IntSize = Context.getTargetInfo().getIntWidth(); 2568 return Owned(IntegerLiteral::Create(Context, llvm::APInt(IntSize, Val-'0'), 2569 Context.IntTy, Tok.getLocation())); 2570 } 2571 2572 llvm::SmallString<512> IntegerBuffer; 2573 // Add padding so that NumericLiteralParser can overread by one character. 2574 IntegerBuffer.resize(Tok.getLength()+1); 2575 const char *ThisTokBegin = &IntegerBuffer[0]; 2576 2577 // Get the spelling of the token, which eliminates trigraphs, etc. 2578 bool Invalid = false; 2579 unsigned ActualLength = PP.getSpelling(Tok, ThisTokBegin, &Invalid); 2580 if (Invalid) 2581 return ExprError(); 2582 2583 NumericLiteralParser Literal(ThisTokBegin, ThisTokBegin+ActualLength, 2584 Tok.getLocation(), PP); 2585 if (Literal.hadError) 2586 return ExprError(); 2587 2588 Expr *Res; 2589 2590 if (Literal.isFloatingLiteral()) { 2591 QualType Ty; 2592 if (Literal.isFloat) 2593 Ty = Context.FloatTy; 2594 else if (!Literal.isLong) 2595 Ty = Context.DoubleTy; 2596 else 2597 Ty = Context.LongDoubleTy; 2598 2599 const llvm::fltSemantics &Format = Context.getFloatTypeSemantics(Ty); 2600 2601 using llvm::APFloat; 2602 APFloat Val(Format); 2603 2604 APFloat::opStatus result = Literal.GetFloatValue(Val); 2605 2606 // Overflow is always an error, but underflow is only an error if 2607 // we underflowed to zero (APFloat reports denormals as underflow). 2608 if ((result & APFloat::opOverflow) || 2609 ((result & APFloat::opUnderflow) && Val.isZero())) { 2610 unsigned diagnostic; 2611 llvm::SmallString<20> buffer; 2612 if (result & APFloat::opOverflow) { 2613 diagnostic = diag::warn_float_overflow; 2614 APFloat::getLargest(Format).toString(buffer); 2615 } else { 2616 diagnostic = diag::warn_float_underflow; 2617 APFloat::getSmallest(Format).toString(buffer); 2618 } 2619 2620 Diag(Tok.getLocation(), diagnostic) 2621 << Ty 2622 << StringRef(buffer.data(), buffer.size()); 2623 } 2624 2625 bool isExact = (result == APFloat::opOK); 2626 Res = FloatingLiteral::Create(Context, Val, isExact, Ty, Tok.getLocation()); 2627 2628 if (Ty == Context.DoubleTy) { 2629 if (getLangOptions().SinglePrecisionConstants) { 2630 Res = ImpCastExprToType(Res, Context.FloatTy, CK_FloatingCast).take(); 2631 } else if (getLangOptions().OpenCL && !getOpenCLOptions().cl_khr_fp64) { 2632 Diag(Tok.getLocation(), diag::warn_double_const_requires_fp64); 2633 Res = ImpCastExprToType(Res, Context.FloatTy, CK_FloatingCast).take(); 2634 } 2635 } 2636 } else if (!Literal.isIntegerLiteral()) { 2637 return ExprError(); 2638 } else { 2639 QualType Ty; 2640 2641 // long long is a C99 feature. 2642 if (!getLangOptions().C99 && Literal.isLongLong) 2643 Diag(Tok.getLocation(), 2644 getLangOptions().CPlusPlus0x ? 2645 diag::warn_cxx98_compat_longlong : diag::ext_longlong); 2646 2647 // Get the value in the widest-possible width. 2648 llvm::APInt ResultVal(Context.getTargetInfo().getIntMaxTWidth(), 0); 2649 2650 if (Literal.GetIntegerValue(ResultVal)) { 2651 // If this value didn't fit into uintmax_t, warn and force to ull. 2652 Diag(Tok.getLocation(), diag::warn_integer_too_large); 2653 Ty = Context.UnsignedLongLongTy; 2654 assert(Context.getTypeSize(Ty) == ResultVal.getBitWidth() && 2655 "long long is not intmax_t?"); 2656 } else { 2657 // If this value fits into a ULL, try to figure out what else it fits into 2658 // according to the rules of C99 6.4.4.1p5. 2659 2660 // Octal, Hexadecimal, and integers with a U suffix are allowed to 2661 // be an unsigned int. 2662 bool AllowUnsigned = Literal.isUnsigned || Literal.getRadix() != 10; 2663 2664 // Check from smallest to largest, picking the smallest type we can. 2665 unsigned Width = 0; 2666 if (!Literal.isLong && !Literal.isLongLong) { 2667 // Are int/unsigned possibilities? 2668 unsigned IntSize = Context.getTargetInfo().getIntWidth(); 2669 2670 // Does it fit in a unsigned int? 2671 if (ResultVal.isIntN(IntSize)) { 2672 // Does it fit in a signed int? 2673 if (!Literal.isUnsigned && ResultVal[IntSize-1] == 0) 2674 Ty = Context.IntTy; 2675 else if (AllowUnsigned) 2676 Ty = Context.UnsignedIntTy; 2677 Width = IntSize; 2678 } 2679 } 2680 2681 // Are long/unsigned long possibilities? 2682 if (Ty.isNull() && !Literal.isLongLong) { 2683 unsigned LongSize = Context.getTargetInfo().getLongWidth(); 2684 2685 // Does it fit in a unsigned long? 2686 if (ResultVal.isIntN(LongSize)) { 2687 // Does it fit in a signed long? 2688 if (!Literal.isUnsigned && ResultVal[LongSize-1] == 0) 2689 Ty = Context.LongTy; 2690 else if (AllowUnsigned) 2691 Ty = Context.UnsignedLongTy; 2692 Width = LongSize; 2693 } 2694 } 2695 2696 // Finally, check long long if needed. 2697 if (Ty.isNull()) { 2698 unsigned LongLongSize = Context.getTargetInfo().getLongLongWidth(); 2699 2700 // Does it fit in a unsigned long long? 2701 if (ResultVal.isIntN(LongLongSize)) { 2702 // Does it fit in a signed long long? 2703 // To be compatible with MSVC, hex integer literals ending with the 2704 // LL or i64 suffix are always signed in Microsoft mode. 2705 if (!Literal.isUnsigned && (ResultVal[LongLongSize-1] == 0 || 2706 (getLangOptions().MicrosoftExt && Literal.isLongLong))) 2707 Ty = Context.LongLongTy; 2708 else if (AllowUnsigned) 2709 Ty = Context.UnsignedLongLongTy; 2710 Width = LongLongSize; 2711 } 2712 } 2713 2714 // If we still couldn't decide a type, we probably have something that 2715 // does not fit in a signed long long, but has no U suffix. 2716 if (Ty.isNull()) { 2717 Diag(Tok.getLocation(), diag::warn_integer_too_large_for_signed); 2718 Ty = Context.UnsignedLongLongTy; 2719 Width = Context.getTargetInfo().getLongLongWidth(); 2720 } 2721 2722 if (ResultVal.getBitWidth() != Width) 2723 ResultVal = ResultVal.trunc(Width); 2724 } 2725 Res = IntegerLiteral::Create(Context, ResultVal, Ty, Tok.getLocation()); 2726 } 2727 2728 // If this is an imaginary literal, create the ImaginaryLiteral wrapper. 2729 if (Literal.isImaginary) 2730 Res = new (Context) ImaginaryLiteral(Res, 2731 Context.getComplexType(Res->getType())); 2732 2733 return Owned(Res); 2734 } 2735 2736 ExprResult Sema::ActOnParenExpr(SourceLocation L, SourceLocation R, Expr *E) { 2737 assert((E != 0) && "ActOnParenExpr() missing expr"); 2738 return Owned(new (Context) ParenExpr(L, R, E)); 2739 } 2740 2741 static bool CheckVecStepTraitOperandType(Sema &S, QualType T, 2742 SourceLocation Loc, 2743 SourceRange ArgRange) { 2744 // [OpenCL 1.1 6.11.12] "The vec_step built-in function takes a built-in 2745 // scalar or vector data type argument..." 2746 // Every built-in scalar type (OpenCL 1.1 6.1.1) is either an arithmetic 2747 // type (C99 6.2.5p18) or void. 2748 if (!(T->isArithmeticType() || T->isVoidType() || T->isVectorType())) { 2749 S.Diag(Loc, diag::err_vecstep_non_scalar_vector_type) 2750 << T << ArgRange; 2751 return true; 2752 } 2753 2754 assert((T->isVoidType() || !T->isIncompleteType()) && 2755 "Scalar types should always be complete"); 2756 return false; 2757 } 2758 2759 static bool CheckExtensionTraitOperandType(Sema &S, QualType T, 2760 SourceLocation Loc, 2761 SourceRange ArgRange, 2762 UnaryExprOrTypeTrait TraitKind) { 2763 // C99 6.5.3.4p1: 2764 if (T->isFunctionType()) { 2765 // alignof(function) is allowed as an extension. 2766 if (TraitKind == UETT_SizeOf) 2767 S.Diag(Loc, diag::ext_sizeof_function_type) << ArgRange; 2768 return false; 2769 } 2770 2771 // Allow sizeof(void)/alignof(void) as an extension. 2772 if (T->isVoidType()) { 2773 S.Diag(Loc, diag::ext_sizeof_void_type) << TraitKind << ArgRange; 2774 return false; 2775 } 2776 2777 return true; 2778 } 2779 2780 static bool CheckObjCTraitOperandConstraints(Sema &S, QualType T, 2781 SourceLocation Loc, 2782 SourceRange ArgRange, 2783 UnaryExprOrTypeTrait TraitKind) { 2784 // Reject sizeof(interface) and sizeof(interface<proto>) in 64-bit mode. 2785 if (S.LangOpts.ObjCNonFragileABI && T->isObjCObjectType()) { 2786 S.Diag(Loc, diag::err_sizeof_nonfragile_interface) 2787 << T << (TraitKind == UETT_SizeOf) 2788 << ArgRange; 2789 return true; 2790 } 2791 2792 return false; 2793 } 2794 2795 /// \brief Check the constrains on expression operands to unary type expression 2796 /// and type traits. 2797 /// 2798 /// Completes any types necessary and validates the constraints on the operand 2799 /// expression. The logic mostly mirrors the type-based overload, but may modify 2800 /// the expression as it completes the type for that expression through template 2801 /// instantiation, etc. 2802 bool Sema::CheckUnaryExprOrTypeTraitOperand(Expr *E, 2803 UnaryExprOrTypeTrait ExprKind) { 2804 QualType ExprTy = E->getType(); 2805 2806 // C++ [expr.sizeof]p2: "When applied to a reference or a reference type, 2807 // the result is the size of the referenced type." 2808 // C++ [expr.alignof]p3: "When alignof is applied to a reference type, the 2809 // result shall be the alignment of the referenced type." 2810 if (const ReferenceType *Ref = ExprTy->getAs<ReferenceType>()) 2811 ExprTy = Ref->getPointeeType(); 2812 2813 if (ExprKind == UETT_VecStep) 2814 return CheckVecStepTraitOperandType(*this, ExprTy, E->getExprLoc(), 2815 E->getSourceRange()); 2816 2817 // Whitelist some types as extensions 2818 if (!CheckExtensionTraitOperandType(*this, ExprTy, E->getExprLoc(), 2819 E->getSourceRange(), ExprKind)) 2820 return false; 2821 2822 if (RequireCompleteExprType(E, 2823 PDiag(diag::err_sizeof_alignof_incomplete_type) 2824 << ExprKind << E->getSourceRange(), 2825 std::make_pair(SourceLocation(), PDiag(0)))) 2826 return true; 2827 2828 // Completeing the expression's type may have changed it. 2829 ExprTy = E->getType(); 2830 if (const ReferenceType *Ref = ExprTy->getAs<ReferenceType>()) 2831 ExprTy = Ref->getPointeeType(); 2832 2833 if (CheckObjCTraitOperandConstraints(*this, ExprTy, E->getExprLoc(), 2834 E->getSourceRange(), ExprKind)) 2835 return true; 2836 2837 if (ExprKind == UETT_SizeOf) { 2838 if (DeclRefExpr *DeclRef = dyn_cast<DeclRefExpr>(E->IgnoreParens())) { 2839 if (ParmVarDecl *PVD = dyn_cast<ParmVarDecl>(DeclRef->getFoundDecl())) { 2840 QualType OType = PVD->getOriginalType(); 2841 QualType Type = PVD->getType(); 2842 if (Type->isPointerType() && OType->isArrayType()) { 2843 Diag(E->getExprLoc(), diag::warn_sizeof_array_param) 2844 << Type << OType; 2845 Diag(PVD->getLocation(), diag::note_declared_at); 2846 } 2847 } 2848 } 2849 } 2850 2851 return false; 2852 } 2853 2854 /// \brief Check the constraints on operands to unary expression and type 2855 /// traits. 2856 /// 2857 /// This will complete any types necessary, and validate the various constraints 2858 /// on those operands. 2859 /// 2860 /// The UsualUnaryConversions() function is *not* called by this routine. 2861 /// C99 6.3.2.1p[2-4] all state: 2862 /// Except when it is the operand of the sizeof operator ... 2863 /// 2864 /// C++ [expr.sizeof]p4 2865 /// The lvalue-to-rvalue, array-to-pointer, and function-to-pointer 2866 /// standard conversions are not applied to the operand of sizeof. 2867 /// 2868 /// This policy is followed for all of the unary trait expressions. 2869 bool Sema::CheckUnaryExprOrTypeTraitOperand(QualType ExprType, 2870 SourceLocation OpLoc, 2871 SourceRange ExprRange, 2872 UnaryExprOrTypeTrait ExprKind) { 2873 if (ExprType->isDependentType()) 2874 return false; 2875 2876 // C++ [expr.sizeof]p2: "When applied to a reference or a reference type, 2877 // the result is the size of the referenced type." 2878 // C++ [expr.alignof]p3: "When alignof is applied to a reference type, the 2879 // result shall be the alignment of the referenced type." 2880 if (const ReferenceType *Ref = ExprType->getAs<ReferenceType>()) 2881 ExprType = Ref->getPointeeType(); 2882 2883 if (ExprKind == UETT_VecStep) 2884 return CheckVecStepTraitOperandType(*this, ExprType, OpLoc, ExprRange); 2885 2886 // Whitelist some types as extensions 2887 if (!CheckExtensionTraitOperandType(*this, ExprType, OpLoc, ExprRange, 2888 ExprKind)) 2889 return false; 2890 2891 if (RequireCompleteType(OpLoc, ExprType, 2892 PDiag(diag::err_sizeof_alignof_incomplete_type) 2893 << ExprKind << ExprRange)) 2894 return true; 2895 2896 if (CheckObjCTraitOperandConstraints(*this, ExprType, OpLoc, ExprRange, 2897 ExprKind)) 2898 return true; 2899 2900 return false; 2901 } 2902 2903 static bool CheckAlignOfExpr(Sema &S, Expr *E) { 2904 E = E->IgnoreParens(); 2905 2906 // alignof decl is always ok. 2907 if (isa<DeclRefExpr>(E)) 2908 return false; 2909 2910 // Cannot know anything else if the expression is dependent. 2911 if (E->isTypeDependent()) 2912 return false; 2913 2914 if (E->getBitField()) { 2915 S.Diag(E->getExprLoc(), diag::err_sizeof_alignof_bitfield) 2916 << 1 << E->getSourceRange(); 2917 return true; 2918 } 2919 2920 // Alignment of a field access is always okay, so long as it isn't a 2921 // bit-field. 2922 if (MemberExpr *ME = dyn_cast<MemberExpr>(E)) 2923 if (isa<FieldDecl>(ME->getMemberDecl())) 2924 return false; 2925 2926 return S.CheckUnaryExprOrTypeTraitOperand(E, UETT_AlignOf); 2927 } 2928 2929 bool Sema::CheckVecStepExpr(Expr *E) { 2930 E = E->IgnoreParens(); 2931 2932 // Cannot know anything else if the expression is dependent. 2933 if (E->isTypeDependent()) 2934 return false; 2935 2936 return CheckUnaryExprOrTypeTraitOperand(E, UETT_VecStep); 2937 } 2938 2939 /// \brief Build a sizeof or alignof expression given a type operand. 2940 ExprResult 2941 Sema::CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo, 2942 SourceLocation OpLoc, 2943 UnaryExprOrTypeTrait ExprKind, 2944 SourceRange R) { 2945 if (!TInfo) 2946 return ExprError(); 2947 2948 QualType T = TInfo->getType(); 2949 2950 if (!T->isDependentType() && 2951 CheckUnaryExprOrTypeTraitOperand(T, OpLoc, R, ExprKind)) 2952 return ExprError(); 2953 2954 // C99 6.5.3.4p4: the type (an unsigned integer type) is size_t. 2955 return Owned(new (Context) UnaryExprOrTypeTraitExpr(ExprKind, TInfo, 2956 Context.getSizeType(), 2957 OpLoc, R.getEnd())); 2958 } 2959 2960 /// \brief Build a sizeof or alignof expression given an expression 2961 /// operand. 2962 ExprResult 2963 Sema::CreateUnaryExprOrTypeTraitExpr(Expr *E, SourceLocation OpLoc, 2964 UnaryExprOrTypeTrait ExprKind) { 2965 ExprResult PE = CheckPlaceholderExpr(E); 2966 if (PE.isInvalid()) 2967 return ExprError(); 2968 2969 E = PE.get(); 2970 2971 // Verify that the operand is valid. 2972 bool isInvalid = false; 2973 if (E->isTypeDependent()) { 2974 // Delay type-checking for type-dependent expressions. 2975 } else if (ExprKind == UETT_AlignOf) { 2976 isInvalid = CheckAlignOfExpr(*this, E); 2977 } else if (ExprKind == UETT_VecStep) { 2978 isInvalid = CheckVecStepExpr(E); 2979 } else if (E->getBitField()) { // C99 6.5.3.4p1. 2980 Diag(E->getExprLoc(), diag::err_sizeof_alignof_bitfield) << 0; 2981 isInvalid = true; 2982 } else { 2983 isInvalid = CheckUnaryExprOrTypeTraitOperand(E, UETT_SizeOf); 2984 } 2985 2986 if (isInvalid) 2987 return ExprError(); 2988 2989 // C99 6.5.3.4p4: the type (an unsigned integer type) is size_t. 2990 return Owned(new (Context) UnaryExprOrTypeTraitExpr( 2991 ExprKind, E, Context.getSizeType(), OpLoc, 2992 E->getSourceRange().getEnd())); 2993 } 2994 2995 /// ActOnUnaryExprOrTypeTraitExpr - Handle @c sizeof(type) and @c sizeof @c 2996 /// expr and the same for @c alignof and @c __alignof 2997 /// Note that the ArgRange is invalid if isType is false. 2998 ExprResult 2999 Sema::ActOnUnaryExprOrTypeTraitExpr(SourceLocation OpLoc, 3000 UnaryExprOrTypeTrait ExprKind, bool IsType, 3001 void *TyOrEx, const SourceRange &ArgRange) { 3002 // If error parsing type, ignore. 3003 if (TyOrEx == 0) return ExprError(); 3004 3005 if (IsType) { 3006 TypeSourceInfo *TInfo; 3007 (void) GetTypeFromParser(ParsedType::getFromOpaquePtr(TyOrEx), &TInfo); 3008 return CreateUnaryExprOrTypeTraitExpr(TInfo, OpLoc, ExprKind, ArgRange); 3009 } 3010 3011 Expr *ArgEx = (Expr *)TyOrEx; 3012 ExprResult Result = CreateUnaryExprOrTypeTraitExpr(ArgEx, OpLoc, ExprKind); 3013 return move(Result); 3014 } 3015 3016 static QualType CheckRealImagOperand(Sema &S, ExprResult &V, SourceLocation Loc, 3017 bool IsReal) { 3018 if (V.get()->isTypeDependent()) 3019 return S.Context.DependentTy; 3020 3021 // _Real and _Imag are only l-values for normal l-values. 3022 if (V.get()->getObjectKind() != OK_Ordinary) { 3023 V = S.DefaultLvalueConversion(V.take()); 3024 if (V.isInvalid()) 3025 return QualType(); 3026 } 3027 3028 // These operators return the element type of a complex type. 3029 if (const ComplexType *CT = V.get()->getType()->getAs<ComplexType>()) 3030 return CT->getElementType(); 3031 3032 // Otherwise they pass through real integer and floating point types here. 3033 if (V.get()->getType()->isArithmeticType()) 3034 return V.get()->getType(); 3035 3036 // Test for placeholders. 3037 ExprResult PR = S.CheckPlaceholderExpr(V.get()); 3038 if (PR.isInvalid()) return QualType(); 3039 if (PR.get() != V.get()) { 3040 V = move(PR); 3041 return CheckRealImagOperand(S, V, Loc, IsReal); 3042 } 3043 3044 // Reject anything else. 3045 S.Diag(Loc, diag::err_realimag_invalid_type) << V.get()->getType() 3046 << (IsReal ? "__real" : "__imag"); 3047 return QualType(); 3048 } 3049 3050 3051 3052 ExprResult 3053 Sema::ActOnPostfixUnaryOp(Scope *S, SourceLocation OpLoc, 3054 tok::TokenKind Kind, Expr *Input) { 3055 UnaryOperatorKind Opc; 3056 switch (Kind) { 3057 default: llvm_unreachable("Unknown unary op!"); 3058 case tok::plusplus: Opc = UO_PostInc; break; 3059 case tok::minusminus: Opc = UO_PostDec; break; 3060 } 3061 3062 return BuildUnaryOp(S, OpLoc, Opc, Input); 3063 } 3064 3065 ExprResult 3066 Sema::ActOnArraySubscriptExpr(Scope *S, Expr *Base, SourceLocation LLoc, 3067 Expr *Idx, SourceLocation RLoc) { 3068 // Since this might be a postfix expression, get rid of ParenListExprs. 3069 ExprResult Result = MaybeConvertParenListExprToParenExpr(S, Base); 3070 if (Result.isInvalid()) return ExprError(); 3071 Base = Result.take(); 3072 3073 Expr *LHSExp = Base, *RHSExp = Idx; 3074 3075 if (getLangOptions().CPlusPlus && 3076 (LHSExp->isTypeDependent() || RHSExp->isTypeDependent())) { 3077 return Owned(new (Context) ArraySubscriptExpr(LHSExp, RHSExp, 3078 Context.DependentTy, 3079 VK_LValue, OK_Ordinary, 3080 RLoc)); 3081 } 3082 3083 if (getLangOptions().CPlusPlus && 3084 (LHSExp->getType()->isRecordType() || 3085 LHSExp->getType()->isEnumeralType() || 3086 RHSExp->getType()->isRecordType() || 3087 RHSExp->getType()->isEnumeralType())) { 3088 return CreateOverloadedArraySubscriptExpr(LLoc, RLoc, Base, Idx); 3089 } 3090 3091 return CreateBuiltinArraySubscriptExpr(Base, LLoc, Idx, RLoc); 3092 } 3093 3094 3095 ExprResult 3096 Sema::CreateBuiltinArraySubscriptExpr(Expr *Base, SourceLocation LLoc, 3097 Expr *Idx, SourceLocation RLoc) { 3098 Expr *LHSExp = Base; 3099 Expr *RHSExp = Idx; 3100 3101 // Perform default conversions. 3102 if (!LHSExp->getType()->getAs<VectorType>()) { 3103 ExprResult Result = DefaultFunctionArrayLvalueConversion(LHSExp); 3104 if (Result.isInvalid()) 3105 return ExprError(); 3106 LHSExp = Result.take(); 3107 } 3108 ExprResult Result = DefaultFunctionArrayLvalueConversion(RHSExp); 3109 if (Result.isInvalid()) 3110 return ExprError(); 3111 RHSExp = Result.take(); 3112 3113 QualType LHSTy = LHSExp->getType(), RHSTy = RHSExp->getType(); 3114 ExprValueKind VK = VK_LValue; 3115 ExprObjectKind OK = OK_Ordinary; 3116 3117 // C99 6.5.2.1p2: the expression e1[e2] is by definition precisely equivalent 3118 // to the expression *((e1)+(e2)). This means the array "Base" may actually be 3119 // in the subscript position. As a result, we need to derive the array base 3120 // and index from the expression types. 3121 Expr *BaseExpr, *IndexExpr; 3122 QualType ResultType; 3123 if (LHSTy->isDependentType() || RHSTy->isDependentType()) { 3124 BaseExpr = LHSExp; 3125 IndexExpr = RHSExp; 3126 ResultType = Context.DependentTy; 3127 } else if (const PointerType *PTy = LHSTy->getAs<PointerType>()) { 3128 BaseExpr = LHSExp; 3129 IndexExpr = RHSExp; 3130 ResultType = PTy->getPointeeType(); 3131 } else if (const PointerType *PTy = RHSTy->getAs<PointerType>()) { 3132 // Handle the uncommon case of "123[Ptr]". 3133 BaseExpr = RHSExp; 3134 IndexExpr = LHSExp; 3135 ResultType = PTy->getPointeeType(); 3136 } else if (const ObjCObjectPointerType *PTy = 3137 LHSTy->getAs<ObjCObjectPointerType>()) { 3138 BaseExpr = LHSExp; 3139 IndexExpr = RHSExp; 3140 ResultType = PTy->getPointeeType(); 3141 } else if (const ObjCObjectPointerType *PTy = 3142 RHSTy->getAs<ObjCObjectPointerType>()) { 3143 // Handle the uncommon case of "123[Ptr]". 3144 BaseExpr = RHSExp; 3145 IndexExpr = LHSExp; 3146 ResultType = PTy->getPointeeType(); 3147 } else if (const VectorType *VTy = LHSTy->getAs<VectorType>()) { 3148 BaseExpr = LHSExp; // vectors: V[123] 3149 IndexExpr = RHSExp; 3150 VK = LHSExp->getValueKind(); 3151 if (VK != VK_RValue) 3152 OK = OK_VectorComponent; 3153 3154 // FIXME: need to deal with const... 3155 ResultType = VTy->getElementType(); 3156 } else if (LHSTy->isArrayType()) { 3157 // If we see an array that wasn't promoted by 3158 // DefaultFunctionArrayLvalueConversion, it must be an array that 3159 // wasn't promoted because of the C90 rule that doesn't 3160 // allow promoting non-lvalue arrays. Warn, then 3161 // force the promotion here. 3162 Diag(LHSExp->getLocStart(), diag::ext_subscript_non_lvalue) << 3163 LHSExp->getSourceRange(); 3164 LHSExp = ImpCastExprToType(LHSExp, Context.getArrayDecayedType(LHSTy), 3165 CK_ArrayToPointerDecay).take(); 3166 LHSTy = LHSExp->getType(); 3167 3168 BaseExpr = LHSExp; 3169 IndexExpr = RHSExp; 3170 ResultType = LHSTy->getAs<PointerType>()->getPointeeType(); 3171 } else if (RHSTy->isArrayType()) { 3172 // Same as previous, except for 123[f().a] case 3173 Diag(RHSExp->getLocStart(), diag::ext_subscript_non_lvalue) << 3174 RHSExp->getSourceRange(); 3175 RHSExp = ImpCastExprToType(RHSExp, Context.getArrayDecayedType(RHSTy), 3176 CK_ArrayToPointerDecay).take(); 3177 RHSTy = RHSExp->getType(); 3178 3179 BaseExpr = RHSExp; 3180 IndexExpr = LHSExp; 3181 ResultType = RHSTy->getAs<PointerType>()->getPointeeType(); 3182 } else { 3183 return ExprError(Diag(LLoc, diag::err_typecheck_subscript_value) 3184 << LHSExp->getSourceRange() << RHSExp->getSourceRange()); 3185 } 3186 // C99 6.5.2.1p1 3187 if (!IndexExpr->getType()->isIntegerType() && !IndexExpr->isTypeDependent()) 3188 return ExprError(Diag(LLoc, diag::err_typecheck_subscript_not_integer) 3189 << IndexExpr->getSourceRange()); 3190 3191 if ((IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_S) || 3192 IndexExpr->getType()->isSpecificBuiltinType(BuiltinType::Char_U)) 3193 && !IndexExpr->isTypeDependent()) 3194 Diag(LLoc, diag::warn_subscript_is_char) << IndexExpr->getSourceRange(); 3195 3196 // C99 6.5.2.1p1: "shall have type "pointer to *object* type". Similarly, 3197 // C++ [expr.sub]p1: The type "T" shall be a completely-defined object 3198 // type. Note that Functions are not objects, and that (in C99 parlance) 3199 // incomplete types are not object types. 3200 if (ResultType->isFunctionType()) { 3201 Diag(BaseExpr->getLocStart(), diag::err_subscript_function_type) 3202 << ResultType << BaseExpr->getSourceRange(); 3203 return ExprError(); 3204 } 3205 3206 if (ResultType->isVoidType() && !getLangOptions().CPlusPlus) { 3207 // GNU extension: subscripting on pointer to void 3208 Diag(LLoc, diag::ext_gnu_subscript_void_type) 3209 << BaseExpr->getSourceRange(); 3210 3211 // C forbids expressions of unqualified void type from being l-values. 3212 // See IsCForbiddenLValueType. 3213 if (!ResultType.hasQualifiers()) VK = VK_RValue; 3214 } else if (!ResultType->isDependentType() && 3215 RequireCompleteType(LLoc, ResultType, 3216 PDiag(diag::err_subscript_incomplete_type) 3217 << BaseExpr->getSourceRange())) 3218 return ExprError(); 3219 3220 // Diagnose bad cases where we step over interface counts. 3221 if (ResultType->isObjCObjectType() && LangOpts.ObjCNonFragileABI) { 3222 Diag(LLoc, diag::err_subscript_nonfragile_interface) 3223 << ResultType << BaseExpr->getSourceRange(); 3224 return ExprError(); 3225 } 3226 3227 assert(VK == VK_RValue || LangOpts.CPlusPlus || 3228 !ResultType.isCForbiddenLValueType()); 3229 3230 return Owned(new (Context) ArraySubscriptExpr(LHSExp, RHSExp, 3231 ResultType, VK, OK, RLoc)); 3232 } 3233 3234 ExprResult Sema::BuildCXXDefaultArgExpr(SourceLocation CallLoc, 3235 FunctionDecl *FD, 3236 ParmVarDecl *Param) { 3237 if (Param->hasUnparsedDefaultArg()) { 3238 Diag(CallLoc, 3239 diag::err_use_of_default_argument_to_function_declared_later) << 3240 FD << cast<CXXRecordDecl>(FD->getDeclContext())->getDeclName(); 3241 Diag(UnparsedDefaultArgLocs[Param], 3242 diag::note_default_argument_declared_here); 3243 return ExprError(); 3244 } 3245 3246 if (Param->hasUninstantiatedDefaultArg()) { 3247 Expr *UninstExpr = Param->getUninstantiatedDefaultArg(); 3248 3249 // Instantiate the expression. 3250 MultiLevelTemplateArgumentList ArgList 3251 = getTemplateInstantiationArgs(FD, 0, /*RelativeToPrimary=*/true); 3252 3253 std::pair<const TemplateArgument *, unsigned> Innermost 3254 = ArgList.getInnermost(); 3255 InstantiatingTemplate Inst(*this, CallLoc, Param, Innermost.first, 3256 Innermost.second); 3257 3258 ExprResult Result; 3259 { 3260 // C++ [dcl.fct.default]p5: 3261 // The names in the [default argument] expression are bound, and 3262 // the semantic constraints are checked, at the point where the 3263 // default argument expression appears. 3264 ContextRAII SavedContext(*this, FD); 3265 Result = SubstExpr(UninstExpr, ArgList); 3266 } 3267 if (Result.isInvalid()) 3268 return ExprError(); 3269 3270 // Check the expression as an initializer for the parameter. 3271 InitializedEntity Entity 3272 = InitializedEntity::InitializeParameter(Context, Param); 3273 InitializationKind Kind 3274 = InitializationKind::CreateCopy(Param->getLocation(), 3275 /*FIXME:EqualLoc*/UninstExpr->getSourceRange().getBegin()); 3276 Expr *ResultE = Result.takeAs<Expr>(); 3277 3278 InitializationSequence InitSeq(*this, Entity, Kind, &ResultE, 1); 3279 Result = InitSeq.Perform(*this, Entity, Kind, 3280 MultiExprArg(*this, &ResultE, 1)); 3281 if (Result.isInvalid()) 3282 return ExprError(); 3283 3284 // Build the default argument expression. 3285 return Owned(CXXDefaultArgExpr::Create(Context, CallLoc, Param, 3286 Result.takeAs<Expr>())); 3287 } 3288 3289 // If the default expression creates temporaries, we need to 3290 // push them to the current stack of expression temporaries so they'll 3291 // be properly destroyed. 3292 // FIXME: We should really be rebuilding the default argument with new 3293 // bound temporaries; see the comment in PR5810. 3294 // We don't need to do that with block decls, though, because 3295 // blocks in default argument expression can never capture anything. 3296 if (isa<ExprWithCleanups>(Param->getInit())) { 3297 // Set the "needs cleanups" bit regardless of whether there are 3298 // any explicit objects. 3299 ExprNeedsCleanups = true; 3300 3301 // Append all the objects to the cleanup list. Right now, this 3302 // should always be a no-op, because blocks in default argument 3303 // expressions should never be able to capture anything. 3304 assert(!cast<ExprWithCleanups>(Param->getInit())->getNumObjects() && 3305 "default argument expression has capturing blocks?"); 3306 } 3307 3308 // We already type-checked the argument, so we know it works. 3309 // Just mark all of the declarations in this potentially-evaluated expression 3310 // as being "referenced". 3311 MarkDeclarationsReferencedInExpr(Param->getDefaultArg()); 3312 return Owned(CXXDefaultArgExpr::Create(Context, CallLoc, Param)); 3313 } 3314 3315 /// ConvertArgumentsForCall - Converts the arguments specified in 3316 /// Args/NumArgs to the parameter types of the function FDecl with 3317 /// function prototype Proto. Call is the call expression itself, and 3318 /// Fn is the function expression. For a C++ member function, this 3319 /// routine does not attempt to convert the object argument. Returns 3320 /// true if the call is ill-formed. 3321 bool 3322 Sema::ConvertArgumentsForCall(CallExpr *Call, Expr *Fn, 3323 FunctionDecl *FDecl, 3324 const FunctionProtoType *Proto, 3325 Expr **Args, unsigned NumArgs, 3326 SourceLocation RParenLoc, 3327 bool IsExecConfig) { 3328 // Bail out early if calling a builtin with custom typechecking. 3329 // We don't need to do this in the 3330 if (FDecl) 3331 if (unsigned ID = FDecl->getBuiltinID()) 3332 if (Context.BuiltinInfo.hasCustomTypechecking(ID)) 3333 return false; 3334 3335 // C99 6.5.2.2p7 - the arguments are implicitly converted, as if by 3336 // assignment, to the types of the corresponding parameter, ... 3337 unsigned NumArgsInProto = Proto->getNumArgs(); 3338 bool Invalid = false; 3339 unsigned MinArgs = FDecl ? FDecl->getMinRequiredArguments() : NumArgsInProto; 3340 unsigned FnKind = Fn->getType()->isBlockPointerType() 3341 ? 1 /* block */ 3342 : (IsExecConfig ? 3 /* kernel function (exec config) */ 3343 : 0 /* function */); 3344 3345 // If too few arguments are available (and we don't have default 3346 // arguments for the remaining parameters), don't make the call. 3347 if (NumArgs < NumArgsInProto) { 3348 if (NumArgs < MinArgs) { 3349 Diag(RParenLoc, MinArgs == NumArgsInProto 3350 ? diag::err_typecheck_call_too_few_args 3351 : diag::err_typecheck_call_too_few_args_at_least) 3352 << FnKind 3353 << MinArgs << NumArgs << Fn->getSourceRange(); 3354 3355 // Emit the location of the prototype. 3356 if (FDecl && !FDecl->getBuiltinID() && !IsExecConfig) 3357 Diag(FDecl->getLocStart(), diag::note_callee_decl) 3358 << FDecl; 3359 3360 return true; 3361 } 3362 Call->setNumArgs(Context, NumArgsInProto); 3363 } 3364 3365 // If too many are passed and not variadic, error on the extras and drop 3366 // them. 3367 if (NumArgs > NumArgsInProto) { 3368 if (!Proto->isVariadic()) { 3369 Diag(Args[NumArgsInProto]->getLocStart(), 3370 MinArgs == NumArgsInProto 3371 ? diag::err_typecheck_call_too_many_args 3372 : diag::err_typecheck_call_too_many_args_at_most) 3373 << FnKind 3374 << NumArgsInProto << NumArgs << Fn->getSourceRange() 3375 << SourceRange(Args[NumArgsInProto]->getLocStart(), 3376 Args[NumArgs-1]->getLocEnd()); 3377 3378 // Emit the location of the prototype. 3379 if (FDecl && !FDecl->getBuiltinID() && !IsExecConfig) 3380 Diag(FDecl->getLocStart(), diag::note_callee_decl) 3381 << FDecl; 3382 3383 // This deletes the extra arguments. 3384 Call->setNumArgs(Context, NumArgsInProto); 3385 return true; 3386 } 3387 } 3388 SmallVector<Expr *, 8> AllArgs; 3389 VariadicCallType CallType = 3390 Proto->isVariadic() ? VariadicFunction : VariadicDoesNotApply; 3391 if (Fn->getType()->isBlockPointerType()) 3392 CallType = VariadicBlock; // Block 3393 else if (isa<MemberExpr>(Fn)) 3394 CallType = VariadicMethod; 3395 Invalid = GatherArgumentsForCall(Call->getSourceRange().getBegin(), FDecl, 3396 Proto, 0, Args, NumArgs, AllArgs, CallType); 3397 if (Invalid) 3398 return true; 3399 unsigned TotalNumArgs = AllArgs.size(); 3400 for (unsigned i = 0; i < TotalNumArgs; ++i) 3401 Call->setArg(i, AllArgs[i]); 3402 3403 return false; 3404 } 3405 3406 bool Sema::GatherArgumentsForCall(SourceLocation CallLoc, 3407 FunctionDecl *FDecl, 3408 const FunctionProtoType *Proto, 3409 unsigned FirstProtoArg, 3410 Expr **Args, unsigned NumArgs, 3411 SmallVector<Expr *, 8> &AllArgs, 3412 VariadicCallType CallType) { 3413 unsigned NumArgsInProto = Proto->getNumArgs(); 3414 unsigned NumArgsToCheck = NumArgs; 3415 bool Invalid = false; 3416 if (NumArgs != NumArgsInProto) 3417 // Use default arguments for missing arguments 3418 NumArgsToCheck = NumArgsInProto; 3419 unsigned ArgIx = 0; 3420 // Continue to check argument types (even if we have too few/many args). 3421 for (unsigned i = FirstProtoArg; i != NumArgsToCheck; i++) { 3422 QualType ProtoArgType = Proto->getArgType(i); 3423 3424 Expr *Arg; 3425 ParmVarDecl *Param; 3426 if (ArgIx < NumArgs) { 3427 Arg = Args[ArgIx++]; 3428 3429 if (RequireCompleteType(Arg->getSourceRange().getBegin(), 3430 ProtoArgType, 3431 PDiag(diag::err_call_incomplete_argument) 3432 << Arg->getSourceRange())) 3433 return true; 3434 3435 // Pass the argument 3436 Param = 0; 3437 if (FDecl && i < FDecl->getNumParams()) 3438 Param = FDecl->getParamDecl(i); 3439 3440 // Strip the unbridged-cast placeholder expression off, if applicable. 3441 if (Arg->getType() == Context.ARCUnbridgedCastTy && 3442 FDecl && FDecl->hasAttr<CFAuditedTransferAttr>() && 3443 (!Param || !Param->hasAttr<CFConsumedAttr>())) 3444 Arg = stripARCUnbridgedCast(Arg); 3445 3446 InitializedEntity Entity = 3447 Param? InitializedEntity::InitializeParameter(Context, Param) 3448 : InitializedEntity::InitializeParameter(Context, ProtoArgType, 3449 Proto->isArgConsumed(i)); 3450 ExprResult ArgE = PerformCopyInitialization(Entity, 3451 SourceLocation(), 3452 Owned(Arg)); 3453 if (ArgE.isInvalid()) 3454 return true; 3455 3456 Arg = ArgE.takeAs<Expr>(); 3457 } else { 3458 Param = FDecl->getParamDecl(i); 3459 3460 ExprResult ArgExpr = 3461 BuildCXXDefaultArgExpr(CallLoc, FDecl, Param); 3462 if (ArgExpr.isInvalid()) 3463 return true; 3464 3465 Arg = ArgExpr.takeAs<Expr>(); 3466 } 3467 3468 // Check for array bounds violations for each argument to the call. This 3469 // check only triggers warnings when the argument isn't a more complex Expr 3470 // with its own checking, such as a BinaryOperator. 3471 CheckArrayAccess(Arg); 3472 3473 // Check for violations of C99 static array rules (C99 6.7.5.3p7). 3474 CheckStaticArrayArgument(CallLoc, Param, Arg); 3475 3476 AllArgs.push_back(Arg); 3477 } 3478 3479 // If this is a variadic call, handle args passed through "...". 3480 if (CallType != VariadicDoesNotApply) { 3481 3482 // Assume that extern "C" functions with variadic arguments that 3483 // return __unknown_anytype aren't *really* variadic. 3484 if (Proto->getResultType() == Context.UnknownAnyTy && 3485 FDecl && FDecl->isExternC()) { 3486 for (unsigned i = ArgIx; i != NumArgs; ++i) { 3487 ExprResult arg; 3488 if (isa<ExplicitCastExpr>(Args[i]->IgnoreParens())) 3489 arg = DefaultFunctionArrayLvalueConversion(Args[i]); 3490 else 3491 arg = DefaultVariadicArgumentPromotion(Args[i], CallType, FDecl); 3492 Invalid |= arg.isInvalid(); 3493 AllArgs.push_back(arg.take()); 3494 } 3495 3496 // Otherwise do argument promotion, (C99 6.5.2.2p7). 3497 } else { 3498 for (unsigned i = ArgIx; i != NumArgs; ++i) { 3499 ExprResult Arg = DefaultVariadicArgumentPromotion(Args[i], CallType, 3500 FDecl); 3501 Invalid |= Arg.isInvalid(); 3502 AllArgs.push_back(Arg.take()); 3503 } 3504 } 3505 3506 // Check for array bounds violations. 3507 for (unsigned i = ArgIx; i != NumArgs; ++i) 3508 CheckArrayAccess(Args[i]); 3509 } 3510 return Invalid; 3511 } 3512 3513 static void DiagnoseCalleeStaticArrayParam(Sema &S, ParmVarDecl *PVD) { 3514 TypeLoc TL = PVD->getTypeSourceInfo()->getTypeLoc(); 3515 if (ArrayTypeLoc *ATL = dyn_cast<ArrayTypeLoc>(&TL)) 3516 S.Diag(PVD->getLocation(), diag::note_callee_static_array) 3517 << ATL->getLocalSourceRange(); 3518 } 3519 3520 /// CheckStaticArrayArgument - If the given argument corresponds to a static 3521 /// array parameter, check that it is non-null, and that if it is formed by 3522 /// array-to-pointer decay, the underlying array is sufficiently large. 3523 /// 3524 /// C99 6.7.5.3p7: If the keyword static also appears within the [ and ] of the 3525 /// array type derivation, then for each call to the function, the value of the 3526 /// corresponding actual argument shall provide access to the first element of 3527 /// an array with at least as many elements as specified by the size expression. 3528 void 3529 Sema::CheckStaticArrayArgument(SourceLocation CallLoc, 3530 ParmVarDecl *Param, 3531 const Expr *ArgExpr) { 3532 // Static array parameters are not supported in C++. 3533 if (!Param || getLangOptions().CPlusPlus) 3534 return; 3535 3536 QualType OrigTy = Param->getOriginalType(); 3537 3538 const ArrayType *AT = Context.getAsArrayType(OrigTy); 3539 if (!AT || AT->getSizeModifier() != ArrayType::Static) 3540 return; 3541 3542 if (ArgExpr->isNullPointerConstant(Context, 3543 Expr::NPC_NeverValueDependent)) { 3544 Diag(CallLoc, diag::warn_null_arg) << ArgExpr->getSourceRange(); 3545 DiagnoseCalleeStaticArrayParam(*this, Param); 3546 return; 3547 } 3548 3549 const ConstantArrayType *CAT = dyn_cast<ConstantArrayType>(AT); 3550 if (!CAT) 3551 return; 3552 3553 const ConstantArrayType *ArgCAT = 3554 Context.getAsConstantArrayType(ArgExpr->IgnoreParenImpCasts()->getType()); 3555 if (!ArgCAT) 3556 return; 3557 3558 if (ArgCAT->getSize().ult(CAT->getSize())) { 3559 Diag(CallLoc, diag::warn_static_array_too_small) 3560 << ArgExpr->getSourceRange() 3561 << (unsigned) ArgCAT->getSize().getZExtValue() 3562 << (unsigned) CAT->getSize().getZExtValue(); 3563 DiagnoseCalleeStaticArrayParam(*this, Param); 3564 } 3565 } 3566 3567 /// Given a function expression of unknown-any type, try to rebuild it 3568 /// to have a function type. 3569 static ExprResult rebuildUnknownAnyFunction(Sema &S, Expr *fn); 3570 3571 /// ActOnCallExpr - Handle a call to Fn with the specified array of arguments. 3572 /// This provides the location of the left/right parens and a list of comma 3573 /// locations. 3574 ExprResult 3575 Sema::ActOnCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc, 3576 MultiExprArg ArgExprs, SourceLocation RParenLoc, 3577 Expr *ExecConfig, bool IsExecConfig) { 3578 unsigned NumArgs = ArgExprs.size(); 3579 3580 // Since this might be a postfix expression, get rid of ParenListExprs. 3581 ExprResult Result = MaybeConvertParenListExprToParenExpr(S, Fn); 3582 if (Result.isInvalid()) return ExprError(); 3583 Fn = Result.take(); 3584 3585 Expr **Args = ArgExprs.release(); 3586 3587 if (getLangOptions().CPlusPlus) { 3588 // If this is a pseudo-destructor expression, build the call immediately. 3589 if (isa<CXXPseudoDestructorExpr>(Fn)) { 3590 if (NumArgs > 0) { 3591 // Pseudo-destructor calls should not have any arguments. 3592 Diag(Fn->getLocStart(), diag::err_pseudo_dtor_call_with_args) 3593 << FixItHint::CreateRemoval( 3594 SourceRange(Args[0]->getLocStart(), 3595 Args[NumArgs-1]->getLocEnd())); 3596 3597 NumArgs = 0; 3598 } 3599 3600 return Owned(new (Context) CallExpr(Context, Fn, 0, 0, Context.VoidTy, 3601 VK_RValue, RParenLoc)); 3602 } 3603 3604 // Determine whether this is a dependent call inside a C++ template, 3605 // in which case we won't do any semantic analysis now. 3606 // FIXME: Will need to cache the results of name lookup (including ADL) in 3607 // Fn. 3608 bool Dependent = false; 3609 if (Fn->isTypeDependent()) 3610 Dependent = true; 3611 else if (Expr::hasAnyTypeDependentArguments(Args, NumArgs)) 3612 Dependent = true; 3613 3614 if (Dependent) { 3615 if (ExecConfig) { 3616 return Owned(new (Context) CUDAKernelCallExpr( 3617 Context, Fn, cast<CallExpr>(ExecConfig), Args, NumArgs, 3618 Context.DependentTy, VK_RValue, RParenLoc)); 3619 } else { 3620 return Owned(new (Context) CallExpr(Context, Fn, Args, NumArgs, 3621 Context.DependentTy, VK_RValue, 3622 RParenLoc)); 3623 } 3624 } 3625 3626 // Determine whether this is a call to an object (C++ [over.call.object]). 3627 if (Fn->getType()->isRecordType()) 3628 return Owned(BuildCallToObjectOfClassType(S, Fn, LParenLoc, Args, NumArgs, 3629 RParenLoc)); 3630 3631 if (Fn->getType() == Context.UnknownAnyTy) { 3632 ExprResult result = rebuildUnknownAnyFunction(*this, Fn); 3633 if (result.isInvalid()) return ExprError(); 3634 Fn = result.take(); 3635 } 3636 3637 if (Fn->getType() == Context.BoundMemberTy) { 3638 return BuildCallToMemberFunction(S, Fn, LParenLoc, Args, NumArgs, 3639 RParenLoc); 3640 } 3641 } 3642 3643 // Check for overloaded calls. This can happen even in C due to extensions. 3644 if (Fn->getType() == Context.OverloadTy) { 3645 OverloadExpr::FindResult find = OverloadExpr::find(Fn); 3646 3647 // We aren't supposed to apply this logic for if there's an '&' involved. 3648 if (!find.HasFormOfMemberPointer) { 3649 OverloadExpr *ovl = find.Expression; 3650 if (isa<UnresolvedLookupExpr>(ovl)) { 3651 UnresolvedLookupExpr *ULE = cast<UnresolvedLookupExpr>(ovl); 3652 return BuildOverloadedCallExpr(S, Fn, ULE, LParenLoc, Args, NumArgs, 3653 RParenLoc, ExecConfig); 3654 } else { 3655 return BuildCallToMemberFunction(S, Fn, LParenLoc, Args, NumArgs, 3656 RParenLoc); 3657 } 3658 } 3659 } 3660 3661 // If we're directly calling a function, get the appropriate declaration. 3662 3663 Expr *NakedFn = Fn->IgnoreParens(); 3664 3665 NamedDecl *NDecl = 0; 3666 if (UnaryOperator *UnOp = dyn_cast<UnaryOperator>(NakedFn)) 3667 if (UnOp->getOpcode() == UO_AddrOf) 3668 NakedFn = UnOp->getSubExpr()->IgnoreParens(); 3669 3670 if (isa<DeclRefExpr>(NakedFn)) 3671 NDecl = cast<DeclRefExpr>(NakedFn)->getDecl(); 3672 else if (isa<MemberExpr>(NakedFn)) 3673 NDecl = cast<MemberExpr>(NakedFn)->getMemberDecl(); 3674 3675 return BuildResolvedCallExpr(Fn, NDecl, LParenLoc, Args, NumArgs, RParenLoc, 3676 ExecConfig, IsExecConfig); 3677 } 3678 3679 ExprResult 3680 Sema::ActOnCUDAExecConfigExpr(Scope *S, SourceLocation LLLLoc, 3681 MultiExprArg ExecConfig, SourceLocation GGGLoc) { 3682 FunctionDecl *ConfigDecl = Context.getcudaConfigureCallDecl(); 3683 if (!ConfigDecl) 3684 return ExprError(Diag(LLLLoc, diag::err_undeclared_var_use) 3685 << "cudaConfigureCall"); 3686 QualType ConfigQTy = ConfigDecl->getType(); 3687 3688 DeclRefExpr *ConfigDR = new (Context) DeclRefExpr( 3689 ConfigDecl, ConfigQTy, VK_LValue, LLLLoc); 3690 3691 return ActOnCallExpr(S, ConfigDR, LLLLoc, ExecConfig, GGGLoc, 0, 3692 /*IsExecConfig=*/true); 3693 } 3694 3695 /// ActOnAsTypeExpr - create a new asType (bitcast) from the arguments. 3696 /// 3697 /// __builtin_astype( value, dst type ) 3698 /// 3699 ExprResult Sema::ActOnAsTypeExpr(Expr *E, ParsedType ParsedDestTy, 3700 SourceLocation BuiltinLoc, 3701 SourceLocation RParenLoc) { 3702 ExprValueKind VK = VK_RValue; 3703 ExprObjectKind OK = OK_Ordinary; 3704 QualType DstTy = GetTypeFromParser(ParsedDestTy); 3705 QualType SrcTy = E->getType(); 3706 if (Context.getTypeSize(DstTy) != Context.getTypeSize(SrcTy)) 3707 return ExprError(Diag(BuiltinLoc, 3708 diag::err_invalid_astype_of_different_size) 3709 << DstTy 3710 << SrcTy 3711 << E->getSourceRange()); 3712 return Owned(new (Context) AsTypeExpr(E, DstTy, VK, OK, BuiltinLoc, 3713 RParenLoc)); 3714 } 3715 3716 /// BuildResolvedCallExpr - Build a call to a resolved expression, 3717 /// i.e. an expression not of \p OverloadTy. The expression should 3718 /// unary-convert to an expression of function-pointer or 3719 /// block-pointer type. 3720 /// 3721 /// \param NDecl the declaration being called, if available 3722 ExprResult 3723 Sema::BuildResolvedCallExpr(Expr *Fn, NamedDecl *NDecl, 3724 SourceLocation LParenLoc, 3725 Expr **Args, unsigned NumArgs, 3726 SourceLocation RParenLoc, 3727 Expr *Config, bool IsExecConfig) { 3728 FunctionDecl *FDecl = dyn_cast_or_null<FunctionDecl>(NDecl); 3729 3730 // Promote the function operand. 3731 ExprResult Result = UsualUnaryConversions(Fn); 3732 if (Result.isInvalid()) 3733 return ExprError(); 3734 Fn = Result.take(); 3735 3736 // Make the call expr early, before semantic checks. This guarantees cleanup 3737 // of arguments and function on error. 3738 CallExpr *TheCall; 3739 if (Config) { 3740 TheCall = new (Context) CUDAKernelCallExpr(Context, Fn, 3741 cast<CallExpr>(Config), 3742 Args, NumArgs, 3743 Context.BoolTy, 3744 VK_RValue, 3745 RParenLoc); 3746 } else { 3747 TheCall = new (Context) CallExpr(Context, Fn, 3748 Args, NumArgs, 3749 Context.BoolTy, 3750 VK_RValue, 3751 RParenLoc); 3752 } 3753 3754 unsigned BuiltinID = (FDecl ? FDecl->getBuiltinID() : 0); 3755 3756 // Bail out early if calling a builtin with custom typechecking. 3757 if (BuiltinID && Context.BuiltinInfo.hasCustomTypechecking(BuiltinID)) 3758 return CheckBuiltinFunctionCall(BuiltinID, TheCall); 3759 3760 retry: 3761 const FunctionType *FuncT; 3762 if (const PointerType *PT = Fn->getType()->getAs<PointerType>()) { 3763 // C99 6.5.2.2p1 - "The expression that denotes the called function shall 3764 // have type pointer to function". 3765 FuncT = PT->getPointeeType()->getAs<FunctionType>(); 3766 if (FuncT == 0) 3767 return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) 3768 << Fn->getType() << Fn->getSourceRange()); 3769 } else if (const BlockPointerType *BPT = 3770 Fn->getType()->getAs<BlockPointerType>()) { 3771 FuncT = BPT->getPointeeType()->castAs<FunctionType>(); 3772 } else { 3773 // Handle calls to expressions of unknown-any type. 3774 if (Fn->getType() == Context.UnknownAnyTy) { 3775 ExprResult rewrite = rebuildUnknownAnyFunction(*this, Fn); 3776 if (rewrite.isInvalid()) return ExprError(); 3777 Fn = rewrite.take(); 3778 TheCall->setCallee(Fn); 3779 goto retry; 3780 } 3781 3782 return ExprError(Diag(LParenLoc, diag::err_typecheck_call_not_function) 3783 << Fn->getType() << Fn->getSourceRange()); 3784 } 3785 3786 if (getLangOptions().CUDA) { 3787 if (Config) { 3788 // CUDA: Kernel calls must be to global functions 3789 if (FDecl && !FDecl->hasAttr<CUDAGlobalAttr>()) 3790 return ExprError(Diag(LParenLoc,diag::err_kern_call_not_global_function) 3791 << FDecl->getName() << Fn->getSourceRange()); 3792 3793 // CUDA: Kernel function must have 'void' return type 3794 if (!FuncT->getResultType()->isVoidType()) 3795 return ExprError(Diag(LParenLoc, diag::err_kern_type_not_void_return) 3796 << Fn->getType() << Fn->getSourceRange()); 3797 } else { 3798 // CUDA: Calls to global functions must be configured 3799 if (FDecl && FDecl->hasAttr<CUDAGlobalAttr>()) 3800 return ExprError(Diag(LParenLoc, diag::err_global_call_not_config) 3801 << FDecl->getName() << Fn->getSourceRange()); 3802 } 3803 } 3804 3805 // Check for a valid return type 3806 if (CheckCallReturnType(FuncT->getResultType(), 3807 Fn->getSourceRange().getBegin(), TheCall, 3808 FDecl)) 3809 return ExprError(); 3810 3811 // We know the result type of the call, set it. 3812 TheCall->setType(FuncT->getCallResultType(Context)); 3813 TheCall->setValueKind(Expr::getValueKindForType(FuncT->getResultType())); 3814 3815 if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FuncT)) { 3816 if (ConvertArgumentsForCall(TheCall, Fn, FDecl, Proto, Args, NumArgs, 3817 RParenLoc, IsExecConfig)) 3818 return ExprError(); 3819 } else { 3820 assert(isa<FunctionNoProtoType>(FuncT) && "Unknown FunctionType!"); 3821 3822 if (FDecl) { 3823 // Check if we have too few/too many template arguments, based 3824 // on our knowledge of the function definition. 3825 const FunctionDecl *Def = 0; 3826 if (FDecl->hasBody(Def) && NumArgs != Def->param_size()) { 3827 const FunctionProtoType *Proto 3828 = Def->getType()->getAs<FunctionProtoType>(); 3829 if (!Proto || !(Proto->isVariadic() && NumArgs >= Def->param_size())) 3830 Diag(RParenLoc, diag::warn_call_wrong_number_of_arguments) 3831 << (NumArgs > Def->param_size()) << FDecl << Fn->getSourceRange(); 3832 } 3833 3834 // If the function we're calling isn't a function prototype, but we have 3835 // a function prototype from a prior declaratiom, use that prototype. 3836 if (!FDecl->hasPrototype()) 3837 Proto = FDecl->getType()->getAs<FunctionProtoType>(); 3838 } 3839 3840 // Promote the arguments (C99 6.5.2.2p6). 3841 for (unsigned i = 0; i != NumArgs; i++) { 3842 Expr *Arg = Args[i]; 3843 3844 if (Proto && i < Proto->getNumArgs()) { 3845 InitializedEntity Entity 3846 = InitializedEntity::InitializeParameter(Context, 3847 Proto->getArgType(i), 3848 Proto->isArgConsumed(i)); 3849 ExprResult ArgE = PerformCopyInitialization(Entity, 3850 SourceLocation(), 3851 Owned(Arg)); 3852 if (ArgE.isInvalid()) 3853 return true; 3854 3855 Arg = ArgE.takeAs<Expr>(); 3856 3857 } else { 3858 ExprResult ArgE = DefaultArgumentPromotion(Arg); 3859 3860 if (ArgE.isInvalid()) 3861 return true; 3862 3863 Arg = ArgE.takeAs<Expr>(); 3864 } 3865 3866 if (RequireCompleteType(Arg->getSourceRange().getBegin(), 3867 Arg->getType(), 3868 PDiag(diag::err_call_incomplete_argument) 3869 << Arg->getSourceRange())) 3870 return ExprError(); 3871 3872 TheCall->setArg(i, Arg); 3873 } 3874 } 3875 3876 if (CXXMethodDecl *Method = dyn_cast_or_null<CXXMethodDecl>(FDecl)) 3877 if (!Method->isStatic()) 3878 return ExprError(Diag(LParenLoc, diag::err_member_call_without_object) 3879 << Fn->getSourceRange()); 3880 3881 // Check for sentinels 3882 if (NDecl) 3883 DiagnoseSentinelCalls(NDecl, LParenLoc, Args, NumArgs); 3884 3885 // Do special checking on direct calls to functions. 3886 if (FDecl) { 3887 if (CheckFunctionCall(FDecl, TheCall)) 3888 return ExprError(); 3889 3890 if (BuiltinID) 3891 return CheckBuiltinFunctionCall(BuiltinID, TheCall); 3892 } else if (NDecl) { 3893 if (CheckBlockCall(NDecl, TheCall)) 3894 return ExprError(); 3895 } 3896 3897 return MaybeBindToTemporary(TheCall); 3898 } 3899 3900 ExprResult 3901 Sema::ActOnCompoundLiteral(SourceLocation LParenLoc, ParsedType Ty, 3902 SourceLocation RParenLoc, Expr *InitExpr) { 3903 assert((Ty != 0) && "ActOnCompoundLiteral(): missing type"); 3904 // FIXME: put back this assert when initializers are worked out. 3905 //assert((InitExpr != 0) && "ActOnCompoundLiteral(): missing expression"); 3906 3907 TypeSourceInfo *TInfo; 3908 QualType literalType = GetTypeFromParser(Ty, &TInfo); 3909 if (!TInfo) 3910 TInfo = Context.getTrivialTypeSourceInfo(literalType); 3911 3912 return BuildCompoundLiteralExpr(LParenLoc, TInfo, RParenLoc, InitExpr); 3913 } 3914 3915 ExprResult 3916 Sema::BuildCompoundLiteralExpr(SourceLocation LParenLoc, TypeSourceInfo *TInfo, 3917 SourceLocation RParenLoc, Expr *LiteralExpr) { 3918 QualType literalType = TInfo->getType(); 3919 3920 if (literalType->isArrayType()) { 3921 if (RequireCompleteType(LParenLoc, Context.getBaseElementType(literalType), 3922 PDiag(diag::err_illegal_decl_array_incomplete_type) 3923 << SourceRange(LParenLoc, 3924 LiteralExpr->getSourceRange().getEnd()))) 3925 return ExprError(); 3926 if (literalType->isVariableArrayType()) 3927 return ExprError(Diag(LParenLoc, diag::err_variable_object_no_init) 3928 << SourceRange(LParenLoc, LiteralExpr->getSourceRange().getEnd())); 3929 } else if (!literalType->isDependentType() && 3930 RequireCompleteType(LParenLoc, literalType, 3931 PDiag(diag::err_typecheck_decl_incomplete_type) 3932 << SourceRange(LParenLoc, 3933 LiteralExpr->getSourceRange().getEnd()))) 3934 return ExprError(); 3935 3936 InitializedEntity Entity 3937 = InitializedEntity::InitializeTemporary(literalType); 3938 InitializationKind Kind 3939 = InitializationKind::CreateCStyleCast(LParenLoc, 3940 SourceRange(LParenLoc, RParenLoc)); 3941 InitializationSequence InitSeq(*this, Entity, Kind, &LiteralExpr, 1); 3942 ExprResult Result = InitSeq.Perform(*this, Entity, Kind, 3943 MultiExprArg(*this, &LiteralExpr, 1), 3944 &literalType); 3945 if (Result.isInvalid()) 3946 return ExprError(); 3947 LiteralExpr = Result.get(); 3948 3949 bool isFileScope = getCurFunctionOrMethodDecl() == 0; 3950 if (isFileScope) { // 6.5.2.5p3 3951 if (CheckForConstantInitializer(LiteralExpr, literalType)) 3952 return ExprError(); 3953 } 3954 3955 // In C, compound literals are l-values for some reason. 3956 ExprValueKind VK = getLangOptions().CPlusPlus ? VK_RValue : VK_LValue; 3957 3958 return MaybeBindToTemporary( 3959 new (Context) CompoundLiteralExpr(LParenLoc, TInfo, literalType, 3960 VK, LiteralExpr, isFileScope)); 3961 } 3962 3963 ExprResult 3964 Sema::ActOnInitList(SourceLocation LBraceLoc, MultiExprArg InitArgList, 3965 SourceLocation RBraceLoc) { 3966 unsigned NumInit = InitArgList.size(); 3967 Expr **InitList = InitArgList.release(); 3968 3969 // Immediately handle non-overload placeholders. Overloads can be 3970 // resolved contextually, but everything else here can't. 3971 for (unsigned I = 0; I != NumInit; ++I) { 3972 if (const BuiltinType *pty 3973 = InitList[I]->getType()->getAsPlaceholderType()) { 3974 if (pty->getKind() == BuiltinType::Overload) continue; 3975 3976 ExprResult result = CheckPlaceholderExpr(InitList[I]); 3977 3978 // Ignore failures; dropping the entire initializer list because 3979 // of one failure would be terrible for indexing/etc. 3980 if (result.isInvalid()) continue; 3981 3982 InitList[I] = result.take(); 3983 } 3984 } 3985 3986 // Semantic analysis for initializers is done by ActOnDeclarator() and 3987 // CheckInitializer() - it requires knowledge of the object being intialized. 3988 3989 InitListExpr *E = new (Context) InitListExpr(Context, LBraceLoc, InitList, 3990 NumInit, RBraceLoc); 3991 E->setType(Context.VoidTy); // FIXME: just a place holder for now. 3992 return Owned(E); 3993 } 3994 3995 /// Do an explicit extend of the given block pointer if we're in ARC. 3996 static void maybeExtendBlockObject(Sema &S, ExprResult &E) { 3997 assert(E.get()->getType()->isBlockPointerType()); 3998 assert(E.get()->isRValue()); 3999 4000 // Only do this in an r-value context. 4001 if (!S.getLangOptions().ObjCAutoRefCount) return; 4002 4003 E = ImplicitCastExpr::Create(S.Context, E.get()->getType(), 4004 CK_ARCExtendBlockObject, E.get(), 4005 /*base path*/ 0, VK_RValue); 4006 S.ExprNeedsCleanups = true; 4007 } 4008 4009 /// Prepare a conversion of the given expression to an ObjC object 4010 /// pointer type. 4011 CastKind Sema::PrepareCastToObjCObjectPointer(ExprResult &E) { 4012 QualType type = E.get()->getType(); 4013 if (type->isObjCObjectPointerType()) { 4014 return CK_BitCast; 4015 } else if (type->isBlockPointerType()) { 4016 maybeExtendBlockObject(*this, E); 4017 return CK_BlockPointerToObjCPointerCast; 4018 } else { 4019 assert(type->isPointerType()); 4020 return CK_CPointerToObjCPointerCast; 4021 } 4022 } 4023 4024 /// Prepares for a scalar cast, performing all the necessary stages 4025 /// except the final cast and returning the kind required. 4026 CastKind Sema::PrepareScalarCast(ExprResult &Src, QualType DestTy) { 4027 // Both Src and Dest are scalar types, i.e. arithmetic or pointer. 4028 // Also, callers should have filtered out the invalid cases with 4029 // pointers. Everything else should be possible. 4030 4031 QualType SrcTy = Src.get()->getType(); 4032 if (Context.hasSameUnqualifiedType(SrcTy, DestTy)) 4033 return CK_NoOp; 4034 4035 switch (Type::ScalarTypeKind SrcKind = SrcTy->getScalarTypeKind()) { 4036 case Type::STK_MemberPointer: 4037 llvm_unreachable("member pointer type in C"); 4038 4039 case Type::STK_CPointer: 4040 case Type::STK_BlockPointer: 4041 case Type::STK_ObjCObjectPointer: 4042 switch (DestTy->getScalarTypeKind()) { 4043 case Type::STK_CPointer: 4044 return CK_BitCast; 4045 case Type::STK_BlockPointer: 4046 return (SrcKind == Type::STK_BlockPointer 4047 ? CK_BitCast : CK_AnyPointerToBlockPointerCast); 4048 case Type::STK_ObjCObjectPointer: 4049 if (SrcKind == Type::STK_ObjCObjectPointer) 4050 return CK_BitCast; 4051 else if (SrcKind == Type::STK_CPointer) 4052 return CK_CPointerToObjCPointerCast; 4053 else { 4054 maybeExtendBlockObject(*this, Src); 4055 return CK_BlockPointerToObjCPointerCast; 4056 } 4057 case Type::STK_Bool: 4058 return CK_PointerToBoolean; 4059 case Type::STK_Integral: 4060 return CK_PointerToIntegral; 4061 case Type::STK_Floating: 4062 case Type::STK_FloatingComplex: 4063 case Type::STK_IntegralComplex: 4064 case Type::STK_MemberPointer: 4065 llvm_unreachable("illegal cast from pointer"); 4066 } 4067 break; 4068 4069 case Type::STK_Bool: // casting from bool is like casting from an integer 4070 case Type::STK_Integral: 4071 switch (DestTy->getScalarTypeKind()) { 4072 case Type::STK_CPointer: 4073 case Type::STK_ObjCObjectPointer: 4074 case Type::STK_BlockPointer: 4075 if (Src.get()->isNullPointerConstant(Context, 4076 Expr::NPC_ValueDependentIsNull)) 4077 return CK_NullToPointer; 4078 return CK_IntegralToPointer; 4079 case Type::STK_Bool: 4080 return CK_IntegralToBoolean; 4081 case Type::STK_Integral: 4082 return CK_IntegralCast; 4083 case Type::STK_Floating: 4084 return CK_IntegralToFloating; 4085 case Type::STK_IntegralComplex: 4086 Src = ImpCastExprToType(Src.take(), 4087 DestTy->castAs<ComplexType>()->getElementType(), 4088 CK_IntegralCast); 4089 return CK_IntegralRealToComplex; 4090 case Type::STK_FloatingComplex: 4091 Src = ImpCastExprToType(Src.take(), 4092 DestTy->castAs<ComplexType>()->getElementType(), 4093 CK_IntegralToFloating); 4094 return CK_FloatingRealToComplex; 4095 case Type::STK_MemberPointer: 4096 llvm_unreachable("member pointer type in C"); 4097 } 4098 break; 4099 4100 case Type::STK_Floating: 4101 switch (DestTy->getScalarTypeKind()) { 4102 case Type::STK_Floating: 4103 return CK_FloatingCast; 4104 case Type::STK_Bool: 4105 return CK_FloatingToBoolean; 4106 case Type::STK_Integral: 4107 return CK_FloatingToIntegral; 4108 case Type::STK_FloatingComplex: 4109 Src = ImpCastExprToType(Src.take(), 4110 DestTy->castAs<ComplexType>()->getElementType(), 4111 CK_FloatingCast); 4112 return CK_FloatingRealToComplex; 4113 case Type::STK_IntegralComplex: 4114 Src = ImpCastExprToType(Src.take(), 4115 DestTy->castAs<ComplexType>()->getElementType(), 4116 CK_FloatingToIntegral); 4117 return CK_IntegralRealToComplex; 4118 case Type::STK_CPointer: 4119 case Type::STK_ObjCObjectPointer: 4120 case Type::STK_BlockPointer: 4121 llvm_unreachable("valid float->pointer cast?"); 4122 case Type::STK_MemberPointer: 4123 llvm_unreachable("member pointer type in C"); 4124 } 4125 break; 4126 4127 case Type::STK_FloatingComplex: 4128 switch (DestTy->getScalarTypeKind()) { 4129 case Type::STK_FloatingComplex: 4130 return CK_FloatingComplexCast; 4131 case Type::STK_IntegralComplex: 4132 return CK_FloatingComplexToIntegralComplex; 4133 case Type::STK_Floating: { 4134 QualType ET = SrcTy->castAs<ComplexType>()->getElementType(); 4135 if (Context.hasSameType(ET, DestTy)) 4136 return CK_FloatingComplexToReal; 4137 Src = ImpCastExprToType(Src.take(), ET, CK_FloatingComplexToReal); 4138 return CK_FloatingCast; 4139 } 4140 case Type::STK_Bool: 4141 return CK_FloatingComplexToBoolean; 4142 case Type::STK_Integral: 4143 Src = ImpCastExprToType(Src.take(), 4144 SrcTy->castAs<ComplexType>()->getElementType(), 4145 CK_FloatingComplexToReal); 4146 return CK_FloatingToIntegral; 4147 case Type::STK_CPointer: 4148 case Type::STK_ObjCObjectPointer: 4149 case Type::STK_BlockPointer: 4150 llvm_unreachable("valid complex float->pointer cast?"); 4151 case Type::STK_MemberPointer: 4152 llvm_unreachable("member pointer type in C"); 4153 } 4154 break; 4155 4156 case Type::STK_IntegralComplex: 4157 switch (DestTy->getScalarTypeKind()) { 4158 case Type::STK_FloatingComplex: 4159 return CK_IntegralComplexToFloatingComplex; 4160 case Type::STK_IntegralComplex: 4161 return CK_IntegralComplexCast; 4162 case Type::STK_Integral: { 4163 QualType ET = SrcTy->castAs<ComplexType>()->getElementType(); 4164 if (Context.hasSameType(ET, DestTy)) 4165 return CK_IntegralComplexToReal; 4166 Src = ImpCastExprToType(Src.take(), ET, CK_IntegralComplexToReal); 4167 return CK_IntegralCast; 4168 } 4169 case Type::STK_Bool: 4170 return CK_IntegralComplexToBoolean; 4171 case Type::STK_Floating: 4172 Src = ImpCastExprToType(Src.take(), 4173 SrcTy->castAs<ComplexType>()->getElementType(), 4174 CK_IntegralComplexToReal); 4175 return CK_IntegralToFloating; 4176 case Type::STK_CPointer: 4177 case Type::STK_ObjCObjectPointer: 4178 case Type::STK_BlockPointer: 4179 llvm_unreachable("valid complex int->pointer cast?"); 4180 case Type::STK_MemberPointer: 4181 llvm_unreachable("member pointer type in C"); 4182 } 4183 break; 4184 } 4185 4186 llvm_unreachable("Unhandled scalar cast"); 4187 } 4188 4189 bool Sema::CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty, 4190 CastKind &Kind) { 4191 assert(VectorTy->isVectorType() && "Not a vector type!"); 4192 4193 if (Ty->isVectorType() || Ty->isIntegerType()) { 4194 if (Context.getTypeSize(VectorTy) != Context.getTypeSize(Ty)) 4195 return Diag(R.getBegin(), 4196 Ty->isVectorType() ? 4197 diag::err_invalid_conversion_between_vectors : 4198 diag::err_invalid_conversion_between_vector_and_integer) 4199 << VectorTy << Ty << R; 4200 } else 4201 return Diag(R.getBegin(), 4202 diag::err_invalid_conversion_between_vector_and_scalar) 4203 << VectorTy << Ty << R; 4204 4205 Kind = CK_BitCast; 4206 return false; 4207 } 4208 4209 ExprResult Sema::CheckExtVectorCast(SourceRange R, QualType DestTy, 4210 Expr *CastExpr, CastKind &Kind) { 4211 assert(DestTy->isExtVectorType() && "Not an extended vector type!"); 4212 4213 QualType SrcTy = CastExpr->getType(); 4214 4215 // If SrcTy is a VectorType, the total size must match to explicitly cast to 4216 // an ExtVectorType. 4217 // In OpenCL, casts between vectors of different types are not allowed. 4218 // (See OpenCL 6.2). 4219 if (SrcTy->isVectorType()) { 4220 if (Context.getTypeSize(DestTy) != Context.getTypeSize(SrcTy) 4221 || (getLangOptions().OpenCL && 4222 (DestTy.getCanonicalType() != SrcTy.getCanonicalType()))) { 4223 Diag(R.getBegin(),diag::err_invalid_conversion_between_ext_vectors) 4224 << DestTy << SrcTy << R; 4225 return ExprError(); 4226 } 4227 Kind = CK_BitCast; 4228 return Owned(CastExpr); 4229 } 4230 4231 // All non-pointer scalars can be cast to ExtVector type. The appropriate 4232 // conversion will take place first from scalar to elt type, and then 4233 // splat from elt type to vector. 4234 if (SrcTy->isPointerType()) 4235 return Diag(R.getBegin(), 4236 diag::err_invalid_conversion_between_vector_and_scalar) 4237 << DestTy << SrcTy << R; 4238 4239 QualType DestElemTy = DestTy->getAs<ExtVectorType>()->getElementType(); 4240 ExprResult CastExprRes = Owned(CastExpr); 4241 CastKind CK = PrepareScalarCast(CastExprRes, DestElemTy); 4242 if (CastExprRes.isInvalid()) 4243 return ExprError(); 4244 CastExpr = ImpCastExprToType(CastExprRes.take(), DestElemTy, CK).take(); 4245 4246 Kind = CK_VectorSplat; 4247 return Owned(CastExpr); 4248 } 4249 4250 ExprResult 4251 Sema::ActOnCastExpr(Scope *S, SourceLocation LParenLoc, 4252 Declarator &D, ParsedType &Ty, 4253 SourceLocation RParenLoc, Expr *CastExpr) { 4254 assert(!D.isInvalidType() && (CastExpr != 0) && 4255 "ActOnCastExpr(): missing type or expr"); 4256 4257 TypeSourceInfo *castTInfo = GetTypeForDeclaratorCast(D, CastExpr->getType()); 4258 if (D.isInvalidType()) 4259 return ExprError(); 4260 4261 if (getLangOptions().CPlusPlus) { 4262 // Check that there are no default arguments (C++ only). 4263 CheckExtraCXXDefaultArguments(D); 4264 } 4265 4266 checkUnusedDeclAttributes(D); 4267 4268 QualType castType = castTInfo->getType(); 4269 Ty = CreateParsedType(castType, castTInfo); 4270 4271 bool isVectorLiteral = false; 4272 4273 // Check for an altivec or OpenCL literal, 4274 // i.e. all the elements are integer constants. 4275 ParenExpr *PE = dyn_cast<ParenExpr>(CastExpr); 4276 ParenListExpr *PLE = dyn_cast<ParenListExpr>(CastExpr); 4277 if ((getLangOptions().AltiVec || getLangOptions().OpenCL) 4278 && castType->isVectorType() && (PE || PLE)) { 4279 if (PLE && PLE->getNumExprs() == 0) { 4280 Diag(PLE->getExprLoc(), diag::err_altivec_empty_initializer); 4281 return ExprError(); 4282 } 4283 if (PE || PLE->getNumExprs() == 1) { 4284 Expr *E = (PE ? PE->getSubExpr() : PLE->getExpr(0)); 4285 if (!E->getType()->isVectorType()) 4286 isVectorLiteral = true; 4287 } 4288 else 4289 isVectorLiteral = true; 4290 } 4291 4292 // If this is a vector initializer, '(' type ')' '(' init, ..., init ')' 4293 // then handle it as such. 4294 if (isVectorLiteral) 4295 return BuildVectorLiteral(LParenLoc, RParenLoc, CastExpr, castTInfo); 4296 4297 // If the Expr being casted is a ParenListExpr, handle it specially. 4298 // This is not an AltiVec-style cast, so turn the ParenListExpr into a 4299 // sequence of BinOp comma operators. 4300 if (isa<ParenListExpr>(CastExpr)) { 4301 ExprResult Result = MaybeConvertParenListExprToParenExpr(S, CastExpr); 4302 if (Result.isInvalid()) return ExprError(); 4303 CastExpr = Result.take(); 4304 } 4305 4306 return BuildCStyleCastExpr(LParenLoc, castTInfo, RParenLoc, CastExpr); 4307 } 4308 4309 ExprResult Sema::BuildVectorLiteral(SourceLocation LParenLoc, 4310 SourceLocation RParenLoc, Expr *E, 4311 TypeSourceInfo *TInfo) { 4312 assert((isa<ParenListExpr>(E) || isa<ParenExpr>(E)) && 4313 "Expected paren or paren list expression"); 4314 4315 Expr **exprs; 4316 unsigned numExprs; 4317 Expr *subExpr; 4318 if (ParenListExpr *PE = dyn_cast<ParenListExpr>(E)) { 4319 exprs = PE->getExprs(); 4320 numExprs = PE->getNumExprs(); 4321 } else { 4322 subExpr = cast<ParenExpr>(E)->getSubExpr(); 4323 exprs = &subExpr; 4324 numExprs = 1; 4325 } 4326 4327 QualType Ty = TInfo->getType(); 4328 assert(Ty->isVectorType() && "Expected vector type"); 4329 4330 SmallVector<Expr *, 8> initExprs; 4331 const VectorType *VTy = Ty->getAs<VectorType>(); 4332 unsigned numElems = Ty->getAs<VectorType>()->getNumElements(); 4333 4334 // '(...)' form of vector initialization in AltiVec: the number of 4335 // initializers must be one or must match the size of the vector. 4336 // If a single value is specified in the initializer then it will be 4337 // replicated to all the components of the vector 4338 if (VTy->getVectorKind() == VectorType::AltiVecVector) { 4339 // The number of initializers must be one or must match the size of the 4340 // vector. If a single value is specified in the initializer then it will 4341 // be replicated to all the components of the vector 4342 if (numExprs == 1) { 4343 QualType ElemTy = Ty->getAs<VectorType>()->getElementType(); 4344 ExprResult Literal = DefaultLvalueConversion(exprs[0]); 4345 if (Literal.isInvalid()) 4346 return ExprError(); 4347 Literal = ImpCastExprToType(Literal.take(), ElemTy, 4348 PrepareScalarCast(Literal, ElemTy)); 4349 return BuildCStyleCastExpr(LParenLoc, TInfo, RParenLoc, Literal.take()); 4350 } 4351 else if (numExprs < numElems) { 4352 Diag(E->getExprLoc(), 4353 diag::err_incorrect_number_of_vector_initializers); 4354 return ExprError(); 4355 } 4356 else 4357 for (unsigned i = 0, e = numExprs; i != e; ++i) 4358 initExprs.push_back(exprs[i]); 4359 } 4360 else { 4361 // For OpenCL, when the number of initializers is a single value, 4362 // it will be replicated to all components of the vector. 4363 if (getLangOptions().OpenCL && 4364 VTy->getVectorKind() == VectorType::GenericVector && 4365 numExprs == 1) { 4366 QualType ElemTy = Ty->getAs<VectorType>()->getElementType(); 4367 ExprResult Literal = DefaultLvalueConversion(exprs[0]); 4368 if (Literal.isInvalid()) 4369 return ExprError(); 4370 Literal = ImpCastExprToType(Literal.take(), ElemTy, 4371 PrepareScalarCast(Literal, ElemTy)); 4372 return BuildCStyleCastExpr(LParenLoc, TInfo, RParenLoc, Literal.take()); 4373 } 4374 4375 for (unsigned i = 0, e = numExprs; i != e; ++i) 4376 initExprs.push_back(exprs[i]); 4377 } 4378 // FIXME: This means that pretty-printing the final AST will produce curly 4379 // braces instead of the original commas. 4380 InitListExpr *initE = new (Context) InitListExpr(Context, LParenLoc, 4381 &initExprs[0], 4382 initExprs.size(), RParenLoc); 4383 initE->setType(Ty); 4384 return BuildCompoundLiteralExpr(LParenLoc, TInfo, RParenLoc, initE); 4385 } 4386 4387 /// This is not an AltiVec-style cast, so turn the ParenListExpr into a sequence 4388 /// of comma binary operators. 4389 ExprResult 4390 Sema::MaybeConvertParenListExprToParenExpr(Scope *S, Expr *OrigExpr) { 4391 ParenListExpr *E = dyn_cast<ParenListExpr>(OrigExpr); 4392 if (!E) 4393 return Owned(OrigExpr); 4394 4395 ExprResult Result(E->getExpr(0)); 4396 4397 for (unsigned i = 1, e = E->getNumExprs(); i != e && !Result.isInvalid(); ++i) 4398 Result = ActOnBinOp(S, E->getExprLoc(), tok::comma, Result.get(), 4399 E->getExpr(i)); 4400 4401 if (Result.isInvalid()) return ExprError(); 4402 4403 return ActOnParenExpr(E->getLParenLoc(), E->getRParenLoc(), Result.get()); 4404 } 4405 4406 ExprResult Sema::ActOnParenOrParenListExpr(SourceLocation L, 4407 SourceLocation R, 4408 MultiExprArg Val) { 4409 unsigned nexprs = Val.size(); 4410 Expr **exprs = reinterpret_cast<Expr**>(Val.release()); 4411 assert((exprs != 0) && "ActOnParenOrParenListExpr() missing expr list"); 4412 Expr *expr; 4413 if (nexprs == 1) 4414 expr = new (Context) ParenExpr(L, R, exprs[0]); 4415 else 4416 expr = new (Context) ParenListExpr(Context, L, exprs, nexprs, R, 4417 exprs[nexprs-1]->getType()); 4418 return Owned(expr); 4419 } 4420 4421 /// \brief Emit a specialized diagnostic when one expression is a null pointer 4422 /// constant and the other is not a pointer. Returns true if a diagnostic is 4423 /// emitted. 4424 bool Sema::DiagnoseConditionalForNull(Expr *LHSExpr, Expr *RHSExpr, 4425 SourceLocation QuestionLoc) { 4426 Expr *NullExpr = LHSExpr; 4427 Expr *NonPointerExpr = RHSExpr; 4428 Expr::NullPointerConstantKind NullKind = 4429 NullExpr->isNullPointerConstant(Context, 4430 Expr::NPC_ValueDependentIsNotNull); 4431 4432 if (NullKind == Expr::NPCK_NotNull) { 4433 NullExpr = RHSExpr; 4434 NonPointerExpr = LHSExpr; 4435 NullKind = 4436 NullExpr->isNullPointerConstant(Context, 4437 Expr::NPC_ValueDependentIsNotNull); 4438 } 4439 4440 if (NullKind == Expr::NPCK_NotNull) 4441 return false; 4442 4443 if (NullKind == Expr::NPCK_ZeroInteger) { 4444 // In this case, check to make sure that we got here from a "NULL" 4445 // string in the source code. 4446 NullExpr = NullExpr->IgnoreParenImpCasts(); 4447 SourceLocation loc = NullExpr->getExprLoc(); 4448 if (!findMacroSpelling(loc, "NULL")) 4449 return false; 4450 } 4451 4452 int DiagType = (NullKind == Expr::NPCK_CXX0X_nullptr); 4453 Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands_null) 4454 << NonPointerExpr->getType() << DiagType 4455 << NonPointerExpr->getSourceRange(); 4456 return true; 4457 } 4458 4459 /// \brief Return false if the condition expression is valid, true otherwise. 4460 static bool checkCondition(Sema &S, Expr *Cond) { 4461 QualType CondTy = Cond->getType(); 4462 4463 // C99 6.5.15p2 4464 if (CondTy->isScalarType()) return false; 4465 4466 // OpenCL: Sec 6.3.i says the condition is allowed to be a vector or scalar. 4467 if (S.getLangOptions().OpenCL && CondTy->isVectorType()) 4468 return false; 4469 4470 // Emit the proper error message. 4471 S.Diag(Cond->getLocStart(), S.getLangOptions().OpenCL ? 4472 diag::err_typecheck_cond_expect_scalar : 4473 diag::err_typecheck_cond_expect_scalar_or_vector) 4474 << CondTy; 4475 return true; 4476 } 4477 4478 /// \brief Return false if the two expressions can be converted to a vector, 4479 /// true otherwise 4480 static bool checkConditionalConvertScalarsToVectors(Sema &S, ExprResult &LHS, 4481 ExprResult &RHS, 4482 QualType CondTy) { 4483 // Both operands should be of scalar type. 4484 if (!LHS.get()->getType()->isScalarType()) { 4485 S.Diag(LHS.get()->getLocStart(), diag::err_typecheck_cond_expect_scalar) 4486 << CondTy; 4487 return true; 4488 } 4489 if (!RHS.get()->getType()->isScalarType()) { 4490 S.Diag(RHS.get()->getLocStart(), diag::err_typecheck_cond_expect_scalar) 4491 << CondTy; 4492 return true; 4493 } 4494 4495 // Implicity convert these scalars to the type of the condition. 4496 LHS = S.ImpCastExprToType(LHS.take(), CondTy, CK_IntegralCast); 4497 RHS = S.ImpCastExprToType(RHS.take(), CondTy, CK_IntegralCast); 4498 return false; 4499 } 4500 4501 /// \brief Handle when one or both operands are void type. 4502 static QualType checkConditionalVoidType(Sema &S, ExprResult &LHS, 4503 ExprResult &RHS) { 4504 Expr *LHSExpr = LHS.get(); 4505 Expr *RHSExpr = RHS.get(); 4506 4507 if (!LHSExpr->getType()->isVoidType()) 4508 S.Diag(RHSExpr->getLocStart(), diag::ext_typecheck_cond_one_void) 4509 << RHSExpr->getSourceRange(); 4510 if (!RHSExpr->getType()->isVoidType()) 4511 S.Diag(LHSExpr->getLocStart(), diag::ext_typecheck_cond_one_void) 4512 << LHSExpr->getSourceRange(); 4513 LHS = S.ImpCastExprToType(LHS.take(), S.Context.VoidTy, CK_ToVoid); 4514 RHS = S.ImpCastExprToType(RHS.take(), S.Context.VoidTy, CK_ToVoid); 4515 return S.Context.VoidTy; 4516 } 4517 4518 /// \brief Return false if the NullExpr can be promoted to PointerTy, 4519 /// true otherwise. 4520 static bool checkConditionalNullPointer(Sema &S, ExprResult &NullExpr, 4521 QualType PointerTy) { 4522 if ((!PointerTy->isAnyPointerType() && !PointerTy->isBlockPointerType()) || 4523 !NullExpr.get()->isNullPointerConstant(S.Context, 4524 Expr::NPC_ValueDependentIsNull)) 4525 return true; 4526 4527 NullExpr = S.ImpCastExprToType(NullExpr.take(), PointerTy, CK_NullToPointer); 4528 return false; 4529 } 4530 4531 /// \brief Checks compatibility between two pointers and return the resulting 4532 /// type. 4533 static QualType checkConditionalPointerCompatibility(Sema &S, ExprResult &LHS, 4534 ExprResult &RHS, 4535 SourceLocation Loc) { 4536 QualType LHSTy = LHS.get()->getType(); 4537 QualType RHSTy = RHS.get()->getType(); 4538 4539 if (S.Context.hasSameType(LHSTy, RHSTy)) { 4540 // Two identical pointers types are always compatible. 4541 return LHSTy; 4542 } 4543 4544 QualType lhptee, rhptee; 4545 4546 // Get the pointee types. 4547 if (const BlockPointerType *LHSBTy = LHSTy->getAs<BlockPointerType>()) { 4548 lhptee = LHSBTy->getPointeeType(); 4549 rhptee = RHSTy->castAs<BlockPointerType>()->getPointeeType(); 4550 } else { 4551 lhptee = LHSTy->castAs<PointerType>()->getPointeeType(); 4552 rhptee = RHSTy->castAs<PointerType>()->getPointeeType(); 4553 } 4554 4555 if (!S.Context.typesAreCompatible(lhptee.getUnqualifiedType(), 4556 rhptee.getUnqualifiedType())) { 4557 S.Diag(Loc, diag::warn_typecheck_cond_incompatible_pointers) 4558 << LHSTy << RHSTy << LHS.get()->getSourceRange() 4559 << RHS.get()->getSourceRange(); 4560 // In this situation, we assume void* type. No especially good 4561 // reason, but this is what gcc does, and we do have to pick 4562 // to get a consistent AST. 4563 QualType incompatTy = S.Context.getPointerType(S.Context.VoidTy); 4564 LHS = S.ImpCastExprToType(LHS.take(), incompatTy, CK_BitCast); 4565 RHS = S.ImpCastExprToType(RHS.take(), incompatTy, CK_BitCast); 4566 return incompatTy; 4567 } 4568 4569 // The pointer types are compatible. 4570 // C99 6.5.15p6: If both operands are pointers to compatible types *or* to 4571 // differently qualified versions of compatible types, the result type is 4572 // a pointer to an appropriately qualified version of the *composite* 4573 // type. 4574 // FIXME: Need to calculate the composite type. 4575 // FIXME: Need to add qualifiers 4576 4577 LHS = S.ImpCastExprToType(LHS.take(), LHSTy, CK_BitCast); 4578 RHS = S.ImpCastExprToType(RHS.take(), LHSTy, CK_BitCast); 4579 return LHSTy; 4580 } 4581 4582 /// \brief Return the resulting type when the operands are both block pointers. 4583 static QualType checkConditionalBlockPointerCompatibility(Sema &S, 4584 ExprResult &LHS, 4585 ExprResult &RHS, 4586 SourceLocation Loc) { 4587 QualType LHSTy = LHS.get()->getType(); 4588 QualType RHSTy = RHS.get()->getType(); 4589 4590 if (!LHSTy->isBlockPointerType() || !RHSTy->isBlockPointerType()) { 4591 if (LHSTy->isVoidPointerType() || RHSTy->isVoidPointerType()) { 4592 QualType destType = S.Context.getPointerType(S.Context.VoidTy); 4593 LHS = S.ImpCastExprToType(LHS.take(), destType, CK_BitCast); 4594 RHS = S.ImpCastExprToType(RHS.take(), destType, CK_BitCast); 4595 return destType; 4596 } 4597 S.Diag(Loc, diag::err_typecheck_cond_incompatible_operands) 4598 << LHSTy << RHSTy << LHS.get()->getSourceRange() 4599 << RHS.get()->getSourceRange(); 4600 return QualType(); 4601 } 4602 4603 // We have 2 block pointer types. 4604 return checkConditionalPointerCompatibility(S, LHS, RHS, Loc); 4605 } 4606 4607 /// \brief Return the resulting type when the operands are both pointers. 4608 static QualType 4609 checkConditionalObjectPointersCompatibility(Sema &S, ExprResult &LHS, 4610 ExprResult &RHS, 4611 SourceLocation Loc) { 4612 // get the pointer types 4613 QualType LHSTy = LHS.get()->getType(); 4614 QualType RHSTy = RHS.get()->getType(); 4615 4616 // get the "pointed to" types 4617 QualType lhptee = LHSTy->getAs<PointerType>()->getPointeeType(); 4618 QualType rhptee = RHSTy->getAs<PointerType>()->getPointeeType(); 4619 4620 // ignore qualifiers on void (C99 6.5.15p3, clause 6) 4621 if (lhptee->isVoidType() && rhptee->isIncompleteOrObjectType()) { 4622 // Figure out necessary qualifiers (C99 6.5.15p6) 4623 QualType destPointee 4624 = S.Context.getQualifiedType(lhptee, rhptee.getQualifiers()); 4625 QualType destType = S.Context.getPointerType(destPointee); 4626 // Add qualifiers if necessary. 4627 LHS = S.ImpCastExprToType(LHS.take(), destType, CK_NoOp); 4628 // Promote to void*. 4629 RHS = S.ImpCastExprToType(RHS.take(), destType, CK_BitCast); 4630 return destType; 4631 } 4632 if (rhptee->isVoidType() && lhptee->isIncompleteOrObjectType()) { 4633 QualType destPointee 4634 = S.Context.getQualifiedType(rhptee, lhptee.getQualifiers()); 4635 QualType destType = S.Context.getPointerType(destPointee); 4636 // Add qualifiers if necessary. 4637 RHS = S.ImpCastExprToType(RHS.take(), destType, CK_NoOp); 4638 // Promote to void*. 4639 LHS = S.ImpCastExprToType(LHS.take(), destType, CK_BitCast); 4640 return destType; 4641 } 4642 4643 return checkConditionalPointerCompatibility(S, LHS, RHS, Loc); 4644 } 4645 4646 /// \brief Return false if the first expression is not an integer and the second 4647 /// expression is not a pointer, true otherwise. 4648 static bool checkPointerIntegerMismatch(Sema &S, ExprResult &Int, 4649 Expr* PointerExpr, SourceLocation Loc, 4650 bool IsIntFirstExpr) { 4651 if (!PointerExpr->getType()->isPointerType() || 4652 !Int.get()->getType()->isIntegerType()) 4653 return false; 4654 4655 Expr *Expr1 = IsIntFirstExpr ? Int.get() : PointerExpr; 4656 Expr *Expr2 = IsIntFirstExpr ? PointerExpr : Int.get(); 4657 4658 S.Diag(Loc, diag::warn_typecheck_cond_pointer_integer_mismatch) 4659 << Expr1->getType() << Expr2->getType() 4660 << Expr1->getSourceRange() << Expr2->getSourceRange(); 4661 Int = S.ImpCastExprToType(Int.take(), PointerExpr->getType(), 4662 CK_IntegralToPointer); 4663 return true; 4664 } 4665 4666 /// Note that LHS is not null here, even if this is the gnu "x ?: y" extension. 4667 /// In that case, LHS = cond. 4668 /// C99 6.5.15 4669 QualType Sema::CheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, 4670 ExprResult &RHS, ExprValueKind &VK, 4671 ExprObjectKind &OK, 4672 SourceLocation QuestionLoc) { 4673 4674 ExprResult LHSResult = CheckPlaceholderExpr(LHS.get()); 4675 if (!LHSResult.isUsable()) return QualType(); 4676 LHS = move(LHSResult); 4677 4678 ExprResult RHSResult = CheckPlaceholderExpr(RHS.get()); 4679 if (!RHSResult.isUsable()) return QualType(); 4680 RHS = move(RHSResult); 4681 4682 // C++ is sufficiently different to merit its own checker. 4683 if (getLangOptions().CPlusPlus) 4684 return CXXCheckConditionalOperands(Cond, LHS, RHS, VK, OK, QuestionLoc); 4685 4686 VK = VK_RValue; 4687 OK = OK_Ordinary; 4688 4689 Cond = UsualUnaryConversions(Cond.take()); 4690 if (Cond.isInvalid()) 4691 return QualType(); 4692 LHS = UsualUnaryConversions(LHS.take()); 4693 if (LHS.isInvalid()) 4694 return QualType(); 4695 RHS = UsualUnaryConversions(RHS.take()); 4696 if (RHS.isInvalid()) 4697 return QualType(); 4698 4699 QualType CondTy = Cond.get()->getType(); 4700 QualType LHSTy = LHS.get()->getType(); 4701 QualType RHSTy = RHS.get()->getType(); 4702 4703 // first, check the condition. 4704 if (checkCondition(*this, Cond.get())) 4705 return QualType(); 4706 4707 // Now check the two expressions. 4708 if (LHSTy->isVectorType() || RHSTy->isVectorType()) 4709 return CheckVectorOperands(LHS, RHS, QuestionLoc, /*isCompAssign*/false); 4710 4711 // OpenCL: If the condition is a vector, and both operands are scalar, 4712 // attempt to implicity convert them to the vector type to act like the 4713 // built in select. 4714 if (getLangOptions().OpenCL && CondTy->isVectorType()) 4715 if (checkConditionalConvertScalarsToVectors(*this, LHS, RHS, CondTy)) 4716 return QualType(); 4717 4718 // If both operands have arithmetic type, do the usual arithmetic conversions 4719 // to find a common type: C99 6.5.15p3,5. 4720 if (LHSTy->isArithmeticType() && RHSTy->isArithmeticType()) { 4721 UsualArithmeticConversions(LHS, RHS); 4722 if (LHS.isInvalid() || RHS.isInvalid()) 4723 return QualType(); 4724 return LHS.get()->getType(); 4725 } 4726 4727 // If both operands are the same structure or union type, the result is that 4728 // type. 4729 if (const RecordType *LHSRT = LHSTy->getAs<RecordType>()) { // C99 6.5.15p3 4730 if (const RecordType *RHSRT = RHSTy->getAs<RecordType>()) 4731 if (LHSRT->getDecl() == RHSRT->getDecl()) 4732 // "If both the operands have structure or union type, the result has 4733 // that type." This implies that CV qualifiers are dropped. 4734 return LHSTy.getUnqualifiedType(); 4735 // FIXME: Type of conditional expression must be complete in C mode. 4736 } 4737 4738 // C99 6.5.15p5: "If both operands have void type, the result has void type." 4739 // The following || allows only one side to be void (a GCC-ism). 4740 if (LHSTy->isVoidType() || RHSTy->isVoidType()) { 4741 return checkConditionalVoidType(*this, LHS, RHS); 4742 } 4743 4744 // C99 6.5.15p6 - "if one operand is a null pointer constant, the result has 4745 // the type of the other operand." 4746 if (!checkConditionalNullPointer(*this, RHS, LHSTy)) return LHSTy; 4747 if (!checkConditionalNullPointer(*this, LHS, RHSTy)) return RHSTy; 4748 4749 // All objective-c pointer type analysis is done here. 4750 QualType compositeType = FindCompositeObjCPointerType(LHS, RHS, 4751 QuestionLoc); 4752 if (LHS.isInvalid() || RHS.isInvalid()) 4753 return QualType(); 4754 if (!compositeType.isNull()) 4755 return compositeType; 4756 4757 4758 // Handle block pointer types. 4759 if (LHSTy->isBlockPointerType() || RHSTy->isBlockPointerType()) 4760 return checkConditionalBlockPointerCompatibility(*this, LHS, RHS, 4761 QuestionLoc); 4762 4763 // Check constraints for C object pointers types (C99 6.5.15p3,6). 4764 if (LHSTy->isPointerType() && RHSTy->isPointerType()) 4765 return checkConditionalObjectPointersCompatibility(*this, LHS, RHS, 4766 QuestionLoc); 4767 4768 // GCC compatibility: soften pointer/integer mismatch. Note that 4769 // null pointers have been filtered out by this point. 4770 if (checkPointerIntegerMismatch(*this, LHS, RHS.get(), QuestionLoc, 4771 /*isIntFirstExpr=*/true)) 4772 return RHSTy; 4773 if (checkPointerIntegerMismatch(*this, RHS, LHS.get(), QuestionLoc, 4774 /*isIntFirstExpr=*/false)) 4775 return LHSTy; 4776 4777 // Emit a better diagnostic if one of the expressions is a null pointer 4778 // constant and the other is not a pointer type. In this case, the user most 4779 // likely forgot to take the address of the other expression. 4780 if (DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc)) 4781 return QualType(); 4782 4783 // Otherwise, the operands are not compatible. 4784 Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) 4785 << LHSTy << RHSTy << LHS.get()->getSourceRange() 4786 << RHS.get()->getSourceRange(); 4787 return QualType(); 4788 } 4789 4790 /// FindCompositeObjCPointerType - Helper method to find composite type of 4791 /// two objective-c pointer types of the two input expressions. 4792 QualType Sema::FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS, 4793 SourceLocation QuestionLoc) { 4794 QualType LHSTy = LHS.get()->getType(); 4795 QualType RHSTy = RHS.get()->getType(); 4796 4797 // Handle things like Class and struct objc_class*. Here we case the result 4798 // to the pseudo-builtin, because that will be implicitly cast back to the 4799 // redefinition type if an attempt is made to access its fields. 4800 if (LHSTy->isObjCClassType() && 4801 (Context.hasSameType(RHSTy, Context.getObjCClassRedefinitionType()))) { 4802 RHS = ImpCastExprToType(RHS.take(), LHSTy, CK_CPointerToObjCPointerCast); 4803 return LHSTy; 4804 } 4805 if (RHSTy->isObjCClassType() && 4806 (Context.hasSameType(LHSTy, Context.getObjCClassRedefinitionType()))) { 4807 LHS = ImpCastExprToType(LHS.take(), RHSTy, CK_CPointerToObjCPointerCast); 4808 return RHSTy; 4809 } 4810 // And the same for struct objc_object* / id 4811 if (LHSTy->isObjCIdType() && 4812 (Context.hasSameType(RHSTy, Context.getObjCIdRedefinitionType()))) { 4813 RHS = ImpCastExprToType(RHS.take(), LHSTy, CK_CPointerToObjCPointerCast); 4814 return LHSTy; 4815 } 4816 if (RHSTy->isObjCIdType() && 4817 (Context.hasSameType(LHSTy, Context.getObjCIdRedefinitionType()))) { 4818 LHS = ImpCastExprToType(LHS.take(), RHSTy, CK_CPointerToObjCPointerCast); 4819 return RHSTy; 4820 } 4821 // And the same for struct objc_selector* / SEL 4822 if (Context.isObjCSelType(LHSTy) && 4823 (Context.hasSameType(RHSTy, Context.getObjCSelRedefinitionType()))) { 4824 RHS = ImpCastExprToType(RHS.take(), LHSTy, CK_BitCast); 4825 return LHSTy; 4826 } 4827 if (Context.isObjCSelType(RHSTy) && 4828 (Context.hasSameType(LHSTy, Context.getObjCSelRedefinitionType()))) { 4829 LHS = ImpCastExprToType(LHS.take(), RHSTy, CK_BitCast); 4830 return RHSTy; 4831 } 4832 // Check constraints for Objective-C object pointers types. 4833 if (LHSTy->isObjCObjectPointerType() && RHSTy->isObjCObjectPointerType()) { 4834 4835 if (Context.getCanonicalType(LHSTy) == Context.getCanonicalType(RHSTy)) { 4836 // Two identical object pointer types are always compatible. 4837 return LHSTy; 4838 } 4839 const ObjCObjectPointerType *LHSOPT = LHSTy->castAs<ObjCObjectPointerType>(); 4840 const ObjCObjectPointerType *RHSOPT = RHSTy->castAs<ObjCObjectPointerType>(); 4841 QualType compositeType = LHSTy; 4842 4843 // If both operands are interfaces and either operand can be 4844 // assigned to the other, use that type as the composite 4845 // type. This allows 4846 // xxx ? (A*) a : (B*) b 4847 // where B is a subclass of A. 4848 // 4849 // Additionally, as for assignment, if either type is 'id' 4850 // allow silent coercion. Finally, if the types are 4851 // incompatible then make sure to use 'id' as the composite 4852 // type so the result is acceptable for sending messages to. 4853 4854 // FIXME: Consider unifying with 'areComparableObjCPointerTypes'. 4855 // It could return the composite type. 4856 if (Context.canAssignObjCInterfaces(LHSOPT, RHSOPT)) { 4857 compositeType = RHSOPT->isObjCBuiltinType() ? RHSTy : LHSTy; 4858 } else if (Context.canAssignObjCInterfaces(RHSOPT, LHSOPT)) { 4859 compositeType = LHSOPT->isObjCBuiltinType() ? LHSTy : RHSTy; 4860 } else if ((LHSTy->isObjCQualifiedIdType() || 4861 RHSTy->isObjCQualifiedIdType()) && 4862 Context.ObjCQualifiedIdTypesAreCompatible(LHSTy, RHSTy, true)) { 4863 // Need to handle "id<xx>" explicitly. 4864 // GCC allows qualified id and any Objective-C type to devolve to 4865 // id. Currently localizing to here until clear this should be 4866 // part of ObjCQualifiedIdTypesAreCompatible. 4867 compositeType = Context.getObjCIdType(); 4868 } else if (LHSTy->isObjCIdType() || RHSTy->isObjCIdType()) { 4869 compositeType = Context.getObjCIdType(); 4870 } else if (!(compositeType = 4871 Context.areCommonBaseCompatible(LHSOPT, RHSOPT)).isNull()) 4872 ; 4873 else { 4874 Diag(QuestionLoc, diag::ext_typecheck_cond_incompatible_operands) 4875 << LHSTy << RHSTy 4876 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 4877 QualType incompatTy = Context.getObjCIdType(); 4878 LHS = ImpCastExprToType(LHS.take(), incompatTy, CK_BitCast); 4879 RHS = ImpCastExprToType(RHS.take(), incompatTy, CK_BitCast); 4880 return incompatTy; 4881 } 4882 // The object pointer types are compatible. 4883 LHS = ImpCastExprToType(LHS.take(), compositeType, CK_BitCast); 4884 RHS = ImpCastExprToType(RHS.take(), compositeType, CK_BitCast); 4885 return compositeType; 4886 } 4887 // Check Objective-C object pointer types and 'void *' 4888 if (LHSTy->isVoidPointerType() && RHSTy->isObjCObjectPointerType()) { 4889 QualType lhptee = LHSTy->getAs<PointerType>()->getPointeeType(); 4890 QualType rhptee = RHSTy->getAs<ObjCObjectPointerType>()->getPointeeType(); 4891 QualType destPointee 4892 = Context.getQualifiedType(lhptee, rhptee.getQualifiers()); 4893 QualType destType = Context.getPointerType(destPointee); 4894 // Add qualifiers if necessary. 4895 LHS = ImpCastExprToType(LHS.take(), destType, CK_NoOp); 4896 // Promote to void*. 4897 RHS = ImpCastExprToType(RHS.take(), destType, CK_BitCast); 4898 return destType; 4899 } 4900 if (LHSTy->isObjCObjectPointerType() && RHSTy->isVoidPointerType()) { 4901 QualType lhptee = LHSTy->getAs<ObjCObjectPointerType>()->getPointeeType(); 4902 QualType rhptee = RHSTy->getAs<PointerType>()->getPointeeType(); 4903 QualType destPointee 4904 = Context.getQualifiedType(rhptee, lhptee.getQualifiers()); 4905 QualType destType = Context.getPointerType(destPointee); 4906 // Add qualifiers if necessary. 4907 RHS = ImpCastExprToType(RHS.take(), destType, CK_NoOp); 4908 // Promote to void*. 4909 LHS = ImpCastExprToType(LHS.take(), destType, CK_BitCast); 4910 return destType; 4911 } 4912 return QualType(); 4913 } 4914 4915 /// SuggestParentheses - Emit a note with a fixit hint that wraps 4916 /// ParenRange in parentheses. 4917 static void SuggestParentheses(Sema &Self, SourceLocation Loc, 4918 const PartialDiagnostic &Note, 4919 SourceRange ParenRange) { 4920 SourceLocation EndLoc = Self.PP.getLocForEndOfToken(ParenRange.getEnd()); 4921 if (ParenRange.getBegin().isFileID() && ParenRange.getEnd().isFileID() && 4922 EndLoc.isValid()) { 4923 Self.Diag(Loc, Note) 4924 << FixItHint::CreateInsertion(ParenRange.getBegin(), "(") 4925 << FixItHint::CreateInsertion(EndLoc, ")"); 4926 } else { 4927 // We can't display the parentheses, so just show the bare note. 4928 Self.Diag(Loc, Note) << ParenRange; 4929 } 4930 } 4931 4932 static bool IsArithmeticOp(BinaryOperatorKind Opc) { 4933 return Opc >= BO_Mul && Opc <= BO_Shr; 4934 } 4935 4936 /// IsArithmeticBinaryExpr - Returns true if E is an arithmetic binary 4937 /// expression, either using a built-in or overloaded operator, 4938 /// and sets *OpCode to the opcode and *RHSExprs to the right-hand side 4939 /// expression. 4940 static bool IsArithmeticBinaryExpr(Expr *E, BinaryOperatorKind *Opcode, 4941 Expr **RHSExprs) { 4942 // Don't strip parenthesis: we should not warn if E is in parenthesis. 4943 E = E->IgnoreImpCasts(); 4944 E = E->IgnoreConversionOperator(); 4945 E = E->IgnoreImpCasts(); 4946 4947 // Built-in binary operator. 4948 if (BinaryOperator *OP = dyn_cast<BinaryOperator>(E)) { 4949 if (IsArithmeticOp(OP->getOpcode())) { 4950 *Opcode = OP->getOpcode(); 4951 *RHSExprs = OP->getRHS(); 4952 return true; 4953 } 4954 } 4955 4956 // Overloaded operator. 4957 if (CXXOperatorCallExpr *Call = dyn_cast<CXXOperatorCallExpr>(E)) { 4958 if (Call->getNumArgs() != 2) 4959 return false; 4960 4961 // Make sure this is really a binary operator that is safe to pass into 4962 // BinaryOperator::getOverloadedOpcode(), e.g. it's not a subscript op. 4963 OverloadedOperatorKind OO = Call->getOperator(); 4964 if (OO < OO_Plus || OO > OO_Arrow) 4965 return false; 4966 4967 BinaryOperatorKind OpKind = BinaryOperator::getOverloadedOpcode(OO); 4968 if (IsArithmeticOp(OpKind)) { 4969 *Opcode = OpKind; 4970 *RHSExprs = Call->getArg(1); 4971 return true; 4972 } 4973 } 4974 4975 return false; 4976 } 4977 4978 static bool IsLogicOp(BinaryOperatorKind Opc) { 4979 return (Opc >= BO_LT && Opc <= BO_NE) || (Opc >= BO_LAnd && Opc <= BO_LOr); 4980 } 4981 4982 /// ExprLooksBoolean - Returns true if E looks boolean, i.e. it has boolean type 4983 /// or is a logical expression such as (x==y) which has int type, but is 4984 /// commonly interpreted as boolean. 4985 static bool ExprLooksBoolean(Expr *E) { 4986 E = E->IgnoreParenImpCasts(); 4987 4988 if (E->getType()->isBooleanType()) 4989 return true; 4990 if (BinaryOperator *OP = dyn_cast<BinaryOperator>(E)) 4991 return IsLogicOp(OP->getOpcode()); 4992 if (UnaryOperator *OP = dyn_cast<UnaryOperator>(E)) 4993 return OP->getOpcode() == UO_LNot; 4994 4995 return false; 4996 } 4997 4998 /// DiagnoseConditionalPrecedence - Emit a warning when a conditional operator 4999 /// and binary operator are mixed in a way that suggests the programmer assumed 5000 /// the conditional operator has higher precedence, for example: 5001 /// "int x = a + someBinaryCondition ? 1 : 2". 5002 static void DiagnoseConditionalPrecedence(Sema &Self, 5003 SourceLocation OpLoc, 5004 Expr *Condition, 5005 Expr *LHSExpr, 5006 Expr *RHSExpr) { 5007 BinaryOperatorKind CondOpcode; 5008 Expr *CondRHS; 5009 5010 if (!IsArithmeticBinaryExpr(Condition, &CondOpcode, &CondRHS)) 5011 return; 5012 if (!ExprLooksBoolean(CondRHS)) 5013 return; 5014 5015 // The condition is an arithmetic binary expression, with a right- 5016 // hand side that looks boolean, so warn. 5017 5018 Self.Diag(OpLoc, diag::warn_precedence_conditional) 5019 << Condition->getSourceRange() 5020 << BinaryOperator::getOpcodeStr(CondOpcode); 5021 5022 SuggestParentheses(Self, OpLoc, 5023 Self.PDiag(diag::note_precedence_conditional_silence) 5024 << BinaryOperator::getOpcodeStr(CondOpcode), 5025 SourceRange(Condition->getLocStart(), Condition->getLocEnd())); 5026 5027 SuggestParentheses(Self, OpLoc, 5028 Self.PDiag(diag::note_precedence_conditional_first), 5029 SourceRange(CondRHS->getLocStart(), RHSExpr->getLocEnd())); 5030 } 5031 5032 /// ActOnConditionalOp - Parse a ?: operation. Note that 'LHS' may be null 5033 /// in the case of a the GNU conditional expr extension. 5034 ExprResult Sema::ActOnConditionalOp(SourceLocation QuestionLoc, 5035 SourceLocation ColonLoc, 5036 Expr *CondExpr, Expr *LHSExpr, 5037 Expr *RHSExpr) { 5038 // If this is the gnu "x ?: y" extension, analyze the types as though the LHS 5039 // was the condition. 5040 OpaqueValueExpr *opaqueValue = 0; 5041 Expr *commonExpr = 0; 5042 if (LHSExpr == 0) { 5043 commonExpr = CondExpr; 5044 5045 // We usually want to apply unary conversions *before* saving, except 5046 // in the special case of a C++ l-value conditional. 5047 if (!(getLangOptions().CPlusPlus 5048 && !commonExpr->isTypeDependent() 5049 && commonExpr->getValueKind() == RHSExpr->getValueKind() 5050 && commonExpr->isGLValue() 5051 && commonExpr->isOrdinaryOrBitFieldObject() 5052 && RHSExpr->isOrdinaryOrBitFieldObject() 5053 && Context.hasSameType(commonExpr->getType(), RHSExpr->getType()))) { 5054 ExprResult commonRes = UsualUnaryConversions(commonExpr); 5055 if (commonRes.isInvalid()) 5056 return ExprError(); 5057 commonExpr = commonRes.take(); 5058 } 5059 5060 opaqueValue = new (Context) OpaqueValueExpr(commonExpr->getExprLoc(), 5061 commonExpr->getType(), 5062 commonExpr->getValueKind(), 5063 commonExpr->getObjectKind()); 5064 LHSExpr = CondExpr = opaqueValue; 5065 } 5066 5067 ExprValueKind VK = VK_RValue; 5068 ExprObjectKind OK = OK_Ordinary; 5069 ExprResult Cond = Owned(CondExpr), LHS = Owned(LHSExpr), RHS = Owned(RHSExpr); 5070 QualType result = CheckConditionalOperands(Cond, LHS, RHS, 5071 VK, OK, QuestionLoc); 5072 if (result.isNull() || Cond.isInvalid() || LHS.isInvalid() || 5073 RHS.isInvalid()) 5074 return ExprError(); 5075 5076 DiagnoseConditionalPrecedence(*this, QuestionLoc, Cond.get(), LHS.get(), 5077 RHS.get()); 5078 5079 if (!commonExpr) 5080 return Owned(new (Context) ConditionalOperator(Cond.take(), QuestionLoc, 5081 LHS.take(), ColonLoc, 5082 RHS.take(), result, VK, OK)); 5083 5084 return Owned(new (Context) 5085 BinaryConditionalOperator(commonExpr, opaqueValue, Cond.take(), LHS.take(), 5086 RHS.take(), QuestionLoc, ColonLoc, result, VK, 5087 OK)); 5088 } 5089 5090 // checkPointerTypesForAssignment - This is a very tricky routine (despite 5091 // being closely modeled after the C99 spec:-). The odd characteristic of this 5092 // routine is it effectively iqnores the qualifiers on the top level pointee. 5093 // This circumvents the usual type rules specified in 6.2.7p1 & 6.7.5.[1-3]. 5094 // FIXME: add a couple examples in this comment. 5095 static Sema::AssignConvertType 5096 checkPointerTypesForAssignment(Sema &S, QualType LHSType, QualType RHSType) { 5097 assert(LHSType.isCanonical() && "LHS not canonicalized!"); 5098 assert(RHSType.isCanonical() && "RHS not canonicalized!"); 5099 5100 // get the "pointed to" type (ignoring qualifiers at the top level) 5101 const Type *lhptee, *rhptee; 5102 Qualifiers lhq, rhq; 5103 llvm::tie(lhptee, lhq) = cast<PointerType>(LHSType)->getPointeeType().split(); 5104 llvm::tie(rhptee, rhq) = cast<PointerType>(RHSType)->getPointeeType().split(); 5105 5106 Sema::AssignConvertType ConvTy = Sema::Compatible; 5107 5108 // C99 6.5.16.1p1: This following citation is common to constraints 5109 // 3 & 4 (below). ...and the type *pointed to* by the left has all the 5110 // qualifiers of the type *pointed to* by the right; 5111 Qualifiers lq; 5112 5113 // As a special case, 'non-__weak A *' -> 'non-__weak const *' is okay. 5114 if (lhq.getObjCLifetime() != rhq.getObjCLifetime() && 5115 lhq.compatiblyIncludesObjCLifetime(rhq)) { 5116 // Ignore lifetime for further calculation. 5117 lhq.removeObjCLifetime(); 5118 rhq.removeObjCLifetime(); 5119 } 5120 5121 if (!lhq.compatiblyIncludes(rhq)) { 5122 // Treat address-space mismatches as fatal. TODO: address subspaces 5123 if (lhq.getAddressSpace() != rhq.getAddressSpace()) 5124 ConvTy = Sema::IncompatiblePointerDiscardsQualifiers; 5125 5126 // It's okay to add or remove GC or lifetime qualifiers when converting to 5127 // and from void*. 5128 else if (lhq.withoutObjCGCAttr().withoutObjCGLifetime() 5129 .compatiblyIncludes( 5130 rhq.withoutObjCGCAttr().withoutObjCGLifetime()) 5131 && (lhptee->isVoidType() || rhptee->isVoidType())) 5132 ; // keep old 5133 5134 // Treat lifetime mismatches as fatal. 5135 else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) 5136 ConvTy = Sema::IncompatiblePointerDiscardsQualifiers; 5137 5138 // For GCC compatibility, other qualifier mismatches are treated 5139 // as still compatible in C. 5140 else ConvTy = Sema::CompatiblePointerDiscardsQualifiers; 5141 } 5142 5143 // C99 6.5.16.1p1 (constraint 4): If one operand is a pointer to an object or 5144 // incomplete type and the other is a pointer to a qualified or unqualified 5145 // version of void... 5146 if (lhptee->isVoidType()) { 5147 if (rhptee->isIncompleteOrObjectType()) 5148 return ConvTy; 5149 5150 // As an extension, we allow cast to/from void* to function pointer. 5151 assert(rhptee->isFunctionType()); 5152 return Sema::FunctionVoidPointer; 5153 } 5154 5155 if (rhptee->isVoidType()) { 5156 if (lhptee->isIncompleteOrObjectType()) 5157 return ConvTy; 5158 5159 // As an extension, we allow cast to/from void* to function pointer. 5160 assert(lhptee->isFunctionType()); 5161 return Sema::FunctionVoidPointer; 5162 } 5163 5164 // C99 6.5.16.1p1 (constraint 3): both operands are pointers to qualified or 5165 // unqualified versions of compatible types, ... 5166 QualType ltrans = QualType(lhptee, 0), rtrans = QualType(rhptee, 0); 5167 if (!S.Context.typesAreCompatible(ltrans, rtrans)) { 5168 // Check if the pointee types are compatible ignoring the sign. 5169 // We explicitly check for char so that we catch "char" vs 5170 // "unsigned char" on systems where "char" is unsigned. 5171 if (lhptee->isCharType()) 5172 ltrans = S.Context.UnsignedCharTy; 5173 else if (lhptee->hasSignedIntegerRepresentation()) 5174 ltrans = S.Context.getCorrespondingUnsignedType(ltrans); 5175 5176 if (rhptee->isCharType()) 5177 rtrans = S.Context.UnsignedCharTy; 5178 else if (rhptee->hasSignedIntegerRepresentation()) 5179 rtrans = S.Context.getCorrespondingUnsignedType(rtrans); 5180 5181 if (ltrans == rtrans) { 5182 // Types are compatible ignoring the sign. Qualifier incompatibility 5183 // takes priority over sign incompatibility because the sign 5184 // warning can be disabled. 5185 if (ConvTy != Sema::Compatible) 5186 return ConvTy; 5187 5188 return Sema::IncompatiblePointerSign; 5189 } 5190 5191 // If we are a multi-level pointer, it's possible that our issue is simply 5192 // one of qualification - e.g. char ** -> const char ** is not allowed. If 5193 // the eventual target type is the same and the pointers have the same 5194 // level of indirection, this must be the issue. 5195 if (isa<PointerType>(lhptee) && isa<PointerType>(rhptee)) { 5196 do { 5197 lhptee = cast<PointerType>(lhptee)->getPointeeType().getTypePtr(); 5198 rhptee = cast<PointerType>(rhptee)->getPointeeType().getTypePtr(); 5199 } while (isa<PointerType>(lhptee) && isa<PointerType>(rhptee)); 5200 5201 if (lhptee == rhptee) 5202 return Sema::IncompatibleNestedPointerQualifiers; 5203 } 5204 5205 // General pointer incompatibility takes priority over qualifiers. 5206 return Sema::IncompatiblePointer; 5207 } 5208 if (!S.getLangOptions().CPlusPlus && 5209 S.IsNoReturnConversion(ltrans, rtrans, ltrans)) 5210 return Sema::IncompatiblePointer; 5211 return ConvTy; 5212 } 5213 5214 /// checkBlockPointerTypesForAssignment - This routine determines whether two 5215 /// block pointer types are compatible or whether a block and normal pointer 5216 /// are compatible. It is more restrict than comparing two function pointer 5217 // types. 5218 static Sema::AssignConvertType 5219 checkBlockPointerTypesForAssignment(Sema &S, QualType LHSType, 5220 QualType RHSType) { 5221 assert(LHSType.isCanonical() && "LHS not canonicalized!"); 5222 assert(RHSType.isCanonical() && "RHS not canonicalized!"); 5223 5224 QualType lhptee, rhptee; 5225 5226 // get the "pointed to" type (ignoring qualifiers at the top level) 5227 lhptee = cast<BlockPointerType>(LHSType)->getPointeeType(); 5228 rhptee = cast<BlockPointerType>(RHSType)->getPointeeType(); 5229 5230 // In C++, the types have to match exactly. 5231 if (S.getLangOptions().CPlusPlus) 5232 return Sema::IncompatibleBlockPointer; 5233 5234 Sema::AssignConvertType ConvTy = Sema::Compatible; 5235 5236 // For blocks we enforce that qualifiers are identical. 5237 if (lhptee.getLocalQualifiers() != rhptee.getLocalQualifiers()) 5238 ConvTy = Sema::CompatiblePointerDiscardsQualifiers; 5239 5240 if (!S.Context.typesAreBlockPointerCompatible(LHSType, RHSType)) 5241 return Sema::IncompatibleBlockPointer; 5242 5243 return ConvTy; 5244 } 5245 5246 /// checkObjCPointerTypesForAssignment - Compares two objective-c pointer types 5247 /// for assignment compatibility. 5248 static Sema::AssignConvertType 5249 checkObjCPointerTypesForAssignment(Sema &S, QualType LHSType, 5250 QualType RHSType) { 5251 assert(LHSType.isCanonical() && "LHS was not canonicalized!"); 5252 assert(RHSType.isCanonical() && "RHS was not canonicalized!"); 5253 5254 if (LHSType->isObjCBuiltinType()) { 5255 // Class is not compatible with ObjC object pointers. 5256 if (LHSType->isObjCClassType() && !RHSType->isObjCBuiltinType() && 5257 !RHSType->isObjCQualifiedClassType()) 5258 return Sema::IncompatiblePointer; 5259 return Sema::Compatible; 5260 } 5261 if (RHSType->isObjCBuiltinType()) { 5262 if (RHSType->isObjCClassType() && !LHSType->isObjCBuiltinType() && 5263 !LHSType->isObjCQualifiedClassType()) 5264 return Sema::IncompatiblePointer; 5265 return Sema::Compatible; 5266 } 5267 QualType lhptee = LHSType->getAs<ObjCObjectPointerType>()->getPointeeType(); 5268 QualType rhptee = RHSType->getAs<ObjCObjectPointerType>()->getPointeeType(); 5269 5270 if (!lhptee.isAtLeastAsQualifiedAs(rhptee)) 5271 return Sema::CompatiblePointerDiscardsQualifiers; 5272 5273 if (S.Context.typesAreCompatible(LHSType, RHSType)) 5274 return Sema::Compatible; 5275 if (LHSType->isObjCQualifiedIdType() || RHSType->isObjCQualifiedIdType()) 5276 return Sema::IncompatibleObjCQualifiedId; 5277 return Sema::IncompatiblePointer; 5278 } 5279 5280 Sema::AssignConvertType 5281 Sema::CheckAssignmentConstraints(SourceLocation Loc, 5282 QualType LHSType, QualType RHSType) { 5283 // Fake up an opaque expression. We don't actually care about what 5284 // cast operations are required, so if CheckAssignmentConstraints 5285 // adds casts to this they'll be wasted, but fortunately that doesn't 5286 // usually happen on valid code. 5287 OpaqueValueExpr RHSExpr(Loc, RHSType, VK_RValue); 5288 ExprResult RHSPtr = &RHSExpr; 5289 CastKind K = CK_Invalid; 5290 5291 return CheckAssignmentConstraints(LHSType, RHSPtr, K); 5292 } 5293 5294 /// CheckAssignmentConstraints (C99 6.5.16) - This routine currently 5295 /// has code to accommodate several GCC extensions when type checking 5296 /// pointers. Here are some objectionable examples that GCC considers warnings: 5297 /// 5298 /// int a, *pint; 5299 /// short *pshort; 5300 /// struct foo *pfoo; 5301 /// 5302 /// pint = pshort; // warning: assignment from incompatible pointer type 5303 /// a = pint; // warning: assignment makes integer from pointer without a cast 5304 /// pint = a; // warning: assignment makes pointer from integer without a cast 5305 /// pint = pfoo; // warning: assignment from incompatible pointer type 5306 /// 5307 /// As a result, the code for dealing with pointers is more complex than the 5308 /// C99 spec dictates. 5309 /// 5310 /// Sets 'Kind' for any result kind except Incompatible. 5311 Sema::AssignConvertType 5312 Sema::CheckAssignmentConstraints(QualType LHSType, ExprResult &RHS, 5313 CastKind &Kind) { 5314 QualType RHSType = RHS.get()->getType(); 5315 QualType OrigLHSType = LHSType; 5316 5317 // Get canonical types. We're not formatting these types, just comparing 5318 // them. 5319 LHSType = Context.getCanonicalType(LHSType).getUnqualifiedType(); 5320 RHSType = Context.getCanonicalType(RHSType).getUnqualifiedType(); 5321 5322 // We can't do assignment from/to atomics yet. 5323 if (LHSType->isAtomicType()) 5324 return Incompatible; 5325 5326 // Common case: no conversion required. 5327 if (LHSType == RHSType) { 5328 Kind = CK_NoOp; 5329 return Compatible; 5330 } 5331 5332 // If the left-hand side is a reference type, then we are in a 5333 // (rare!) case where we've allowed the use of references in C, 5334 // e.g., as a parameter type in a built-in function. In this case, 5335 // just make sure that the type referenced is compatible with the 5336 // right-hand side type. The caller is responsible for adjusting 5337 // LHSType so that the resulting expression does not have reference 5338 // type. 5339 if (const ReferenceType *LHSTypeRef = LHSType->getAs<ReferenceType>()) { 5340 if (Context.typesAreCompatible(LHSTypeRef->getPointeeType(), RHSType)) { 5341 Kind = CK_LValueBitCast; 5342 return Compatible; 5343 } 5344 return Incompatible; 5345 } 5346 5347 // Allow scalar to ExtVector assignments, and assignments of an ExtVector type 5348 // to the same ExtVector type. 5349 if (LHSType->isExtVectorType()) { 5350 if (RHSType->isExtVectorType()) 5351 return Incompatible; 5352 if (RHSType->isArithmeticType()) { 5353 // CK_VectorSplat does T -> vector T, so first cast to the 5354 // element type. 5355 QualType elType = cast<ExtVectorType>(LHSType)->getElementType(); 5356 if (elType != RHSType) { 5357 Kind = PrepareScalarCast(RHS, elType); 5358 RHS = ImpCastExprToType(RHS.take(), elType, Kind); 5359 } 5360 Kind = CK_VectorSplat; 5361 return Compatible; 5362 } 5363 } 5364 5365 // Conversions to or from vector type. 5366 if (LHSType->isVectorType() || RHSType->isVectorType()) { 5367 if (LHSType->isVectorType() && RHSType->isVectorType()) { 5368 // Allow assignments of an AltiVec vector type to an equivalent GCC 5369 // vector type and vice versa 5370 if (Context.areCompatibleVectorTypes(LHSType, RHSType)) { 5371 Kind = CK_BitCast; 5372 return Compatible; 5373 } 5374 5375 // If we are allowing lax vector conversions, and LHS and RHS are both 5376 // vectors, the total size only needs to be the same. This is a bitcast; 5377 // no bits are changed but the result type is different. 5378 if (getLangOptions().LaxVectorConversions && 5379 (Context.getTypeSize(LHSType) == Context.getTypeSize(RHSType))) { 5380 Kind = CK_BitCast; 5381 return IncompatibleVectors; 5382 } 5383 } 5384 return Incompatible; 5385 } 5386 5387 // Arithmetic conversions. 5388 if (LHSType->isArithmeticType() && RHSType->isArithmeticType() && 5389 !(getLangOptions().CPlusPlus && LHSType->isEnumeralType())) { 5390 Kind = PrepareScalarCast(RHS, LHSType); 5391 return Compatible; 5392 } 5393 5394 // Conversions to normal pointers. 5395 if (const PointerType *LHSPointer = dyn_cast<PointerType>(LHSType)) { 5396 // U* -> T* 5397 if (isa<PointerType>(RHSType)) { 5398 Kind = CK_BitCast; 5399 return checkPointerTypesForAssignment(*this, LHSType, RHSType); 5400 } 5401 5402 // int -> T* 5403 if (RHSType->isIntegerType()) { 5404 Kind = CK_IntegralToPointer; // FIXME: null? 5405 return IntToPointer; 5406 } 5407 5408 // C pointers are not compatible with ObjC object pointers, 5409 // with two exceptions: 5410 if (isa<ObjCObjectPointerType>(RHSType)) { 5411 // - conversions to void* 5412 if (LHSPointer->getPointeeType()->isVoidType()) { 5413 Kind = CK_BitCast; 5414 return Compatible; 5415 } 5416 5417 // - conversions from 'Class' to the redefinition type 5418 if (RHSType->isObjCClassType() && 5419 Context.hasSameType(LHSType, 5420 Context.getObjCClassRedefinitionType())) { 5421 Kind = CK_BitCast; 5422 return Compatible; 5423 } 5424 5425 Kind = CK_BitCast; 5426 return IncompatiblePointer; 5427 } 5428 5429 // U^ -> void* 5430 if (RHSType->getAs<BlockPointerType>()) { 5431 if (LHSPointer->getPointeeType()->isVoidType()) { 5432 Kind = CK_BitCast; 5433 return Compatible; 5434 } 5435 } 5436 5437 return Incompatible; 5438 } 5439 5440 // Conversions to block pointers. 5441 if (isa<BlockPointerType>(LHSType)) { 5442 // U^ -> T^ 5443 if (RHSType->isBlockPointerType()) { 5444 Kind = CK_BitCast; 5445 return checkBlockPointerTypesForAssignment(*this, LHSType, RHSType); 5446 } 5447 5448 // int or null -> T^ 5449 if (RHSType->isIntegerType()) { 5450 Kind = CK_IntegralToPointer; // FIXME: null 5451 return IntToBlockPointer; 5452 } 5453 5454 // id -> T^ 5455 if (getLangOptions().ObjC1 && RHSType->isObjCIdType()) { 5456 Kind = CK_AnyPointerToBlockPointerCast; 5457 return Compatible; 5458 } 5459 5460 // void* -> T^ 5461 if (const PointerType *RHSPT = RHSType->getAs<PointerType>()) 5462 if (RHSPT->getPointeeType()->isVoidType()) { 5463 Kind = CK_AnyPointerToBlockPointerCast; 5464 return Compatible; 5465 } 5466 5467 return Incompatible; 5468 } 5469 5470 // Conversions to Objective-C pointers. 5471 if (isa<ObjCObjectPointerType>(LHSType)) { 5472 // A* -> B* 5473 if (RHSType->isObjCObjectPointerType()) { 5474 Kind = CK_BitCast; 5475 Sema::AssignConvertType result = 5476 checkObjCPointerTypesForAssignment(*this, LHSType, RHSType); 5477 if (getLangOptions().ObjCAutoRefCount && 5478 result == Compatible && 5479 !CheckObjCARCUnavailableWeakConversion(OrigLHSType, RHSType)) 5480 result = IncompatibleObjCWeakRef; 5481 return result; 5482 } 5483 5484 // int or null -> A* 5485 if (RHSType->isIntegerType()) { 5486 Kind = CK_IntegralToPointer; // FIXME: null 5487 return IntToPointer; 5488 } 5489 5490 // In general, C pointers are not compatible with ObjC object pointers, 5491 // with two exceptions: 5492 if (isa<PointerType>(RHSType)) { 5493 Kind = CK_CPointerToObjCPointerCast; 5494 5495 // - conversions from 'void*' 5496 if (RHSType->isVoidPointerType()) { 5497 return Compatible; 5498 } 5499 5500 // - conversions to 'Class' from its redefinition type 5501 if (LHSType->isObjCClassType() && 5502 Context.hasSameType(RHSType, 5503 Context.getObjCClassRedefinitionType())) { 5504 return Compatible; 5505 } 5506 5507 return IncompatiblePointer; 5508 } 5509 5510 // T^ -> A* 5511 if (RHSType->isBlockPointerType()) { 5512 maybeExtendBlockObject(*this, RHS); 5513 Kind = CK_BlockPointerToObjCPointerCast; 5514 return Compatible; 5515 } 5516 5517 return Incompatible; 5518 } 5519 5520 // Conversions from pointers that are not covered by the above. 5521 if (isa<PointerType>(RHSType)) { 5522 // T* -> _Bool 5523 if (LHSType == Context.BoolTy) { 5524 Kind = CK_PointerToBoolean; 5525 return Compatible; 5526 } 5527 5528 // T* -> int 5529 if (LHSType->isIntegerType()) { 5530 Kind = CK_PointerToIntegral; 5531 return PointerToInt; 5532 } 5533 5534 return Incompatible; 5535 } 5536 5537 // Conversions from Objective-C pointers that are not covered by the above. 5538 if (isa<ObjCObjectPointerType>(RHSType)) { 5539 // T* -> _Bool 5540 if (LHSType == Context.BoolTy) { 5541 Kind = CK_PointerToBoolean; 5542 return Compatible; 5543 } 5544 5545 // T* -> int 5546 if (LHSType->isIntegerType()) { 5547 Kind = CK_PointerToIntegral; 5548 return PointerToInt; 5549 } 5550 5551 return Incompatible; 5552 } 5553 5554 // struct A -> struct B 5555 if (isa<TagType>(LHSType) && isa<TagType>(RHSType)) { 5556 if (Context.typesAreCompatible(LHSType, RHSType)) { 5557 Kind = CK_NoOp; 5558 return Compatible; 5559 } 5560 } 5561 5562 return Incompatible; 5563 } 5564 5565 /// \brief Constructs a transparent union from an expression that is 5566 /// used to initialize the transparent union. 5567 static void ConstructTransparentUnion(Sema &S, ASTContext &C, 5568 ExprResult &EResult, QualType UnionType, 5569 FieldDecl *Field) { 5570 // Build an initializer list that designates the appropriate member 5571 // of the transparent union. 5572 Expr *E = EResult.take(); 5573 InitListExpr *Initializer = new (C) InitListExpr(C, SourceLocation(), 5574 &E, 1, 5575 SourceLocation()); 5576 Initializer->setType(UnionType); 5577 Initializer->setInitializedFieldInUnion(Field); 5578 5579 // Build a compound literal constructing a value of the transparent 5580 // union type from this initializer list. 5581 TypeSourceInfo *unionTInfo = C.getTrivialTypeSourceInfo(UnionType); 5582 EResult = S.Owned( 5583 new (C) CompoundLiteralExpr(SourceLocation(), unionTInfo, UnionType, 5584 VK_RValue, Initializer, false)); 5585 } 5586 5587 Sema::AssignConvertType 5588 Sema::CheckTransparentUnionArgumentConstraints(QualType ArgType, 5589 ExprResult &RHS) { 5590 QualType RHSType = RHS.get()->getType(); 5591 5592 // If the ArgType is a Union type, we want to handle a potential 5593 // transparent_union GCC extension. 5594 const RecordType *UT = ArgType->getAsUnionType(); 5595 if (!UT || !UT->getDecl()->hasAttr<TransparentUnionAttr>()) 5596 return Incompatible; 5597 5598 // The field to initialize within the transparent union. 5599 RecordDecl *UD = UT->getDecl(); 5600 FieldDecl *InitField = 0; 5601 // It's compatible if the expression matches any of the fields. 5602 for (RecordDecl::field_iterator it = UD->field_begin(), 5603 itend = UD->field_end(); 5604 it != itend; ++it) { 5605 if (it->getType()->isPointerType()) { 5606 // If the transparent union contains a pointer type, we allow: 5607 // 1) void pointer 5608 // 2) null pointer constant 5609 if (RHSType->isPointerType()) 5610 if (RHSType->castAs<PointerType>()->getPointeeType()->isVoidType()) { 5611 RHS = ImpCastExprToType(RHS.take(), it->getType(), CK_BitCast); 5612 InitField = *it; 5613 break; 5614 } 5615 5616 if (RHS.get()->isNullPointerConstant(Context, 5617 Expr::NPC_ValueDependentIsNull)) { 5618 RHS = ImpCastExprToType(RHS.take(), it->getType(), 5619 CK_NullToPointer); 5620 InitField = *it; 5621 break; 5622 } 5623 } 5624 5625 CastKind Kind = CK_Invalid; 5626 if (CheckAssignmentConstraints(it->getType(), RHS, Kind) 5627 == Compatible) { 5628 RHS = ImpCastExprToType(RHS.take(), it->getType(), Kind); 5629 InitField = *it; 5630 break; 5631 } 5632 } 5633 5634 if (!InitField) 5635 return Incompatible; 5636 5637 ConstructTransparentUnion(*this, Context, RHS, ArgType, InitField); 5638 return Compatible; 5639 } 5640 5641 Sema::AssignConvertType 5642 Sema::CheckSingleAssignmentConstraints(QualType LHSType, ExprResult &RHS, 5643 bool Diagnose) { 5644 if (getLangOptions().CPlusPlus) { 5645 if (!LHSType->isRecordType() && !LHSType->isAtomicType()) { 5646 // C++ 5.17p3: If the left operand is not of class type, the 5647 // expression is implicitly converted (C++ 4) to the 5648 // cv-unqualified type of the left operand. 5649 ExprResult Res; 5650 if (Diagnose) { 5651 Res = PerformImplicitConversion(RHS.get(), LHSType.getUnqualifiedType(), 5652 AA_Assigning); 5653 } else { 5654 ImplicitConversionSequence ICS = 5655 TryImplicitConversion(RHS.get(), LHSType.getUnqualifiedType(), 5656 /*SuppressUserConversions=*/false, 5657 /*AllowExplicit=*/false, 5658 /*InOverloadResolution=*/false, 5659 /*CStyle=*/false, 5660 /*AllowObjCWritebackConversion=*/false); 5661 if (ICS.isFailure()) 5662 return Incompatible; 5663 Res = PerformImplicitConversion(RHS.get(), LHSType.getUnqualifiedType(), 5664 ICS, AA_Assigning); 5665 } 5666 if (Res.isInvalid()) 5667 return Incompatible; 5668 Sema::AssignConvertType result = Compatible; 5669 if (getLangOptions().ObjCAutoRefCount && 5670 !CheckObjCARCUnavailableWeakConversion(LHSType, 5671 RHS.get()->getType())) 5672 result = IncompatibleObjCWeakRef; 5673 RHS = move(Res); 5674 return result; 5675 } 5676 5677 // FIXME: Currently, we fall through and treat C++ classes like C 5678 // structures. 5679 // FIXME: We also fall through for atomics; not sure what should 5680 // happen there, though. 5681 } 5682 5683 // C99 6.5.16.1p1: the left operand is a pointer and the right is 5684 // a null pointer constant. 5685 if ((LHSType->isPointerType() || 5686 LHSType->isObjCObjectPointerType() || 5687 LHSType->isBlockPointerType()) 5688 && RHS.get()->isNullPointerConstant(Context, 5689 Expr::NPC_ValueDependentIsNull)) { 5690 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_NullToPointer); 5691 return Compatible; 5692 } 5693 5694 // This check seems unnatural, however it is necessary to ensure the proper 5695 // conversion of functions/arrays. If the conversion were done for all 5696 // DeclExpr's (created by ActOnIdExpression), it would mess up the unary 5697 // expressions that suppress this implicit conversion (&, sizeof). 5698 // 5699 // Suppress this for references: C++ 8.5.3p5. 5700 if (!LHSType->isReferenceType()) { 5701 RHS = DefaultFunctionArrayLvalueConversion(RHS.take()); 5702 if (RHS.isInvalid()) 5703 return Incompatible; 5704 } 5705 5706 CastKind Kind = CK_Invalid; 5707 Sema::AssignConvertType result = 5708 CheckAssignmentConstraints(LHSType, RHS, Kind); 5709 5710 // C99 6.5.16.1p2: The value of the right operand is converted to the 5711 // type of the assignment expression. 5712 // CheckAssignmentConstraints allows the left-hand side to be a reference, 5713 // so that we can use references in built-in functions even in C. 5714 // The getNonReferenceType() call makes sure that the resulting expression 5715 // does not have reference type. 5716 if (result != Incompatible && RHS.get()->getType() != LHSType) 5717 RHS = ImpCastExprToType(RHS.take(), 5718 LHSType.getNonLValueExprType(Context), Kind); 5719 return result; 5720 } 5721 5722 QualType Sema::InvalidOperands(SourceLocation Loc, ExprResult &LHS, 5723 ExprResult &RHS) { 5724 Diag(Loc, diag::err_typecheck_invalid_operands) 5725 << LHS.get()->getType() << RHS.get()->getType() 5726 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 5727 return QualType(); 5728 } 5729 5730 QualType Sema::CheckVectorOperands(ExprResult &LHS, ExprResult &RHS, 5731 SourceLocation Loc, bool IsCompAssign) { 5732 if (!IsCompAssign) { 5733 LHS = DefaultFunctionArrayLvalueConversion(LHS.take()); 5734 if (LHS.isInvalid()) 5735 return QualType(); 5736 } 5737 RHS = DefaultFunctionArrayLvalueConversion(RHS.take()); 5738 if (RHS.isInvalid()) 5739 return QualType(); 5740 5741 // For conversion purposes, we ignore any qualifiers. 5742 // For example, "const float" and "float" are equivalent. 5743 QualType LHSType = 5744 Context.getCanonicalType(LHS.get()->getType()).getUnqualifiedType(); 5745 QualType RHSType = 5746 Context.getCanonicalType(RHS.get()->getType()).getUnqualifiedType(); 5747 5748 // If the vector types are identical, return. 5749 if (LHSType == RHSType) 5750 return LHSType; 5751 5752 // Handle the case of equivalent AltiVec and GCC vector types 5753 if (LHSType->isVectorType() && RHSType->isVectorType() && 5754 Context.areCompatibleVectorTypes(LHSType, RHSType)) { 5755 if (LHSType->isExtVectorType()) { 5756 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_BitCast); 5757 return LHSType; 5758 } 5759 5760 if (!IsCompAssign) 5761 LHS = ImpCastExprToType(LHS.take(), RHSType, CK_BitCast); 5762 return RHSType; 5763 } 5764 5765 if (getLangOptions().LaxVectorConversions && 5766 Context.getTypeSize(LHSType) == Context.getTypeSize(RHSType)) { 5767 // If we are allowing lax vector conversions, and LHS and RHS are both 5768 // vectors, the total size only needs to be the same. This is a 5769 // bitcast; no bits are changed but the result type is different. 5770 // FIXME: Should we really be allowing this? 5771 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_BitCast); 5772 return LHSType; 5773 } 5774 5775 // Canonicalize the ExtVector to the LHS, remember if we swapped so we can 5776 // swap back (so that we don't reverse the inputs to a subtract, for instance. 5777 bool swapped = false; 5778 if (RHSType->isExtVectorType() && !IsCompAssign) { 5779 swapped = true; 5780 std::swap(RHS, LHS); 5781 std::swap(RHSType, LHSType); 5782 } 5783 5784 // Handle the case of an ext vector and scalar. 5785 if (const ExtVectorType *LV = LHSType->getAs<ExtVectorType>()) { 5786 QualType EltTy = LV->getElementType(); 5787 if (EltTy->isIntegralType(Context) && RHSType->isIntegralType(Context)) { 5788 int order = Context.getIntegerTypeOrder(EltTy, RHSType); 5789 if (order > 0) 5790 RHS = ImpCastExprToType(RHS.take(), EltTy, CK_IntegralCast); 5791 if (order >= 0) { 5792 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_VectorSplat); 5793 if (swapped) std::swap(RHS, LHS); 5794 return LHSType; 5795 } 5796 } 5797 if (EltTy->isRealFloatingType() && RHSType->isScalarType() && 5798 RHSType->isRealFloatingType()) { 5799 int order = Context.getFloatingTypeOrder(EltTy, RHSType); 5800 if (order > 0) 5801 RHS = ImpCastExprToType(RHS.take(), EltTy, CK_FloatingCast); 5802 if (order >= 0) { 5803 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_VectorSplat); 5804 if (swapped) std::swap(RHS, LHS); 5805 return LHSType; 5806 } 5807 } 5808 } 5809 5810 // Vectors of different size or scalar and non-ext-vector are errors. 5811 if (swapped) std::swap(RHS, LHS); 5812 Diag(Loc, diag::err_typecheck_vector_not_convertable) 5813 << LHS.get()->getType() << RHS.get()->getType() 5814 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 5815 return QualType(); 5816 } 5817 5818 // checkArithmeticNull - Detect when a NULL constant is used improperly in an 5819 // expression. These are mainly cases where the null pointer is used as an 5820 // integer instead of a pointer. 5821 static void checkArithmeticNull(Sema &S, ExprResult &LHS, ExprResult &RHS, 5822 SourceLocation Loc, bool IsCompare) { 5823 // The canonical way to check for a GNU null is with isNullPointerConstant, 5824 // but we use a bit of a hack here for speed; this is a relatively 5825 // hot path, and isNullPointerConstant is slow. 5826 bool LHSNull = isa<GNUNullExpr>(LHS.get()->IgnoreParenImpCasts()); 5827 bool RHSNull = isa<GNUNullExpr>(RHS.get()->IgnoreParenImpCasts()); 5828 5829 QualType NonNullType = LHSNull ? RHS.get()->getType() : LHS.get()->getType(); 5830 5831 // Avoid analyzing cases where the result will either be invalid (and 5832 // diagnosed as such) or entirely valid and not something to warn about. 5833 if ((!LHSNull && !RHSNull) || NonNullType->isBlockPointerType() || 5834 NonNullType->isMemberPointerType() || NonNullType->isFunctionType()) 5835 return; 5836 5837 // Comparison operations would not make sense with a null pointer no matter 5838 // what the other expression is. 5839 if (!IsCompare) { 5840 S.Diag(Loc, diag::warn_null_in_arithmetic_operation) 5841 << (LHSNull ? LHS.get()->getSourceRange() : SourceRange()) 5842 << (RHSNull ? RHS.get()->getSourceRange() : SourceRange()); 5843 return; 5844 } 5845 5846 // The rest of the operations only make sense with a null pointer 5847 // if the other expression is a pointer. 5848 if (LHSNull == RHSNull || NonNullType->isAnyPointerType() || 5849 NonNullType->canDecayToPointerType()) 5850 return; 5851 5852 S.Diag(Loc, diag::warn_null_in_comparison_operation) 5853 << LHSNull /* LHS is NULL */ << NonNullType 5854 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 5855 } 5856 5857 QualType Sema::CheckMultiplyDivideOperands(ExprResult &LHS, ExprResult &RHS, 5858 SourceLocation Loc, 5859 bool IsCompAssign, bool IsDiv) { 5860 checkArithmeticNull(*this, LHS, RHS, Loc, /*isCompare=*/false); 5861 5862 if (LHS.get()->getType()->isVectorType() || 5863 RHS.get()->getType()->isVectorType()) 5864 return CheckVectorOperands(LHS, RHS, Loc, IsCompAssign); 5865 5866 QualType compType = UsualArithmeticConversions(LHS, RHS, IsCompAssign); 5867 if (LHS.isInvalid() || RHS.isInvalid()) 5868 return QualType(); 5869 5870 if (!LHS.get()->getType()->isArithmeticType() || 5871 !RHS.get()->getType()->isArithmeticType()) 5872 return InvalidOperands(Loc, LHS, RHS); 5873 5874 // Check for division by zero. 5875 if (IsDiv && 5876 RHS.get()->isNullPointerConstant(Context, 5877 Expr::NPC_ValueDependentIsNotNull)) 5878 DiagRuntimeBehavior(Loc, RHS.get(), PDiag(diag::warn_division_by_zero) 5879 << RHS.get()->getSourceRange()); 5880 5881 return compType; 5882 } 5883 5884 QualType Sema::CheckRemainderOperands( 5885 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) { 5886 checkArithmeticNull(*this, LHS, RHS, Loc, /*isCompare=*/false); 5887 5888 if (LHS.get()->getType()->isVectorType() || 5889 RHS.get()->getType()->isVectorType()) { 5890 if (LHS.get()->getType()->hasIntegerRepresentation() && 5891 RHS.get()->getType()->hasIntegerRepresentation()) 5892 return CheckVectorOperands(LHS, RHS, Loc, IsCompAssign); 5893 return InvalidOperands(Loc, LHS, RHS); 5894 } 5895 5896 QualType compType = UsualArithmeticConversions(LHS, RHS, IsCompAssign); 5897 if (LHS.isInvalid() || RHS.isInvalid()) 5898 return QualType(); 5899 5900 if (!LHS.get()->getType()->isIntegerType() || 5901 !RHS.get()->getType()->isIntegerType()) 5902 return InvalidOperands(Loc, LHS, RHS); 5903 5904 // Check for remainder by zero. 5905 if (RHS.get()->isNullPointerConstant(Context, 5906 Expr::NPC_ValueDependentIsNotNull)) 5907 DiagRuntimeBehavior(Loc, RHS.get(), PDiag(diag::warn_remainder_by_zero) 5908 << RHS.get()->getSourceRange()); 5909 5910 return compType; 5911 } 5912 5913 /// \brief Diagnose invalid arithmetic on two void pointers. 5914 static void diagnoseArithmeticOnTwoVoidPointers(Sema &S, SourceLocation Loc, 5915 Expr *LHSExpr, Expr *RHSExpr) { 5916 S.Diag(Loc, S.getLangOptions().CPlusPlus 5917 ? diag::err_typecheck_pointer_arith_void_type 5918 : diag::ext_gnu_void_ptr) 5919 << 1 /* two pointers */ << LHSExpr->getSourceRange() 5920 << RHSExpr->getSourceRange(); 5921 } 5922 5923 /// \brief Diagnose invalid arithmetic on a void pointer. 5924 static void diagnoseArithmeticOnVoidPointer(Sema &S, SourceLocation Loc, 5925 Expr *Pointer) { 5926 S.Diag(Loc, S.getLangOptions().CPlusPlus 5927 ? diag::err_typecheck_pointer_arith_void_type 5928 : diag::ext_gnu_void_ptr) 5929 << 0 /* one pointer */ << Pointer->getSourceRange(); 5930 } 5931 5932 /// \brief Diagnose invalid arithmetic on two function pointers. 5933 static void diagnoseArithmeticOnTwoFunctionPointers(Sema &S, SourceLocation Loc, 5934 Expr *LHS, Expr *RHS) { 5935 assert(LHS->getType()->isAnyPointerType()); 5936 assert(RHS->getType()->isAnyPointerType()); 5937 S.Diag(Loc, S.getLangOptions().CPlusPlus 5938 ? diag::err_typecheck_pointer_arith_function_type 5939 : diag::ext_gnu_ptr_func_arith) 5940 << 1 /* two pointers */ << LHS->getType()->getPointeeType() 5941 // We only show the second type if it differs from the first. 5942 << (unsigned)!S.Context.hasSameUnqualifiedType(LHS->getType(), 5943 RHS->getType()) 5944 << RHS->getType()->getPointeeType() 5945 << LHS->getSourceRange() << RHS->getSourceRange(); 5946 } 5947 5948 /// \brief Diagnose invalid arithmetic on a function pointer. 5949 static void diagnoseArithmeticOnFunctionPointer(Sema &S, SourceLocation Loc, 5950 Expr *Pointer) { 5951 assert(Pointer->getType()->isAnyPointerType()); 5952 S.Diag(Loc, S.getLangOptions().CPlusPlus 5953 ? diag::err_typecheck_pointer_arith_function_type 5954 : diag::ext_gnu_ptr_func_arith) 5955 << 0 /* one pointer */ << Pointer->getType()->getPointeeType() 5956 << 0 /* one pointer, so only one type */ 5957 << Pointer->getSourceRange(); 5958 } 5959 5960 /// \brief Emit error if Operand is incomplete pointer type 5961 /// 5962 /// \returns True if pointer has incomplete type 5963 static bool checkArithmeticIncompletePointerType(Sema &S, SourceLocation Loc, 5964 Expr *Operand) { 5965 if ((Operand->getType()->isPointerType() && 5966 !Operand->getType()->isDependentType()) || 5967 Operand->getType()->isObjCObjectPointerType()) { 5968 QualType PointeeTy = Operand->getType()->getPointeeType(); 5969 if (S.RequireCompleteType( 5970 Loc, PointeeTy, 5971 S.PDiag(diag::err_typecheck_arithmetic_incomplete_type) 5972 << PointeeTy << Operand->getSourceRange())) 5973 return true; 5974 } 5975 return false; 5976 } 5977 5978 /// \brief Check the validity of an arithmetic pointer operand. 5979 /// 5980 /// If the operand has pointer type, this code will check for pointer types 5981 /// which are invalid in arithmetic operations. These will be diagnosed 5982 /// appropriately, including whether or not the use is supported as an 5983 /// extension. 5984 /// 5985 /// \returns True when the operand is valid to use (even if as an extension). 5986 static bool checkArithmeticOpPointerOperand(Sema &S, SourceLocation Loc, 5987 Expr *Operand) { 5988 if (!Operand->getType()->isAnyPointerType()) return true; 5989 5990 QualType PointeeTy = Operand->getType()->getPointeeType(); 5991 if (PointeeTy->isVoidType()) { 5992 diagnoseArithmeticOnVoidPointer(S, Loc, Operand); 5993 return !S.getLangOptions().CPlusPlus; 5994 } 5995 if (PointeeTy->isFunctionType()) { 5996 diagnoseArithmeticOnFunctionPointer(S, Loc, Operand); 5997 return !S.getLangOptions().CPlusPlus; 5998 } 5999 6000 if (checkArithmeticIncompletePointerType(S, Loc, Operand)) return false; 6001 6002 return true; 6003 } 6004 6005 /// \brief Check the validity of a binary arithmetic operation w.r.t. pointer 6006 /// operands. 6007 /// 6008 /// This routine will diagnose any invalid arithmetic on pointer operands much 6009 /// like \see checkArithmeticOpPointerOperand. However, it has special logic 6010 /// for emitting a single diagnostic even for operations where both LHS and RHS 6011 /// are (potentially problematic) pointers. 6012 /// 6013 /// \returns True when the operand is valid to use (even if as an extension). 6014 static bool checkArithmeticBinOpPointerOperands(Sema &S, SourceLocation Loc, 6015 Expr *LHSExpr, Expr *RHSExpr) { 6016 bool isLHSPointer = LHSExpr->getType()->isAnyPointerType(); 6017 bool isRHSPointer = RHSExpr->getType()->isAnyPointerType(); 6018 if (!isLHSPointer && !isRHSPointer) return true; 6019 6020 QualType LHSPointeeTy, RHSPointeeTy; 6021 if (isLHSPointer) LHSPointeeTy = LHSExpr->getType()->getPointeeType(); 6022 if (isRHSPointer) RHSPointeeTy = RHSExpr->getType()->getPointeeType(); 6023 6024 // Check for arithmetic on pointers to incomplete types. 6025 bool isLHSVoidPtr = isLHSPointer && LHSPointeeTy->isVoidType(); 6026 bool isRHSVoidPtr = isRHSPointer && RHSPointeeTy->isVoidType(); 6027 if (isLHSVoidPtr || isRHSVoidPtr) { 6028 if (!isRHSVoidPtr) diagnoseArithmeticOnVoidPointer(S, Loc, LHSExpr); 6029 else if (!isLHSVoidPtr) diagnoseArithmeticOnVoidPointer(S, Loc, RHSExpr); 6030 else diagnoseArithmeticOnTwoVoidPointers(S, Loc, LHSExpr, RHSExpr); 6031 6032 return !S.getLangOptions().CPlusPlus; 6033 } 6034 6035 bool isLHSFuncPtr = isLHSPointer && LHSPointeeTy->isFunctionType(); 6036 bool isRHSFuncPtr = isRHSPointer && RHSPointeeTy->isFunctionType(); 6037 if (isLHSFuncPtr || isRHSFuncPtr) { 6038 if (!isRHSFuncPtr) diagnoseArithmeticOnFunctionPointer(S, Loc, LHSExpr); 6039 else if (!isLHSFuncPtr) diagnoseArithmeticOnFunctionPointer(S, Loc, 6040 RHSExpr); 6041 else diagnoseArithmeticOnTwoFunctionPointers(S, Loc, LHSExpr, RHSExpr); 6042 6043 return !S.getLangOptions().CPlusPlus; 6044 } 6045 6046 if (checkArithmeticIncompletePointerType(S, Loc, LHSExpr)) return false; 6047 if (checkArithmeticIncompletePointerType(S, Loc, RHSExpr)) return false; 6048 6049 return true; 6050 } 6051 6052 /// \brief Check bad cases where we step over interface counts. 6053 static bool checkArithmethicPointerOnNonFragileABI(Sema &S, 6054 SourceLocation OpLoc, 6055 Expr *Op) { 6056 assert(Op->getType()->isAnyPointerType()); 6057 QualType PointeeTy = Op->getType()->getPointeeType(); 6058 if (!PointeeTy->isObjCObjectType() || !S.LangOpts.ObjCNonFragileABI) 6059 return true; 6060 6061 S.Diag(OpLoc, diag::err_arithmetic_nonfragile_interface) 6062 << PointeeTy << Op->getSourceRange(); 6063 return false; 6064 } 6065 6066 /// \brief Emit error when two pointers are incompatible. 6067 static void diagnosePointerIncompatibility(Sema &S, SourceLocation Loc, 6068 Expr *LHSExpr, Expr *RHSExpr) { 6069 assert(LHSExpr->getType()->isAnyPointerType()); 6070 assert(RHSExpr->getType()->isAnyPointerType()); 6071 S.Diag(Loc, diag::err_typecheck_sub_ptr_compatible) 6072 << LHSExpr->getType() << RHSExpr->getType() << LHSExpr->getSourceRange() 6073 << RHSExpr->getSourceRange(); 6074 } 6075 6076 QualType Sema::CheckAdditionOperands( // C99 6.5.6 6077 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, QualType* CompLHSTy) { 6078 checkArithmeticNull(*this, LHS, RHS, Loc, /*isCompare=*/false); 6079 6080 if (LHS.get()->getType()->isVectorType() || 6081 RHS.get()->getType()->isVectorType()) { 6082 QualType compType = CheckVectorOperands(LHS, RHS, Loc, CompLHSTy); 6083 if (CompLHSTy) *CompLHSTy = compType; 6084 return compType; 6085 } 6086 6087 QualType compType = UsualArithmeticConversions(LHS, RHS, CompLHSTy); 6088 if (LHS.isInvalid() || RHS.isInvalid()) 6089 return QualType(); 6090 6091 // handle the common case first (both operands are arithmetic). 6092 if (LHS.get()->getType()->isArithmeticType() && 6093 RHS.get()->getType()->isArithmeticType()) { 6094 if (CompLHSTy) *CompLHSTy = compType; 6095 return compType; 6096 } 6097 6098 // Put any potential pointer into PExp 6099 Expr* PExp = LHS.get(), *IExp = RHS.get(); 6100 if (IExp->getType()->isAnyPointerType()) 6101 std::swap(PExp, IExp); 6102 6103 if (!PExp->getType()->isAnyPointerType()) 6104 return InvalidOperands(Loc, LHS, RHS); 6105 6106 if (!IExp->getType()->isIntegerType()) 6107 return InvalidOperands(Loc, LHS, RHS); 6108 6109 if (!checkArithmeticOpPointerOperand(*this, Loc, PExp)) 6110 return QualType(); 6111 6112 // Diagnose bad cases where we step over interface counts. 6113 if (!checkArithmethicPointerOnNonFragileABI(*this, Loc, PExp)) 6114 return QualType(); 6115 6116 // Check array bounds for pointer arithemtic 6117 CheckArrayAccess(PExp, IExp); 6118 6119 if (CompLHSTy) { 6120 QualType LHSTy = Context.isPromotableBitField(LHS.get()); 6121 if (LHSTy.isNull()) { 6122 LHSTy = LHS.get()->getType(); 6123 if (LHSTy->isPromotableIntegerType()) 6124 LHSTy = Context.getPromotedIntegerType(LHSTy); 6125 } 6126 *CompLHSTy = LHSTy; 6127 } 6128 6129 return PExp->getType(); 6130 } 6131 6132 // C99 6.5.6 6133 QualType Sema::CheckSubtractionOperands(ExprResult &LHS, ExprResult &RHS, 6134 SourceLocation Loc, 6135 QualType* CompLHSTy) { 6136 checkArithmeticNull(*this, LHS, RHS, Loc, /*isCompare=*/false); 6137 6138 if (LHS.get()->getType()->isVectorType() || 6139 RHS.get()->getType()->isVectorType()) { 6140 QualType compType = CheckVectorOperands(LHS, RHS, Loc, CompLHSTy); 6141 if (CompLHSTy) *CompLHSTy = compType; 6142 return compType; 6143 } 6144 6145 QualType compType = UsualArithmeticConversions(LHS, RHS, CompLHSTy); 6146 if (LHS.isInvalid() || RHS.isInvalid()) 6147 return QualType(); 6148 6149 // Enforce type constraints: C99 6.5.6p3. 6150 6151 // Handle the common case first (both operands are arithmetic). 6152 if (LHS.get()->getType()->isArithmeticType() && 6153 RHS.get()->getType()->isArithmeticType()) { 6154 if (CompLHSTy) *CompLHSTy = compType; 6155 return compType; 6156 } 6157 6158 // Either ptr - int or ptr - ptr. 6159 if (LHS.get()->getType()->isAnyPointerType()) { 6160 QualType lpointee = LHS.get()->getType()->getPointeeType(); 6161 6162 // Diagnose bad cases where we step over interface counts. 6163 if (!checkArithmethicPointerOnNonFragileABI(*this, Loc, LHS.get())) 6164 return QualType(); 6165 6166 // The result type of a pointer-int computation is the pointer type. 6167 if (RHS.get()->getType()->isIntegerType()) { 6168 if (!checkArithmeticOpPointerOperand(*this, Loc, LHS.get())) 6169 return QualType(); 6170 6171 Expr *IExpr = RHS.get()->IgnoreParenCasts(); 6172 UnaryOperator negRex(IExpr, UO_Minus, IExpr->getType(), VK_RValue, 6173 OK_Ordinary, IExpr->getExprLoc()); 6174 // Check array bounds for pointer arithemtic 6175 CheckArrayAccess(LHS.get()->IgnoreParenCasts(), &negRex); 6176 6177 if (CompLHSTy) *CompLHSTy = LHS.get()->getType(); 6178 return LHS.get()->getType(); 6179 } 6180 6181 // Handle pointer-pointer subtractions. 6182 if (const PointerType *RHSPTy 6183 = RHS.get()->getType()->getAs<PointerType>()) { 6184 QualType rpointee = RHSPTy->getPointeeType(); 6185 6186 if (getLangOptions().CPlusPlus) { 6187 // Pointee types must be the same: C++ [expr.add] 6188 if (!Context.hasSameUnqualifiedType(lpointee, rpointee)) { 6189 diagnosePointerIncompatibility(*this, Loc, LHS.get(), RHS.get()); 6190 } 6191 } else { 6192 // Pointee types must be compatible C99 6.5.6p3 6193 if (!Context.typesAreCompatible( 6194 Context.getCanonicalType(lpointee).getUnqualifiedType(), 6195 Context.getCanonicalType(rpointee).getUnqualifiedType())) { 6196 diagnosePointerIncompatibility(*this, Loc, LHS.get(), RHS.get()); 6197 return QualType(); 6198 } 6199 } 6200 6201 if (!checkArithmeticBinOpPointerOperands(*this, Loc, 6202 LHS.get(), RHS.get())) 6203 return QualType(); 6204 6205 if (CompLHSTy) *CompLHSTy = LHS.get()->getType(); 6206 return Context.getPointerDiffType(); 6207 } 6208 } 6209 6210 return InvalidOperands(Loc, LHS, RHS); 6211 } 6212 6213 static bool isScopedEnumerationType(QualType T) { 6214 if (const EnumType *ET = dyn_cast<EnumType>(T)) 6215 return ET->getDecl()->isScoped(); 6216 return false; 6217 } 6218 6219 static void DiagnoseBadShiftValues(Sema& S, ExprResult &LHS, ExprResult &RHS, 6220 SourceLocation Loc, unsigned Opc, 6221 QualType LHSType) { 6222 llvm::APSInt Right; 6223 // Check right/shifter operand 6224 if (RHS.get()->isValueDependent() || 6225 !RHS.get()->isIntegerConstantExpr(Right, S.Context)) 6226 return; 6227 6228 if (Right.isNegative()) { 6229 S.DiagRuntimeBehavior(Loc, RHS.get(), 6230 S.PDiag(diag::warn_shift_negative) 6231 << RHS.get()->getSourceRange()); 6232 return; 6233 } 6234 llvm::APInt LeftBits(Right.getBitWidth(), 6235 S.Context.getTypeSize(LHS.get()->getType())); 6236 if (Right.uge(LeftBits)) { 6237 S.DiagRuntimeBehavior(Loc, RHS.get(), 6238 S.PDiag(diag::warn_shift_gt_typewidth) 6239 << RHS.get()->getSourceRange()); 6240 return; 6241 } 6242 if (Opc != BO_Shl) 6243 return; 6244 6245 // When left shifting an ICE which is signed, we can check for overflow which 6246 // according to C++ has undefined behavior ([expr.shift] 5.8/2). Unsigned 6247 // integers have defined behavior modulo one more than the maximum value 6248 // representable in the result type, so never warn for those. 6249 llvm::APSInt Left; 6250 if (LHS.get()->isValueDependent() || 6251 !LHS.get()->isIntegerConstantExpr(Left, S.Context) || 6252 LHSType->hasUnsignedIntegerRepresentation()) 6253 return; 6254 llvm::APInt ResultBits = 6255 static_cast<llvm::APInt&>(Right) + Left.getMinSignedBits(); 6256 if (LeftBits.uge(ResultBits)) 6257 return; 6258 llvm::APSInt Result = Left.extend(ResultBits.getLimitedValue()); 6259 Result = Result.shl(Right); 6260 6261 // Print the bit representation of the signed integer as an unsigned 6262 // hexadecimal number. 6263 llvm::SmallString<40> HexResult; 6264 Result.toString(HexResult, 16, /*Signed =*/false, /*Literal =*/true); 6265 6266 // If we are only missing a sign bit, this is less likely to result in actual 6267 // bugs -- if the result is cast back to an unsigned type, it will have the 6268 // expected value. Thus we place this behind a different warning that can be 6269 // turned off separately if needed. 6270 if (LeftBits == ResultBits - 1) { 6271 S.Diag(Loc, diag::warn_shift_result_sets_sign_bit) 6272 << HexResult.str() << LHSType 6273 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 6274 return; 6275 } 6276 6277 S.Diag(Loc, diag::warn_shift_result_gt_typewidth) 6278 << HexResult.str() << Result.getMinSignedBits() << LHSType 6279 << Left.getBitWidth() << LHS.get()->getSourceRange() 6280 << RHS.get()->getSourceRange(); 6281 } 6282 6283 // C99 6.5.7 6284 QualType Sema::CheckShiftOperands(ExprResult &LHS, ExprResult &RHS, 6285 SourceLocation Loc, unsigned Opc, 6286 bool IsCompAssign) { 6287 checkArithmeticNull(*this, LHS, RHS, Loc, /*isCompare=*/false); 6288 6289 // C99 6.5.7p2: Each of the operands shall have integer type. 6290 if (!LHS.get()->getType()->hasIntegerRepresentation() || 6291 !RHS.get()->getType()->hasIntegerRepresentation()) 6292 return InvalidOperands(Loc, LHS, RHS); 6293 6294 // C++0x: Don't allow scoped enums. FIXME: Use something better than 6295 // hasIntegerRepresentation() above instead of this. 6296 if (isScopedEnumerationType(LHS.get()->getType()) || 6297 isScopedEnumerationType(RHS.get()->getType())) { 6298 return InvalidOperands(Loc, LHS, RHS); 6299 } 6300 6301 // Vector shifts promote their scalar inputs to vector type. 6302 if (LHS.get()->getType()->isVectorType() || 6303 RHS.get()->getType()->isVectorType()) 6304 return CheckVectorOperands(LHS, RHS, Loc, IsCompAssign); 6305 6306 // Shifts don't perform usual arithmetic conversions, they just do integer 6307 // promotions on each operand. C99 6.5.7p3 6308 6309 // For the LHS, do usual unary conversions, but then reset them away 6310 // if this is a compound assignment. 6311 ExprResult OldLHS = LHS; 6312 LHS = UsualUnaryConversions(LHS.take()); 6313 if (LHS.isInvalid()) 6314 return QualType(); 6315 QualType LHSType = LHS.get()->getType(); 6316 if (IsCompAssign) LHS = OldLHS; 6317 6318 // The RHS is simpler. 6319 RHS = UsualUnaryConversions(RHS.take()); 6320 if (RHS.isInvalid()) 6321 return QualType(); 6322 6323 // Sanity-check shift operands 6324 DiagnoseBadShiftValues(*this, LHS, RHS, Loc, Opc, LHSType); 6325 6326 // "The type of the result is that of the promoted left operand." 6327 return LHSType; 6328 } 6329 6330 static bool IsWithinTemplateSpecialization(Decl *D) { 6331 if (DeclContext *DC = D->getDeclContext()) { 6332 if (isa<ClassTemplateSpecializationDecl>(DC)) 6333 return true; 6334 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(DC)) 6335 return FD->isFunctionTemplateSpecialization(); 6336 } 6337 return false; 6338 } 6339 6340 /// If two different enums are compared, raise a warning. 6341 static void checkEnumComparison(Sema &S, SourceLocation Loc, ExprResult &LHS, 6342 ExprResult &RHS) { 6343 QualType LHSStrippedType = LHS.get()->IgnoreParenImpCasts()->getType(); 6344 QualType RHSStrippedType = RHS.get()->IgnoreParenImpCasts()->getType(); 6345 6346 const EnumType *LHSEnumType = LHSStrippedType->getAs<EnumType>(); 6347 if (!LHSEnumType) 6348 return; 6349 const EnumType *RHSEnumType = RHSStrippedType->getAs<EnumType>(); 6350 if (!RHSEnumType) 6351 return; 6352 6353 // Ignore anonymous enums. 6354 if (!LHSEnumType->getDecl()->getIdentifier()) 6355 return; 6356 if (!RHSEnumType->getDecl()->getIdentifier()) 6357 return; 6358 6359 if (S.Context.hasSameUnqualifiedType(LHSStrippedType, RHSStrippedType)) 6360 return; 6361 6362 S.Diag(Loc, diag::warn_comparison_of_mixed_enum_types) 6363 << LHSStrippedType << RHSStrippedType 6364 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 6365 } 6366 6367 /// \brief Diagnose bad pointer comparisons. 6368 static void diagnoseDistinctPointerComparison(Sema &S, SourceLocation Loc, 6369 ExprResult &LHS, ExprResult &RHS, 6370 bool IsError) { 6371 S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_distinct_pointers 6372 : diag::ext_typecheck_comparison_of_distinct_pointers) 6373 << LHS.get()->getType() << RHS.get()->getType() 6374 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 6375 } 6376 6377 /// \brief Returns false if the pointers are converted to a composite type, 6378 /// true otherwise. 6379 static bool convertPointersToCompositeType(Sema &S, SourceLocation Loc, 6380 ExprResult &LHS, ExprResult &RHS) { 6381 // C++ [expr.rel]p2: 6382 // [...] Pointer conversions (4.10) and qualification 6383 // conversions (4.4) are performed on pointer operands (or on 6384 // a pointer operand and a null pointer constant) to bring 6385 // them to their composite pointer type. [...] 6386 // 6387 // C++ [expr.eq]p1 uses the same notion for (in)equality 6388 // comparisons of pointers. 6389 6390 // C++ [expr.eq]p2: 6391 // In addition, pointers to members can be compared, or a pointer to 6392 // member and a null pointer constant. Pointer to member conversions 6393 // (4.11) and qualification conversions (4.4) are performed to bring 6394 // them to a common type. If one operand is a null pointer constant, 6395 // the common type is the type of the other operand. Otherwise, the 6396 // common type is a pointer to member type similar (4.4) to the type 6397 // of one of the operands, with a cv-qualification signature (4.4) 6398 // that is the union of the cv-qualification signatures of the operand 6399 // types. 6400 6401 QualType LHSType = LHS.get()->getType(); 6402 QualType RHSType = RHS.get()->getType(); 6403 assert((LHSType->isPointerType() && RHSType->isPointerType()) || 6404 (LHSType->isMemberPointerType() && RHSType->isMemberPointerType())); 6405 6406 bool NonStandardCompositeType = false; 6407 bool *BoolPtr = S.isSFINAEContext() ? 0 : &NonStandardCompositeType; 6408 QualType T = S.FindCompositePointerType(Loc, LHS, RHS, BoolPtr); 6409 if (T.isNull()) { 6410 diagnoseDistinctPointerComparison(S, Loc, LHS, RHS, /*isError*/true); 6411 return true; 6412 } 6413 6414 if (NonStandardCompositeType) 6415 S.Diag(Loc, diag::ext_typecheck_comparison_of_distinct_pointers_nonstandard) 6416 << LHSType << RHSType << T << LHS.get()->getSourceRange() 6417 << RHS.get()->getSourceRange(); 6418 6419 LHS = S.ImpCastExprToType(LHS.take(), T, CK_BitCast); 6420 RHS = S.ImpCastExprToType(RHS.take(), T, CK_BitCast); 6421 return false; 6422 } 6423 6424 static void diagnoseFunctionPointerToVoidComparison(Sema &S, SourceLocation Loc, 6425 ExprResult &LHS, 6426 ExprResult &RHS, 6427 bool IsError) { 6428 S.Diag(Loc, IsError ? diag::err_typecheck_comparison_of_fptr_to_void 6429 : diag::ext_typecheck_comparison_of_fptr_to_void) 6430 << LHS.get()->getType() << RHS.get()->getType() 6431 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 6432 } 6433 6434 // C99 6.5.8, C++ [expr.rel] 6435 QualType Sema::CheckCompareOperands(ExprResult &LHS, ExprResult &RHS, 6436 SourceLocation Loc, unsigned OpaqueOpc, 6437 bool IsRelational) { 6438 checkArithmeticNull(*this, LHS, RHS, Loc, /*isCompare=*/true); 6439 6440 BinaryOperatorKind Opc = (BinaryOperatorKind) OpaqueOpc; 6441 6442 // Handle vector comparisons separately. 6443 if (LHS.get()->getType()->isVectorType() || 6444 RHS.get()->getType()->isVectorType()) 6445 return CheckVectorCompareOperands(LHS, RHS, Loc, IsRelational); 6446 6447 QualType LHSType = LHS.get()->getType(); 6448 QualType RHSType = RHS.get()->getType(); 6449 6450 Expr *LHSStripped = LHS.get()->IgnoreParenImpCasts(); 6451 Expr *RHSStripped = RHS.get()->IgnoreParenImpCasts(); 6452 6453 checkEnumComparison(*this, Loc, LHS, RHS); 6454 6455 if (!LHSType->hasFloatingRepresentation() && 6456 !(LHSType->isBlockPointerType() && IsRelational) && 6457 !LHS.get()->getLocStart().isMacroID() && 6458 !RHS.get()->getLocStart().isMacroID()) { 6459 // For non-floating point types, check for self-comparisons of the form 6460 // x == x, x != x, x < x, etc. These always evaluate to a constant, and 6461 // often indicate logic errors in the program. 6462 // 6463 // NOTE: Don't warn about comparison expressions resulting from macro 6464 // expansion. Also don't warn about comparisons which are only self 6465 // comparisons within a template specialization. The warnings should catch 6466 // obvious cases in the definition of the template anyways. The idea is to 6467 // warn when the typed comparison operator will always evaluate to the same 6468 // result. 6469 if (DeclRefExpr* DRL = dyn_cast<DeclRefExpr>(LHSStripped)) { 6470 if (DeclRefExpr* DRR = dyn_cast<DeclRefExpr>(RHSStripped)) { 6471 if (DRL->getDecl() == DRR->getDecl() && 6472 !IsWithinTemplateSpecialization(DRL->getDecl())) { 6473 DiagRuntimeBehavior(Loc, 0, PDiag(diag::warn_comparison_always) 6474 << 0 // self- 6475 << (Opc == BO_EQ 6476 || Opc == BO_LE 6477 || Opc == BO_GE)); 6478 } else if (LHSType->isArrayType() && RHSType->isArrayType() && 6479 !DRL->getDecl()->getType()->isReferenceType() && 6480 !DRR->getDecl()->getType()->isReferenceType()) { 6481 // what is it always going to eval to? 6482 char always_evals_to; 6483 switch(Opc) { 6484 case BO_EQ: // e.g. array1 == array2 6485 always_evals_to = 0; // false 6486 break; 6487 case BO_NE: // e.g. array1 != array2 6488 always_evals_to = 1; // true 6489 break; 6490 default: 6491 // best we can say is 'a constant' 6492 always_evals_to = 2; // e.g. array1 <= array2 6493 break; 6494 } 6495 DiagRuntimeBehavior(Loc, 0, PDiag(diag::warn_comparison_always) 6496 << 1 // array 6497 << always_evals_to); 6498 } 6499 } 6500 } 6501 6502 if (isa<CastExpr>(LHSStripped)) 6503 LHSStripped = LHSStripped->IgnoreParenCasts(); 6504 if (isa<CastExpr>(RHSStripped)) 6505 RHSStripped = RHSStripped->IgnoreParenCasts(); 6506 6507 // Warn about comparisons against a string constant (unless the other 6508 // operand is null), the user probably wants strcmp. 6509 Expr *literalString = 0; 6510 Expr *literalStringStripped = 0; 6511 if ((isa<StringLiteral>(LHSStripped) || isa<ObjCEncodeExpr>(LHSStripped)) && 6512 !RHSStripped->isNullPointerConstant(Context, 6513 Expr::NPC_ValueDependentIsNull)) { 6514 literalString = LHS.get(); 6515 literalStringStripped = LHSStripped; 6516 } else if ((isa<StringLiteral>(RHSStripped) || 6517 isa<ObjCEncodeExpr>(RHSStripped)) && 6518 !LHSStripped->isNullPointerConstant(Context, 6519 Expr::NPC_ValueDependentIsNull)) { 6520 literalString = RHS.get(); 6521 literalStringStripped = RHSStripped; 6522 } 6523 6524 if (literalString) { 6525 std::string resultComparison; 6526 switch (Opc) { 6527 case BO_LT: resultComparison = ") < 0"; break; 6528 case BO_GT: resultComparison = ") > 0"; break; 6529 case BO_LE: resultComparison = ") <= 0"; break; 6530 case BO_GE: resultComparison = ") >= 0"; break; 6531 case BO_EQ: resultComparison = ") == 0"; break; 6532 case BO_NE: resultComparison = ") != 0"; break; 6533 default: llvm_unreachable("Invalid comparison operator"); 6534 } 6535 6536 DiagRuntimeBehavior(Loc, 0, 6537 PDiag(diag::warn_stringcompare) 6538 << isa<ObjCEncodeExpr>(literalStringStripped) 6539 << literalString->getSourceRange()); 6540 } 6541 } 6542 6543 // C99 6.5.8p3 / C99 6.5.9p4 6544 if (LHS.get()->getType()->isArithmeticType() && 6545 RHS.get()->getType()->isArithmeticType()) { 6546 UsualArithmeticConversions(LHS, RHS); 6547 if (LHS.isInvalid() || RHS.isInvalid()) 6548 return QualType(); 6549 } 6550 else { 6551 LHS = UsualUnaryConversions(LHS.take()); 6552 if (LHS.isInvalid()) 6553 return QualType(); 6554 6555 RHS = UsualUnaryConversions(RHS.take()); 6556 if (RHS.isInvalid()) 6557 return QualType(); 6558 } 6559 6560 LHSType = LHS.get()->getType(); 6561 RHSType = RHS.get()->getType(); 6562 6563 // The result of comparisons is 'bool' in C++, 'int' in C. 6564 QualType ResultTy = Context.getLogicalOperationType(); 6565 6566 if (IsRelational) { 6567 if (LHSType->isRealType() && RHSType->isRealType()) 6568 return ResultTy; 6569 } else { 6570 // Check for comparisons of floating point operands using != and ==. 6571 if (LHSType->hasFloatingRepresentation()) 6572 CheckFloatComparison(Loc, LHS.get(), RHS.get()); 6573 6574 if (LHSType->isArithmeticType() && RHSType->isArithmeticType()) 6575 return ResultTy; 6576 } 6577 6578 bool LHSIsNull = LHS.get()->isNullPointerConstant(Context, 6579 Expr::NPC_ValueDependentIsNull); 6580 bool RHSIsNull = RHS.get()->isNullPointerConstant(Context, 6581 Expr::NPC_ValueDependentIsNull); 6582 6583 // All of the following pointer-related warnings are GCC extensions, except 6584 // when handling null pointer constants. 6585 if (LHSType->isPointerType() && RHSType->isPointerType()) { // C99 6.5.8p2 6586 QualType LCanPointeeTy = 6587 LHSType->castAs<PointerType>()->getPointeeType().getCanonicalType(); 6588 QualType RCanPointeeTy = 6589 RHSType->castAs<PointerType>()->getPointeeType().getCanonicalType(); 6590 6591 if (getLangOptions().CPlusPlus) { 6592 if (LCanPointeeTy == RCanPointeeTy) 6593 return ResultTy; 6594 if (!IsRelational && 6595 (LCanPointeeTy->isVoidType() || RCanPointeeTy->isVoidType())) { 6596 // Valid unless comparison between non-null pointer and function pointer 6597 // This is a gcc extension compatibility comparison. 6598 // In a SFINAE context, we treat this as a hard error to maintain 6599 // conformance with the C++ standard. 6600 if ((LCanPointeeTy->isFunctionType() || RCanPointeeTy->isFunctionType()) 6601 && !LHSIsNull && !RHSIsNull) { 6602 diagnoseFunctionPointerToVoidComparison( 6603 *this, Loc, LHS, RHS, /*isError*/ isSFINAEContext()); 6604 6605 if (isSFINAEContext()) 6606 return QualType(); 6607 6608 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_BitCast); 6609 return ResultTy; 6610 } 6611 } 6612 6613 if (convertPointersToCompositeType(*this, Loc, LHS, RHS)) 6614 return QualType(); 6615 else 6616 return ResultTy; 6617 } 6618 // C99 6.5.9p2 and C99 6.5.8p2 6619 if (Context.typesAreCompatible(LCanPointeeTy.getUnqualifiedType(), 6620 RCanPointeeTy.getUnqualifiedType())) { 6621 // Valid unless a relational comparison of function pointers 6622 if (IsRelational && LCanPointeeTy->isFunctionType()) { 6623 Diag(Loc, diag::ext_typecheck_ordered_comparison_of_function_pointers) 6624 << LHSType << RHSType << LHS.get()->getSourceRange() 6625 << RHS.get()->getSourceRange(); 6626 } 6627 } else if (!IsRelational && 6628 (LCanPointeeTy->isVoidType() || RCanPointeeTy->isVoidType())) { 6629 // Valid unless comparison between non-null pointer and function pointer 6630 if ((LCanPointeeTy->isFunctionType() || RCanPointeeTy->isFunctionType()) 6631 && !LHSIsNull && !RHSIsNull) 6632 diagnoseFunctionPointerToVoidComparison(*this, Loc, LHS, RHS, 6633 /*isError*/false); 6634 } else { 6635 // Invalid 6636 diagnoseDistinctPointerComparison(*this, Loc, LHS, RHS, /*isError*/false); 6637 } 6638 if (LCanPointeeTy != RCanPointeeTy) { 6639 if (LHSIsNull && !RHSIsNull) 6640 LHS = ImpCastExprToType(LHS.take(), RHSType, CK_BitCast); 6641 else 6642 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_BitCast); 6643 } 6644 return ResultTy; 6645 } 6646 6647 if (getLangOptions().CPlusPlus) { 6648 // Comparison of nullptr_t with itself. 6649 if (LHSType->isNullPtrType() && RHSType->isNullPtrType()) 6650 return ResultTy; 6651 6652 // Comparison of pointers with null pointer constants and equality 6653 // comparisons of member pointers to null pointer constants. 6654 if (RHSIsNull && 6655 ((LHSType->isAnyPointerType() || LHSType->isNullPtrType()) || 6656 (!IsRelational && 6657 (LHSType->isMemberPointerType() || LHSType->isBlockPointerType())))) { 6658 RHS = ImpCastExprToType(RHS.take(), LHSType, 6659 LHSType->isMemberPointerType() 6660 ? CK_NullToMemberPointer 6661 : CK_NullToPointer); 6662 return ResultTy; 6663 } 6664 if (LHSIsNull && 6665 ((RHSType->isAnyPointerType() || RHSType->isNullPtrType()) || 6666 (!IsRelational && 6667 (RHSType->isMemberPointerType() || RHSType->isBlockPointerType())))) { 6668 LHS = ImpCastExprToType(LHS.take(), RHSType, 6669 RHSType->isMemberPointerType() 6670 ? CK_NullToMemberPointer 6671 : CK_NullToPointer); 6672 return ResultTy; 6673 } 6674 6675 // Comparison of member pointers. 6676 if (!IsRelational && 6677 LHSType->isMemberPointerType() && RHSType->isMemberPointerType()) { 6678 if (convertPointersToCompositeType(*this, Loc, LHS, RHS)) 6679 return QualType(); 6680 else 6681 return ResultTy; 6682 } 6683 6684 // Handle scoped enumeration types specifically, since they don't promote 6685 // to integers. 6686 if (LHS.get()->getType()->isEnumeralType() && 6687 Context.hasSameUnqualifiedType(LHS.get()->getType(), 6688 RHS.get()->getType())) 6689 return ResultTy; 6690 } 6691 6692 // Handle block pointer types. 6693 if (!IsRelational && LHSType->isBlockPointerType() && 6694 RHSType->isBlockPointerType()) { 6695 QualType lpointee = LHSType->castAs<BlockPointerType>()->getPointeeType(); 6696 QualType rpointee = RHSType->castAs<BlockPointerType>()->getPointeeType(); 6697 6698 if (!LHSIsNull && !RHSIsNull && 6699 !Context.typesAreCompatible(lpointee, rpointee)) { 6700 Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) 6701 << LHSType << RHSType << LHS.get()->getSourceRange() 6702 << RHS.get()->getSourceRange(); 6703 } 6704 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_BitCast); 6705 return ResultTy; 6706 } 6707 6708 // Allow block pointers to be compared with null pointer constants. 6709 if (!IsRelational 6710 && ((LHSType->isBlockPointerType() && RHSType->isPointerType()) 6711 || (LHSType->isPointerType() && RHSType->isBlockPointerType()))) { 6712 if (!LHSIsNull && !RHSIsNull) { 6713 if (!((RHSType->isPointerType() && RHSType->castAs<PointerType>() 6714 ->getPointeeType()->isVoidType()) 6715 || (LHSType->isPointerType() && LHSType->castAs<PointerType>() 6716 ->getPointeeType()->isVoidType()))) 6717 Diag(Loc, diag::err_typecheck_comparison_of_distinct_blocks) 6718 << LHSType << RHSType << LHS.get()->getSourceRange() 6719 << RHS.get()->getSourceRange(); 6720 } 6721 if (LHSIsNull && !RHSIsNull) 6722 LHS = ImpCastExprToType(LHS.take(), RHSType, 6723 RHSType->isPointerType() ? CK_BitCast 6724 : CK_AnyPointerToBlockPointerCast); 6725 else 6726 RHS = ImpCastExprToType(RHS.take(), LHSType, 6727 LHSType->isPointerType() ? CK_BitCast 6728 : CK_AnyPointerToBlockPointerCast); 6729 return ResultTy; 6730 } 6731 6732 if (LHSType->isObjCObjectPointerType() || 6733 RHSType->isObjCObjectPointerType()) { 6734 const PointerType *LPT = LHSType->getAs<PointerType>(); 6735 const PointerType *RPT = RHSType->getAs<PointerType>(); 6736 if (LPT || RPT) { 6737 bool LPtrToVoid = LPT ? LPT->getPointeeType()->isVoidType() : false; 6738 bool RPtrToVoid = RPT ? RPT->getPointeeType()->isVoidType() : false; 6739 6740 if (!LPtrToVoid && !RPtrToVoid && 6741 !Context.typesAreCompatible(LHSType, RHSType)) { 6742 diagnoseDistinctPointerComparison(*this, Loc, LHS, RHS, 6743 /*isError*/false); 6744 } 6745 if (LHSIsNull && !RHSIsNull) 6746 LHS = ImpCastExprToType(LHS.take(), RHSType, 6747 RPT ? CK_BitCast :CK_CPointerToObjCPointerCast); 6748 else 6749 RHS = ImpCastExprToType(RHS.take(), LHSType, 6750 LPT ? CK_BitCast :CK_CPointerToObjCPointerCast); 6751 return ResultTy; 6752 } 6753 if (LHSType->isObjCObjectPointerType() && 6754 RHSType->isObjCObjectPointerType()) { 6755 if (!Context.areComparableObjCPointerTypes(LHSType, RHSType)) 6756 diagnoseDistinctPointerComparison(*this, Loc, LHS, RHS, 6757 /*isError*/false); 6758 if (LHSIsNull && !RHSIsNull) 6759 LHS = ImpCastExprToType(LHS.take(), RHSType, CK_BitCast); 6760 else 6761 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_BitCast); 6762 return ResultTy; 6763 } 6764 } 6765 if ((LHSType->isAnyPointerType() && RHSType->isIntegerType()) || 6766 (LHSType->isIntegerType() && RHSType->isAnyPointerType())) { 6767 unsigned DiagID = 0; 6768 bool isError = false; 6769 if ((LHSIsNull && LHSType->isIntegerType()) || 6770 (RHSIsNull && RHSType->isIntegerType())) { 6771 if (IsRelational && !getLangOptions().CPlusPlus) 6772 DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_and_zero; 6773 } else if (IsRelational && !getLangOptions().CPlusPlus) 6774 DiagID = diag::ext_typecheck_ordered_comparison_of_pointer_integer; 6775 else if (getLangOptions().CPlusPlus) { 6776 DiagID = diag::err_typecheck_comparison_of_pointer_integer; 6777 isError = true; 6778 } else 6779 DiagID = diag::ext_typecheck_comparison_of_pointer_integer; 6780 6781 if (DiagID) { 6782 Diag(Loc, DiagID) 6783 << LHSType << RHSType << LHS.get()->getSourceRange() 6784 << RHS.get()->getSourceRange(); 6785 if (isError) 6786 return QualType(); 6787 } 6788 6789 if (LHSType->isIntegerType()) 6790 LHS = ImpCastExprToType(LHS.take(), RHSType, 6791 LHSIsNull ? CK_NullToPointer : CK_IntegralToPointer); 6792 else 6793 RHS = ImpCastExprToType(RHS.take(), LHSType, 6794 RHSIsNull ? CK_NullToPointer : CK_IntegralToPointer); 6795 return ResultTy; 6796 } 6797 6798 // Handle block pointers. 6799 if (!IsRelational && RHSIsNull 6800 && LHSType->isBlockPointerType() && RHSType->isIntegerType()) { 6801 RHS = ImpCastExprToType(RHS.take(), LHSType, CK_NullToPointer); 6802 return ResultTy; 6803 } 6804 if (!IsRelational && LHSIsNull 6805 && LHSType->isIntegerType() && RHSType->isBlockPointerType()) { 6806 LHS = ImpCastExprToType(LHS.take(), RHSType, CK_NullToPointer); 6807 return ResultTy; 6808 } 6809 6810 return InvalidOperands(Loc, LHS, RHS); 6811 } 6812 6813 /// CheckVectorCompareOperands - vector comparisons are a clang extension that 6814 /// operates on extended vector types. Instead of producing an IntTy result, 6815 /// like a scalar comparison, a vector comparison produces a vector of integer 6816 /// types. 6817 QualType Sema::CheckVectorCompareOperands(ExprResult &LHS, ExprResult &RHS, 6818 SourceLocation Loc, 6819 bool IsRelational) { 6820 // Check to make sure we're operating on vectors of the same type and width, 6821 // Allowing one side to be a scalar of element type. 6822 QualType vType = CheckVectorOperands(LHS, RHS, Loc, /*isCompAssign*/false); 6823 if (vType.isNull()) 6824 return vType; 6825 6826 QualType LHSType = LHS.get()->getType(); 6827 QualType RHSType = RHS.get()->getType(); 6828 6829 // If AltiVec, the comparison results in a numeric type, i.e. 6830 // bool for C++, int for C 6831 if (vType->getAs<VectorType>()->getVectorKind() == VectorType::AltiVecVector) 6832 return Context.getLogicalOperationType(); 6833 6834 // For non-floating point types, check for self-comparisons of the form 6835 // x == x, x != x, x < x, etc. These always evaluate to a constant, and 6836 // often indicate logic errors in the program. 6837 if (!LHSType->hasFloatingRepresentation()) { 6838 if (DeclRefExpr* DRL 6839 = dyn_cast<DeclRefExpr>(LHS.get()->IgnoreParenImpCasts())) 6840 if (DeclRefExpr* DRR 6841 = dyn_cast<DeclRefExpr>(RHS.get()->IgnoreParenImpCasts())) 6842 if (DRL->getDecl() == DRR->getDecl()) 6843 DiagRuntimeBehavior(Loc, 0, 6844 PDiag(diag::warn_comparison_always) 6845 << 0 // self- 6846 << 2 // "a constant" 6847 ); 6848 } 6849 6850 // Check for comparisons of floating point operands using != and ==. 6851 if (!IsRelational && LHSType->hasFloatingRepresentation()) { 6852 assert (RHSType->hasFloatingRepresentation()); 6853 CheckFloatComparison(Loc, LHS.get(), RHS.get()); 6854 } 6855 6856 // Return a signed type that is of identical size and number of elements. 6857 // For floating point vectors, return an integer type of identical size 6858 // and number of elements. 6859 const VectorType *VTy = LHSType->getAs<VectorType>(); 6860 unsigned TypeSize = Context.getTypeSize(VTy->getElementType()); 6861 if (TypeSize == Context.getTypeSize(Context.CharTy)) 6862 return Context.getExtVectorType(Context.CharTy, VTy->getNumElements()); 6863 else if (TypeSize == Context.getTypeSize(Context.ShortTy)) 6864 return Context.getExtVectorType(Context.ShortTy, VTy->getNumElements()); 6865 else if (TypeSize == Context.getTypeSize(Context.IntTy)) 6866 return Context.getExtVectorType(Context.IntTy, VTy->getNumElements()); 6867 else if (TypeSize == Context.getTypeSize(Context.LongTy)) 6868 return Context.getExtVectorType(Context.LongTy, VTy->getNumElements()); 6869 assert(TypeSize == Context.getTypeSize(Context.LongLongTy) && 6870 "Unhandled vector element size in vector compare"); 6871 return Context.getExtVectorType(Context.LongLongTy, VTy->getNumElements()); 6872 } 6873 6874 inline QualType Sema::CheckBitwiseOperands( 6875 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, bool IsCompAssign) { 6876 checkArithmeticNull(*this, LHS, RHS, Loc, /*isCompare=*/false); 6877 6878 if (LHS.get()->getType()->isVectorType() || 6879 RHS.get()->getType()->isVectorType()) { 6880 if (LHS.get()->getType()->hasIntegerRepresentation() && 6881 RHS.get()->getType()->hasIntegerRepresentation()) 6882 return CheckVectorOperands(LHS, RHS, Loc, IsCompAssign); 6883 6884 return InvalidOperands(Loc, LHS, RHS); 6885 } 6886 6887 ExprResult LHSResult = Owned(LHS), RHSResult = Owned(RHS); 6888 QualType compType = UsualArithmeticConversions(LHSResult, RHSResult, 6889 IsCompAssign); 6890 if (LHSResult.isInvalid() || RHSResult.isInvalid()) 6891 return QualType(); 6892 LHS = LHSResult.take(); 6893 RHS = RHSResult.take(); 6894 6895 if (LHS.get()->getType()->isIntegralOrUnscopedEnumerationType() && 6896 RHS.get()->getType()->isIntegralOrUnscopedEnumerationType()) 6897 return compType; 6898 return InvalidOperands(Loc, LHS, RHS); 6899 } 6900 6901 inline QualType Sema::CheckLogicalOperands( // C99 6.5.[13,14] 6902 ExprResult &LHS, ExprResult &RHS, SourceLocation Loc, unsigned Opc) { 6903 6904 // Diagnose cases where the user write a logical and/or but probably meant a 6905 // bitwise one. We do this when the LHS is a non-bool integer and the RHS 6906 // is a constant. 6907 if (LHS.get()->getType()->isIntegerType() && 6908 !LHS.get()->getType()->isBooleanType() && 6909 RHS.get()->getType()->isIntegerType() && !RHS.get()->isValueDependent() && 6910 // Don't warn in macros or template instantiations. 6911 !Loc.isMacroID() && ActiveTemplateInstantiations.empty()) { 6912 // If the RHS can be constant folded, and if it constant folds to something 6913 // that isn't 0 or 1 (which indicate a potential logical operation that 6914 // happened to fold to true/false) then warn. 6915 // Parens on the RHS are ignored. 6916 llvm::APSInt Result; 6917 if (RHS.get()->EvaluateAsInt(Result, Context)) 6918 if ((getLangOptions().Bool && !RHS.get()->getType()->isBooleanType()) || 6919 (Result != 0 && Result != 1)) { 6920 Diag(Loc, diag::warn_logical_instead_of_bitwise) 6921 << RHS.get()->getSourceRange() 6922 << (Opc == BO_LAnd ? "&&" : "||"); 6923 // Suggest replacing the logical operator with the bitwise version 6924 Diag(Loc, diag::note_logical_instead_of_bitwise_change_operator) 6925 << (Opc == BO_LAnd ? "&" : "|") 6926 << FixItHint::CreateReplacement(SourceRange( 6927 Loc, Lexer::getLocForEndOfToken(Loc, 0, getSourceManager(), 6928 getLangOptions())), 6929 Opc == BO_LAnd ? "&" : "|"); 6930 if (Opc == BO_LAnd) 6931 // Suggest replacing "Foo() && kNonZero" with "Foo()" 6932 Diag(Loc, diag::note_logical_instead_of_bitwise_remove_constant) 6933 << FixItHint::CreateRemoval( 6934 SourceRange( 6935 Lexer::getLocForEndOfToken(LHS.get()->getLocEnd(), 6936 0, getSourceManager(), 6937 getLangOptions()), 6938 RHS.get()->getLocEnd())); 6939 } 6940 } 6941 6942 if (!Context.getLangOptions().CPlusPlus) { 6943 LHS = UsualUnaryConversions(LHS.take()); 6944 if (LHS.isInvalid()) 6945 return QualType(); 6946 6947 RHS = UsualUnaryConversions(RHS.take()); 6948 if (RHS.isInvalid()) 6949 return QualType(); 6950 6951 if (!LHS.get()->getType()->isScalarType() || 6952 !RHS.get()->getType()->isScalarType()) 6953 return InvalidOperands(Loc, LHS, RHS); 6954 6955 return Context.IntTy; 6956 } 6957 6958 // The following is safe because we only use this method for 6959 // non-overloadable operands. 6960 6961 // C++ [expr.log.and]p1 6962 // C++ [expr.log.or]p1 6963 // The operands are both contextually converted to type bool. 6964 ExprResult LHSRes = PerformContextuallyConvertToBool(LHS.get()); 6965 if (LHSRes.isInvalid()) 6966 return InvalidOperands(Loc, LHS, RHS); 6967 LHS = move(LHSRes); 6968 6969 ExprResult RHSRes = PerformContextuallyConvertToBool(RHS.get()); 6970 if (RHSRes.isInvalid()) 6971 return InvalidOperands(Loc, LHS, RHS); 6972 RHS = move(RHSRes); 6973 6974 // C++ [expr.log.and]p2 6975 // C++ [expr.log.or]p2 6976 // The result is a bool. 6977 return Context.BoolTy; 6978 } 6979 6980 /// IsReadonlyProperty - Verify that otherwise a valid l-value expression 6981 /// is a read-only property; return true if so. A readonly property expression 6982 /// depends on various declarations and thus must be treated specially. 6983 /// 6984 static bool IsReadonlyProperty(Expr *E, Sema &S) { 6985 const ObjCPropertyRefExpr *PropExpr = dyn_cast<ObjCPropertyRefExpr>(E); 6986 if (!PropExpr) return false; 6987 if (PropExpr->isImplicitProperty()) return false; 6988 6989 ObjCPropertyDecl *PDecl = PropExpr->getExplicitProperty(); 6990 QualType BaseType = PropExpr->isSuperReceiver() ? 6991 PropExpr->getSuperReceiverType() : 6992 PropExpr->getBase()->getType(); 6993 6994 if (const ObjCObjectPointerType *OPT = 6995 BaseType->getAsObjCInterfacePointerType()) 6996 if (ObjCInterfaceDecl *IFace = OPT->getInterfaceDecl()) 6997 if (S.isPropertyReadonly(PDecl, IFace)) 6998 return true; 6999 return false; 7000 } 7001 7002 static bool IsConstProperty(Expr *E, Sema &S) { 7003 const ObjCPropertyRefExpr *PropExpr = dyn_cast<ObjCPropertyRefExpr>(E); 7004 if (!PropExpr) return false; 7005 if (PropExpr->isImplicitProperty()) return false; 7006 7007 ObjCPropertyDecl *PDecl = PropExpr->getExplicitProperty(); 7008 QualType T = PDecl->getType().getNonReferenceType(); 7009 return T.isConstQualified(); 7010 } 7011 7012 static bool IsReadonlyMessage(Expr *E, Sema &S) { 7013 const MemberExpr *ME = dyn_cast<MemberExpr>(E); 7014 if (!ME) return false; 7015 if (!isa<FieldDecl>(ME->getMemberDecl())) return false; 7016 ObjCMessageExpr *Base = 7017 dyn_cast<ObjCMessageExpr>(ME->getBase()->IgnoreParenImpCasts()); 7018 if (!Base) return false; 7019 return Base->getMethodDecl() != 0; 7020 } 7021 7022 /// CheckForModifiableLvalue - Verify that E is a modifiable lvalue. If not, 7023 /// emit an error and return true. If so, return false. 7024 static bool CheckForModifiableLvalue(Expr *E, SourceLocation Loc, Sema &S) { 7025 SourceLocation OrigLoc = Loc; 7026 Expr::isModifiableLvalueResult IsLV = E->isModifiableLvalue(S.Context, 7027 &Loc); 7028 if (IsLV == Expr::MLV_Valid && IsReadonlyProperty(E, S)) 7029 IsLV = Expr::MLV_ReadonlyProperty; 7030 else if (Expr::MLV_ConstQualified && IsConstProperty(E, S)) 7031 IsLV = Expr::MLV_Valid; 7032 else if (IsLV == Expr::MLV_ClassTemporary && IsReadonlyMessage(E, S)) 7033 IsLV = Expr::MLV_InvalidMessageExpression; 7034 if (IsLV == Expr::MLV_Valid) 7035 return false; 7036 7037 unsigned Diag = 0; 7038 bool NeedType = false; 7039 switch (IsLV) { // C99 6.5.16p2 7040 case Expr::MLV_ConstQualified: 7041 Diag = diag::err_typecheck_assign_const; 7042 7043 // In ARC, use some specialized diagnostics for occasions where we 7044 // infer 'const'. These are always pseudo-strong variables. 7045 if (S.getLangOptions().ObjCAutoRefCount) { 7046 DeclRefExpr *declRef = dyn_cast<DeclRefExpr>(E->IgnoreParenCasts()); 7047 if (declRef && isa<VarDecl>(declRef->getDecl())) { 7048 VarDecl *var = cast<VarDecl>(declRef->getDecl()); 7049 7050 // Use the normal diagnostic if it's pseudo-__strong but the 7051 // user actually wrote 'const'. 7052 if (var->isARCPseudoStrong() && 7053 (!var->getTypeSourceInfo() || 7054 !var->getTypeSourceInfo()->getType().isConstQualified())) { 7055 // There are two pseudo-strong cases: 7056 // - self 7057 ObjCMethodDecl *method = S.getCurMethodDecl(); 7058 if (method && var == method->getSelfDecl()) 7059 Diag = diag::err_typecheck_arr_assign_self; 7060 7061 // - fast enumeration variables 7062 else 7063 Diag = diag::err_typecheck_arr_assign_enumeration; 7064 7065 SourceRange Assign; 7066 if (Loc != OrigLoc) 7067 Assign = SourceRange(OrigLoc, OrigLoc); 7068 S.Diag(Loc, Diag) << E->getSourceRange() << Assign; 7069 // We need to preserve the AST regardless, so migration tool 7070 // can do its job. 7071 return false; 7072 } 7073 } 7074 } 7075 7076 break; 7077 case Expr::MLV_ArrayType: 7078 Diag = diag::err_typecheck_array_not_modifiable_lvalue; 7079 NeedType = true; 7080 break; 7081 case Expr::MLV_NotObjectType: 7082 Diag = diag::err_typecheck_non_object_not_modifiable_lvalue; 7083 NeedType = true; 7084 break; 7085 case Expr::MLV_LValueCast: 7086 Diag = diag::err_typecheck_lvalue_casts_not_supported; 7087 break; 7088 case Expr::MLV_Valid: 7089 llvm_unreachable("did not take early return for MLV_Valid"); 7090 case Expr::MLV_InvalidExpression: 7091 case Expr::MLV_MemberFunction: 7092 case Expr::MLV_ClassTemporary: 7093 Diag = diag::err_typecheck_expression_not_modifiable_lvalue; 7094 break; 7095 case Expr::MLV_IncompleteType: 7096 case Expr::MLV_IncompleteVoidType: 7097 return S.RequireCompleteType(Loc, E->getType(), 7098 S.PDiag(diag::err_typecheck_incomplete_type_not_modifiable_lvalue) 7099 << E->getSourceRange()); 7100 case Expr::MLV_DuplicateVectorComponents: 7101 Diag = diag::err_typecheck_duplicate_vector_components_not_mlvalue; 7102 break; 7103 case Expr::MLV_NotBlockQualified: 7104 Diag = diag::err_block_decl_ref_not_modifiable_lvalue; 7105 break; 7106 case Expr::MLV_ReadonlyProperty: 7107 case Expr::MLV_NoSetterProperty: 7108 llvm_unreachable("readonly properties should be processed differently"); 7109 break; 7110 case Expr::MLV_InvalidMessageExpression: 7111 Diag = diag::error_readonly_message_assignment; 7112 break; 7113 case Expr::MLV_SubObjCPropertySetting: 7114 Diag = diag::error_no_subobject_property_setting; 7115 break; 7116 } 7117 7118 SourceRange Assign; 7119 if (Loc != OrigLoc) 7120 Assign = SourceRange(OrigLoc, OrigLoc); 7121 if (NeedType) 7122 S.Diag(Loc, Diag) << E->getType() << E->getSourceRange() << Assign; 7123 else 7124 S.Diag(Loc, Diag) << E->getSourceRange() << Assign; 7125 return true; 7126 } 7127 7128 7129 7130 // C99 6.5.16.1 7131 QualType Sema::CheckAssignmentOperands(Expr *LHSExpr, ExprResult &RHS, 7132 SourceLocation Loc, 7133 QualType CompoundType) { 7134 assert(!LHSExpr->hasPlaceholderType(BuiltinType::PseudoObject)); 7135 7136 // Verify that LHS is a modifiable lvalue, and emit error if not. 7137 if (CheckForModifiableLvalue(LHSExpr, Loc, *this)) 7138 return QualType(); 7139 7140 QualType LHSType = LHSExpr->getType(); 7141 QualType RHSType = CompoundType.isNull() ? RHS.get()->getType() : 7142 CompoundType; 7143 AssignConvertType ConvTy; 7144 if (CompoundType.isNull()) { 7145 QualType LHSTy(LHSType); 7146 ConvTy = CheckSingleAssignmentConstraints(LHSTy, RHS); 7147 if (RHS.isInvalid()) 7148 return QualType(); 7149 // Special case of NSObject attributes on c-style pointer types. 7150 if (ConvTy == IncompatiblePointer && 7151 ((Context.isObjCNSObjectType(LHSType) && 7152 RHSType->isObjCObjectPointerType()) || 7153 (Context.isObjCNSObjectType(RHSType) && 7154 LHSType->isObjCObjectPointerType()))) 7155 ConvTy = Compatible; 7156 7157 if (ConvTy == Compatible && 7158 getLangOptions().ObjCNonFragileABI && 7159 LHSType->isObjCObjectType()) 7160 Diag(Loc, diag::err_assignment_requires_nonfragile_object) 7161 << LHSType; 7162 7163 // If the RHS is a unary plus or minus, check to see if they = and + are 7164 // right next to each other. If so, the user may have typo'd "x =+ 4" 7165 // instead of "x += 4". 7166 Expr *RHSCheck = RHS.get(); 7167 if (ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(RHSCheck)) 7168 RHSCheck = ICE->getSubExpr(); 7169 if (UnaryOperator *UO = dyn_cast<UnaryOperator>(RHSCheck)) { 7170 if ((UO->getOpcode() == UO_Plus || 7171 UO->getOpcode() == UO_Minus) && 7172 Loc.isFileID() && UO->getOperatorLoc().isFileID() && 7173 // Only if the two operators are exactly adjacent. 7174 Loc.getLocWithOffset(1) == UO->getOperatorLoc() && 7175 // And there is a space or other character before the subexpr of the 7176 // unary +/-. We don't want to warn on "x=-1". 7177 Loc.getLocWithOffset(2) != UO->getSubExpr()->getLocStart() && 7178 UO->getSubExpr()->getLocStart().isFileID()) { 7179 Diag(Loc, diag::warn_not_compound_assign) 7180 << (UO->getOpcode() == UO_Plus ? "+" : "-") 7181 << SourceRange(UO->getOperatorLoc(), UO->getOperatorLoc()); 7182 } 7183 } 7184 7185 if (ConvTy == Compatible) { 7186 if (LHSType.getObjCLifetime() == Qualifiers::OCL_Strong) 7187 checkRetainCycles(LHSExpr, RHS.get()); 7188 else if (getLangOptions().ObjCAutoRefCount) 7189 checkUnsafeExprAssigns(Loc, LHSExpr, RHS.get()); 7190 } 7191 } else { 7192 // Compound assignment "x += y" 7193 ConvTy = CheckAssignmentConstraints(Loc, LHSType, RHSType); 7194 } 7195 7196 if (DiagnoseAssignmentResult(ConvTy, Loc, LHSType, RHSType, 7197 RHS.get(), AA_Assigning)) 7198 return QualType(); 7199 7200 CheckForNullPointerDereference(*this, LHSExpr); 7201 7202 // C99 6.5.16p3: The type of an assignment expression is the type of the 7203 // left operand unless the left operand has qualified type, in which case 7204 // it is the unqualified version of the type of the left operand. 7205 // C99 6.5.16.1p2: In simple assignment, the value of the right operand 7206 // is converted to the type of the assignment expression (above). 7207 // C++ 5.17p1: the type of the assignment expression is that of its left 7208 // operand. 7209 return (getLangOptions().CPlusPlus 7210 ? LHSType : LHSType.getUnqualifiedType()); 7211 } 7212 7213 // C99 6.5.17 7214 static QualType CheckCommaOperands(Sema &S, ExprResult &LHS, ExprResult &RHS, 7215 SourceLocation Loc) { 7216 S.DiagnoseUnusedExprResult(LHS.get()); 7217 7218 LHS = S.CheckPlaceholderExpr(LHS.take()); 7219 RHS = S.CheckPlaceholderExpr(RHS.take()); 7220 if (LHS.isInvalid() || RHS.isInvalid()) 7221 return QualType(); 7222 7223 // C's comma performs lvalue conversion (C99 6.3.2.1) on both its 7224 // operands, but not unary promotions. 7225 // C++'s comma does not do any conversions at all (C++ [expr.comma]p1). 7226 7227 // So we treat the LHS as a ignored value, and in C++ we allow the 7228 // containing site to determine what should be done with the RHS. 7229 LHS = S.IgnoredValueConversions(LHS.take()); 7230 if (LHS.isInvalid()) 7231 return QualType(); 7232 7233 if (!S.getLangOptions().CPlusPlus) { 7234 RHS = S.DefaultFunctionArrayLvalueConversion(RHS.take()); 7235 if (RHS.isInvalid()) 7236 return QualType(); 7237 if (!RHS.get()->getType()->isVoidType()) 7238 S.RequireCompleteType(Loc, RHS.get()->getType(), 7239 diag::err_incomplete_type); 7240 } 7241 7242 return RHS.get()->getType(); 7243 } 7244 7245 /// CheckIncrementDecrementOperand - unlike most "Check" methods, this routine 7246 /// doesn't need to call UsualUnaryConversions or UsualArithmeticConversions. 7247 static QualType CheckIncrementDecrementOperand(Sema &S, Expr *Op, 7248 ExprValueKind &VK, 7249 SourceLocation OpLoc, 7250 bool IsInc, bool IsPrefix) { 7251 if (Op->isTypeDependent()) 7252 return S.Context.DependentTy; 7253 7254 QualType ResType = Op->getType(); 7255 assert(!ResType.isNull() && "no type for increment/decrement expression"); 7256 7257 if (S.getLangOptions().CPlusPlus && ResType->isBooleanType()) { 7258 // Decrement of bool is not allowed. 7259 if (!IsInc) { 7260 S.Diag(OpLoc, diag::err_decrement_bool) << Op->getSourceRange(); 7261 return QualType(); 7262 } 7263 // Increment of bool sets it to true, but is deprecated. 7264 S.Diag(OpLoc, diag::warn_increment_bool) << Op->getSourceRange(); 7265 } else if (ResType->isRealType()) { 7266 // OK! 7267 } else if (ResType->isAnyPointerType()) { 7268 // C99 6.5.2.4p2, 6.5.6p2 7269 if (!checkArithmeticOpPointerOperand(S, OpLoc, Op)) 7270 return QualType(); 7271 7272 // Diagnose bad cases where we step over interface counts. 7273 else if (!checkArithmethicPointerOnNonFragileABI(S, OpLoc, Op)) 7274 return QualType(); 7275 } else if (ResType->isAnyComplexType()) { 7276 // C99 does not support ++/-- on complex types, we allow as an extension. 7277 S.Diag(OpLoc, diag::ext_integer_increment_complex) 7278 << ResType << Op->getSourceRange(); 7279 } else if (ResType->isPlaceholderType()) { 7280 ExprResult PR = S.CheckPlaceholderExpr(Op); 7281 if (PR.isInvalid()) return QualType(); 7282 return CheckIncrementDecrementOperand(S, PR.take(), VK, OpLoc, 7283 IsInc, IsPrefix); 7284 } else if (S.getLangOptions().AltiVec && ResType->isVectorType()) { 7285 // OK! ( C/C++ Language Extensions for CBEA(Version 2.6) 10.3 ) 7286 } else { 7287 S.Diag(OpLoc, diag::err_typecheck_illegal_increment_decrement) 7288 << ResType << int(IsInc) << Op->getSourceRange(); 7289 return QualType(); 7290 } 7291 // At this point, we know we have a real, complex or pointer type. 7292 // Now make sure the operand is a modifiable lvalue. 7293 if (CheckForModifiableLvalue(Op, OpLoc, S)) 7294 return QualType(); 7295 // In C++, a prefix increment is the same type as the operand. Otherwise 7296 // (in C or with postfix), the increment is the unqualified type of the 7297 // operand. 7298 if (IsPrefix && S.getLangOptions().CPlusPlus) { 7299 VK = VK_LValue; 7300 return ResType; 7301 } else { 7302 VK = VK_RValue; 7303 return ResType.getUnqualifiedType(); 7304 } 7305 } 7306 7307 7308 /// getPrimaryDecl - Helper function for CheckAddressOfOperand(). 7309 /// This routine allows us to typecheck complex/recursive expressions 7310 /// where the declaration is needed for type checking. We only need to 7311 /// handle cases when the expression references a function designator 7312 /// or is an lvalue. Here are some examples: 7313 /// - &(x) => x 7314 /// - &*****f => f for f a function designator. 7315 /// - &s.xx => s 7316 /// - &s.zz[1].yy -> s, if zz is an array 7317 /// - *(x + 1) -> x, if x is an array 7318 /// - &"123"[2] -> 0 7319 /// - & __real__ x -> x 7320 static ValueDecl *getPrimaryDecl(Expr *E) { 7321 switch (E->getStmtClass()) { 7322 case Stmt::DeclRefExprClass: 7323 return cast<DeclRefExpr>(E)->getDecl(); 7324 case Stmt::MemberExprClass: 7325 // If this is an arrow operator, the address is an offset from 7326 // the base's value, so the object the base refers to is 7327 // irrelevant. 7328 if (cast<MemberExpr>(E)->isArrow()) 7329 return 0; 7330 // Otherwise, the expression refers to a part of the base 7331 return getPrimaryDecl(cast<MemberExpr>(E)->getBase()); 7332 case Stmt::ArraySubscriptExprClass: { 7333 // FIXME: This code shouldn't be necessary! We should catch the implicit 7334 // promotion of register arrays earlier. 7335 Expr* Base = cast<ArraySubscriptExpr>(E)->getBase(); 7336 if (ImplicitCastExpr* ICE = dyn_cast<ImplicitCastExpr>(Base)) { 7337 if (ICE->getSubExpr()->getType()->isArrayType()) 7338 return getPrimaryDecl(ICE->getSubExpr()); 7339 } 7340 return 0; 7341 } 7342 case Stmt::UnaryOperatorClass: { 7343 UnaryOperator *UO = cast<UnaryOperator>(E); 7344 7345 switch(UO->getOpcode()) { 7346 case UO_Real: 7347 case UO_Imag: 7348 case UO_Extension: 7349 return getPrimaryDecl(UO->getSubExpr()); 7350 default: 7351 return 0; 7352 } 7353 } 7354 case Stmt::ParenExprClass: 7355 return getPrimaryDecl(cast<ParenExpr>(E)->getSubExpr()); 7356 case Stmt::ImplicitCastExprClass: 7357 // If the result of an implicit cast is an l-value, we care about 7358 // the sub-expression; otherwise, the result here doesn't matter. 7359 return getPrimaryDecl(cast<ImplicitCastExpr>(E)->getSubExpr()); 7360 default: 7361 return 0; 7362 } 7363 } 7364 7365 namespace { 7366 enum { 7367 AO_Bit_Field = 0, 7368 AO_Vector_Element = 1, 7369 AO_Property_Expansion = 2, 7370 AO_Register_Variable = 3, 7371 AO_No_Error = 4 7372 }; 7373 } 7374 /// \brief Diagnose invalid operand for address of operations. 7375 /// 7376 /// \param Type The type of operand which cannot have its address taken. 7377 static void diagnoseAddressOfInvalidType(Sema &S, SourceLocation Loc, 7378 Expr *E, unsigned Type) { 7379 S.Diag(Loc, diag::err_typecheck_address_of) << Type << E->getSourceRange(); 7380 } 7381 7382 /// CheckAddressOfOperand - The operand of & must be either a function 7383 /// designator or an lvalue designating an object. If it is an lvalue, the 7384 /// object cannot be declared with storage class register or be a bit field. 7385 /// Note: The usual conversions are *not* applied to the operand of the & 7386 /// operator (C99 6.3.2.1p[2-4]), and its result is never an lvalue. 7387 /// In C++, the operand might be an overloaded function name, in which case 7388 /// we allow the '&' but retain the overloaded-function type. 7389 static QualType CheckAddressOfOperand(Sema &S, ExprResult &OrigOp, 7390 SourceLocation OpLoc) { 7391 if (const BuiltinType *PTy = OrigOp.get()->getType()->getAsPlaceholderType()){ 7392 if (PTy->getKind() == BuiltinType::Overload) { 7393 if (!isa<OverloadExpr>(OrigOp.get()->IgnoreParens())) { 7394 S.Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) 7395 << OrigOp.get()->getSourceRange(); 7396 return QualType(); 7397 } 7398 7399 return S.Context.OverloadTy; 7400 } 7401 7402 if (PTy->getKind() == BuiltinType::UnknownAny) 7403 return S.Context.UnknownAnyTy; 7404 7405 if (PTy->getKind() == BuiltinType::BoundMember) { 7406 S.Diag(OpLoc, diag::err_invalid_form_pointer_member_function) 7407 << OrigOp.get()->getSourceRange(); 7408 return QualType(); 7409 } 7410 7411 OrigOp = S.CheckPlaceholderExpr(OrigOp.take()); 7412 if (OrigOp.isInvalid()) return QualType(); 7413 } 7414 7415 if (OrigOp.get()->isTypeDependent()) 7416 return S.Context.DependentTy; 7417 7418 assert(!OrigOp.get()->getType()->isPlaceholderType()); 7419 7420 // Make sure to ignore parentheses in subsequent checks 7421 Expr *op = OrigOp.get()->IgnoreParens(); 7422 7423 if (S.getLangOptions().C99) { 7424 // Implement C99-only parts of addressof rules. 7425 if (UnaryOperator* uOp = dyn_cast<UnaryOperator>(op)) { 7426 if (uOp->getOpcode() == UO_Deref) 7427 // Per C99 6.5.3.2, the address of a deref always returns a valid result 7428 // (assuming the deref expression is valid). 7429 return uOp->getSubExpr()->getType(); 7430 } 7431 // Technically, there should be a check for array subscript 7432 // expressions here, but the result of one is always an lvalue anyway. 7433 } 7434 ValueDecl *dcl = getPrimaryDecl(op); 7435 Expr::LValueClassification lval = op->ClassifyLValue(S.Context); 7436 unsigned AddressOfError = AO_No_Error; 7437 7438 if (lval == Expr::LV_ClassTemporary) { 7439 bool sfinae = S.isSFINAEContext(); 7440 S.Diag(OpLoc, sfinae ? diag::err_typecheck_addrof_class_temporary 7441 : diag::ext_typecheck_addrof_class_temporary) 7442 << op->getType() << op->getSourceRange(); 7443 if (sfinae) 7444 return QualType(); 7445 } else if (isa<ObjCSelectorExpr>(op)) { 7446 return S.Context.getPointerType(op->getType()); 7447 } else if (lval == Expr::LV_MemberFunction) { 7448 // If it's an instance method, make a member pointer. 7449 // The expression must have exactly the form &A::foo. 7450 7451 // If the underlying expression isn't a decl ref, give up. 7452 if (!isa<DeclRefExpr>(op)) { 7453 S.Diag(OpLoc, diag::err_invalid_form_pointer_member_function) 7454 << OrigOp.get()->getSourceRange(); 7455 return QualType(); 7456 } 7457 DeclRefExpr *DRE = cast<DeclRefExpr>(op); 7458 CXXMethodDecl *MD = cast<CXXMethodDecl>(DRE->getDecl()); 7459 7460 // The id-expression was parenthesized. 7461 if (OrigOp.get() != DRE) { 7462 S.Diag(OpLoc, diag::err_parens_pointer_member_function) 7463 << OrigOp.get()->getSourceRange(); 7464 7465 // The method was named without a qualifier. 7466 } else if (!DRE->getQualifier()) { 7467 S.Diag(OpLoc, diag::err_unqualified_pointer_member_function) 7468 << op->getSourceRange(); 7469 } 7470 7471 return S.Context.getMemberPointerType(op->getType(), 7472 S.Context.getTypeDeclType(MD->getParent()).getTypePtr()); 7473 } else if (lval != Expr::LV_Valid && lval != Expr::LV_IncompleteVoidType) { 7474 // C99 6.5.3.2p1 7475 // The operand must be either an l-value or a function designator 7476 if (!op->getType()->isFunctionType()) { 7477 // Use a special diagnostic for loads from property references. 7478 if (isa<PseudoObjectExpr>(op)) { 7479 AddressOfError = AO_Property_Expansion; 7480 } else { 7481 // FIXME: emit more specific diag... 7482 S.Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof) 7483 << op->getSourceRange(); 7484 return QualType(); 7485 } 7486 } 7487 } else if (op->getObjectKind() == OK_BitField) { // C99 6.5.3.2p1 7488 // The operand cannot be a bit-field 7489 AddressOfError = AO_Bit_Field; 7490 } else if (op->getObjectKind() == OK_VectorComponent) { 7491 // The operand cannot be an element of a vector 7492 AddressOfError = AO_Vector_Element; 7493 } else if (dcl) { // C99 6.5.3.2p1 7494 // We have an lvalue with a decl. Make sure the decl is not declared 7495 // with the register storage-class specifier. 7496 if (const VarDecl *vd = dyn_cast<VarDecl>(dcl)) { 7497 // in C++ it is not error to take address of a register 7498 // variable (c++03 7.1.1P3) 7499 if (vd->getStorageClass() == SC_Register && 7500 !S.getLangOptions().CPlusPlus) { 7501 AddressOfError = AO_Register_Variable; 7502 } 7503 } else if (isa<FunctionTemplateDecl>(dcl)) { 7504 return S.Context.OverloadTy; 7505 } else if (isa<FieldDecl>(dcl) || isa<IndirectFieldDecl>(dcl)) { 7506 // Okay: we can take the address of a field. 7507 // Could be a pointer to member, though, if there is an explicit 7508 // scope qualifier for the class. 7509 if (isa<DeclRefExpr>(op) && cast<DeclRefExpr>(op)->getQualifier()) { 7510 DeclContext *Ctx = dcl->getDeclContext(); 7511 if (Ctx && Ctx->isRecord()) { 7512 if (dcl->getType()->isReferenceType()) { 7513 S.Diag(OpLoc, 7514 diag::err_cannot_form_pointer_to_member_of_reference_type) 7515 << dcl->getDeclName() << dcl->getType(); 7516 return QualType(); 7517 } 7518 7519 while (cast<RecordDecl>(Ctx)->isAnonymousStructOrUnion()) 7520 Ctx = Ctx->getParent(); 7521 return S.Context.getMemberPointerType(op->getType(), 7522 S.Context.getTypeDeclType(cast<RecordDecl>(Ctx)).getTypePtr()); 7523 } 7524 } 7525 } else if (!isa<FunctionDecl>(dcl) && !isa<NonTypeTemplateParmDecl>(dcl)) 7526 llvm_unreachable("Unknown/unexpected decl type"); 7527 } 7528 7529 if (AddressOfError != AO_No_Error) { 7530 diagnoseAddressOfInvalidType(S, OpLoc, op, AddressOfError); 7531 return QualType(); 7532 } 7533 7534 if (lval == Expr::LV_IncompleteVoidType) { 7535 // Taking the address of a void variable is technically illegal, but we 7536 // allow it in cases which are otherwise valid. 7537 // Example: "extern void x; void* y = &x;". 7538 S.Diag(OpLoc, diag::ext_typecheck_addrof_void) << op->getSourceRange(); 7539 } 7540 7541 // If the operand has type "type", the result has type "pointer to type". 7542 if (op->getType()->isObjCObjectType()) 7543 return S.Context.getObjCObjectPointerType(op->getType()); 7544 return S.Context.getPointerType(op->getType()); 7545 } 7546 7547 /// CheckIndirectionOperand - Type check unary indirection (prefix '*'). 7548 static QualType CheckIndirectionOperand(Sema &S, Expr *Op, ExprValueKind &VK, 7549 SourceLocation OpLoc) { 7550 if (Op->isTypeDependent()) 7551 return S.Context.DependentTy; 7552 7553 ExprResult ConvResult = S.UsualUnaryConversions(Op); 7554 if (ConvResult.isInvalid()) 7555 return QualType(); 7556 Op = ConvResult.take(); 7557 QualType OpTy = Op->getType(); 7558 QualType Result; 7559 7560 if (isa<CXXReinterpretCastExpr>(Op)) { 7561 QualType OpOrigType = Op->IgnoreParenCasts()->getType(); 7562 S.CheckCompatibleReinterpretCast(OpOrigType, OpTy, /*IsDereference*/true, 7563 Op->getSourceRange()); 7564 } 7565 7566 // Note that per both C89 and C99, indirection is always legal, even if OpTy 7567 // is an incomplete type or void. It would be possible to warn about 7568 // dereferencing a void pointer, but it's completely well-defined, and such a 7569 // warning is unlikely to catch any mistakes. 7570 if (const PointerType *PT = OpTy->getAs<PointerType>()) 7571 Result = PT->getPointeeType(); 7572 else if (const ObjCObjectPointerType *OPT = 7573 OpTy->getAs<ObjCObjectPointerType>()) 7574 Result = OPT->getPointeeType(); 7575 else { 7576 ExprResult PR = S.CheckPlaceholderExpr(Op); 7577 if (PR.isInvalid()) return QualType(); 7578 if (PR.take() != Op) 7579 return CheckIndirectionOperand(S, PR.take(), VK, OpLoc); 7580 } 7581 7582 if (Result.isNull()) { 7583 S.Diag(OpLoc, diag::err_typecheck_indirection_requires_pointer) 7584 << OpTy << Op->getSourceRange(); 7585 return QualType(); 7586 } 7587 7588 // Dereferences are usually l-values... 7589 VK = VK_LValue; 7590 7591 // ...except that certain expressions are never l-values in C. 7592 if (!S.getLangOptions().CPlusPlus && Result.isCForbiddenLValueType()) 7593 VK = VK_RValue; 7594 7595 return Result; 7596 } 7597 7598 static inline BinaryOperatorKind ConvertTokenKindToBinaryOpcode( 7599 tok::TokenKind Kind) { 7600 BinaryOperatorKind Opc; 7601 switch (Kind) { 7602 default: llvm_unreachable("Unknown binop!"); 7603 case tok::periodstar: Opc = BO_PtrMemD; break; 7604 case tok::arrowstar: Opc = BO_PtrMemI; break; 7605 case tok::star: Opc = BO_Mul; break; 7606 case tok::slash: Opc = BO_Div; break; 7607 case tok::percent: Opc = BO_Rem; break; 7608 case tok::plus: Opc = BO_Add; break; 7609 case tok::minus: Opc = BO_Sub; break; 7610 case tok::lessless: Opc = BO_Shl; break; 7611 case tok::greatergreater: Opc = BO_Shr; break; 7612 case tok::lessequal: Opc = BO_LE; break; 7613 case tok::less: Opc = BO_LT; break; 7614 case tok::greaterequal: Opc = BO_GE; break; 7615 case tok::greater: Opc = BO_GT; break; 7616 case tok::exclaimequal: Opc = BO_NE; break; 7617 case tok::equalequal: Opc = BO_EQ; break; 7618 case tok::amp: Opc = BO_And; break; 7619 case tok::caret: Opc = BO_Xor; break; 7620 case tok::pipe: Opc = BO_Or; break; 7621 case tok::ampamp: Opc = BO_LAnd; break; 7622 case tok::pipepipe: Opc = BO_LOr; break; 7623 case tok::equal: Opc = BO_Assign; break; 7624 case tok::starequal: Opc = BO_MulAssign; break; 7625 case tok::slashequal: Opc = BO_DivAssign; break; 7626 case tok::percentequal: Opc = BO_RemAssign; break; 7627 case tok::plusequal: Opc = BO_AddAssign; break; 7628 case tok::minusequal: Opc = BO_SubAssign; break; 7629 case tok::lesslessequal: Opc = BO_ShlAssign; break; 7630 case tok::greatergreaterequal: Opc = BO_ShrAssign; break; 7631 case tok::ampequal: Opc = BO_AndAssign; break; 7632 case tok::caretequal: Opc = BO_XorAssign; break; 7633 case tok::pipeequal: Opc = BO_OrAssign; break; 7634 case tok::comma: Opc = BO_Comma; break; 7635 } 7636 return Opc; 7637 } 7638 7639 static inline UnaryOperatorKind ConvertTokenKindToUnaryOpcode( 7640 tok::TokenKind Kind) { 7641 UnaryOperatorKind Opc; 7642 switch (Kind) { 7643 default: llvm_unreachable("Unknown unary op!"); 7644 case tok::plusplus: Opc = UO_PreInc; break; 7645 case tok::minusminus: Opc = UO_PreDec; break; 7646 case tok::amp: Opc = UO_AddrOf; break; 7647 case tok::star: Opc = UO_Deref; break; 7648 case tok::plus: Opc = UO_Plus; break; 7649 case tok::minus: Opc = UO_Minus; break; 7650 case tok::tilde: Opc = UO_Not; break; 7651 case tok::exclaim: Opc = UO_LNot; break; 7652 case tok::kw___real: Opc = UO_Real; break; 7653 case tok::kw___imag: Opc = UO_Imag; break; 7654 case tok::kw___extension__: Opc = UO_Extension; break; 7655 } 7656 return Opc; 7657 } 7658 7659 /// DiagnoseSelfAssignment - Emits a warning if a value is assigned to itself. 7660 /// This warning is only emitted for builtin assignment operations. It is also 7661 /// suppressed in the event of macro expansions. 7662 static void DiagnoseSelfAssignment(Sema &S, Expr *LHSExpr, Expr *RHSExpr, 7663 SourceLocation OpLoc) { 7664 if (!S.ActiveTemplateInstantiations.empty()) 7665 return; 7666 if (OpLoc.isInvalid() || OpLoc.isMacroID()) 7667 return; 7668 LHSExpr = LHSExpr->IgnoreParenImpCasts(); 7669 RHSExpr = RHSExpr->IgnoreParenImpCasts(); 7670 const DeclRefExpr *LHSDeclRef = dyn_cast<DeclRefExpr>(LHSExpr); 7671 const DeclRefExpr *RHSDeclRef = dyn_cast<DeclRefExpr>(RHSExpr); 7672 if (!LHSDeclRef || !RHSDeclRef || 7673 LHSDeclRef->getLocation().isMacroID() || 7674 RHSDeclRef->getLocation().isMacroID()) 7675 return; 7676 const ValueDecl *LHSDecl = 7677 cast<ValueDecl>(LHSDeclRef->getDecl()->getCanonicalDecl()); 7678 const ValueDecl *RHSDecl = 7679 cast<ValueDecl>(RHSDeclRef->getDecl()->getCanonicalDecl()); 7680 if (LHSDecl != RHSDecl) 7681 return; 7682 if (LHSDecl->getType().isVolatileQualified()) 7683 return; 7684 if (const ReferenceType *RefTy = LHSDecl->getType()->getAs<ReferenceType>()) 7685 if (RefTy->getPointeeType().isVolatileQualified()) 7686 return; 7687 7688 S.Diag(OpLoc, diag::warn_self_assignment) 7689 << LHSDeclRef->getType() 7690 << LHSExpr->getSourceRange() << RHSExpr->getSourceRange(); 7691 } 7692 7693 /// CreateBuiltinBinOp - Creates a new built-in binary operation with 7694 /// operator @p Opc at location @c TokLoc. This routine only supports 7695 /// built-in operations; ActOnBinOp handles overloaded operators. 7696 ExprResult Sema::CreateBuiltinBinOp(SourceLocation OpLoc, 7697 BinaryOperatorKind Opc, 7698 Expr *LHSExpr, Expr *RHSExpr) { 7699 ExprResult LHS = Owned(LHSExpr), RHS = Owned(RHSExpr); 7700 QualType ResultTy; // Result type of the binary operator. 7701 // The following two variables are used for compound assignment operators 7702 QualType CompLHSTy; // Type of LHS after promotions for computation 7703 QualType CompResultTy; // Type of computation result 7704 ExprValueKind VK = VK_RValue; 7705 ExprObjectKind OK = OK_Ordinary; 7706 7707 switch (Opc) { 7708 case BO_Assign: 7709 ResultTy = CheckAssignmentOperands(LHS.get(), RHS, OpLoc, QualType()); 7710 if (getLangOptions().CPlusPlus && 7711 LHS.get()->getObjectKind() != OK_ObjCProperty) { 7712 VK = LHS.get()->getValueKind(); 7713 OK = LHS.get()->getObjectKind(); 7714 } 7715 if (!ResultTy.isNull()) 7716 DiagnoseSelfAssignment(*this, LHS.get(), RHS.get(), OpLoc); 7717 break; 7718 case BO_PtrMemD: 7719 case BO_PtrMemI: 7720 ResultTy = CheckPointerToMemberOperands(LHS, RHS, VK, OpLoc, 7721 Opc == BO_PtrMemI); 7722 break; 7723 case BO_Mul: 7724 case BO_Div: 7725 ResultTy = CheckMultiplyDivideOperands(LHS, RHS, OpLoc, false, 7726 Opc == BO_Div); 7727 break; 7728 case BO_Rem: 7729 ResultTy = CheckRemainderOperands(LHS, RHS, OpLoc); 7730 break; 7731 case BO_Add: 7732 ResultTy = CheckAdditionOperands(LHS, RHS, OpLoc); 7733 break; 7734 case BO_Sub: 7735 ResultTy = CheckSubtractionOperands(LHS, RHS, OpLoc); 7736 break; 7737 case BO_Shl: 7738 case BO_Shr: 7739 ResultTy = CheckShiftOperands(LHS, RHS, OpLoc, Opc); 7740 break; 7741 case BO_LE: 7742 case BO_LT: 7743 case BO_GE: 7744 case BO_GT: 7745 ResultTy = CheckCompareOperands(LHS, RHS, OpLoc, Opc, true); 7746 break; 7747 case BO_EQ: 7748 case BO_NE: 7749 ResultTy = CheckCompareOperands(LHS, RHS, OpLoc, Opc, false); 7750 break; 7751 case BO_And: 7752 case BO_Xor: 7753 case BO_Or: 7754 ResultTy = CheckBitwiseOperands(LHS, RHS, OpLoc); 7755 break; 7756 case BO_LAnd: 7757 case BO_LOr: 7758 ResultTy = CheckLogicalOperands(LHS, RHS, OpLoc, Opc); 7759 break; 7760 case BO_MulAssign: 7761 case BO_DivAssign: 7762 CompResultTy = CheckMultiplyDivideOperands(LHS, RHS, OpLoc, true, 7763 Opc == BO_DivAssign); 7764 CompLHSTy = CompResultTy; 7765 if (!CompResultTy.isNull() && !LHS.isInvalid() && !RHS.isInvalid()) 7766 ResultTy = CheckAssignmentOperands(LHS.get(), RHS, OpLoc, CompResultTy); 7767 break; 7768 case BO_RemAssign: 7769 CompResultTy = CheckRemainderOperands(LHS, RHS, OpLoc, true); 7770 CompLHSTy = CompResultTy; 7771 if (!CompResultTy.isNull() && !LHS.isInvalid() && !RHS.isInvalid()) 7772 ResultTy = CheckAssignmentOperands(LHS.get(), RHS, OpLoc, CompResultTy); 7773 break; 7774 case BO_AddAssign: 7775 CompResultTy = CheckAdditionOperands(LHS, RHS, OpLoc, &CompLHSTy); 7776 if (!CompResultTy.isNull() && !LHS.isInvalid() && !RHS.isInvalid()) 7777 ResultTy = CheckAssignmentOperands(LHS.get(), RHS, OpLoc, CompResultTy); 7778 break; 7779 case BO_SubAssign: 7780 CompResultTy = CheckSubtractionOperands(LHS, RHS, OpLoc, &CompLHSTy); 7781 if (!CompResultTy.isNull() && !LHS.isInvalid() && !RHS.isInvalid()) 7782 ResultTy = CheckAssignmentOperands(LHS.get(), RHS, OpLoc, CompResultTy); 7783 break; 7784 case BO_ShlAssign: 7785 case BO_ShrAssign: 7786 CompResultTy = CheckShiftOperands(LHS, RHS, OpLoc, Opc, true); 7787 CompLHSTy = CompResultTy; 7788 if (!CompResultTy.isNull() && !LHS.isInvalid() && !RHS.isInvalid()) 7789 ResultTy = CheckAssignmentOperands(LHS.get(), RHS, OpLoc, CompResultTy); 7790 break; 7791 case BO_AndAssign: 7792 case BO_XorAssign: 7793 case BO_OrAssign: 7794 CompResultTy = CheckBitwiseOperands(LHS, RHS, OpLoc, true); 7795 CompLHSTy = CompResultTy; 7796 if (!CompResultTy.isNull() && !LHS.isInvalid() && !RHS.isInvalid()) 7797 ResultTy = CheckAssignmentOperands(LHS.get(), RHS, OpLoc, CompResultTy); 7798 break; 7799 case BO_Comma: 7800 ResultTy = CheckCommaOperands(*this, LHS, RHS, OpLoc); 7801 if (getLangOptions().CPlusPlus && !RHS.isInvalid()) { 7802 VK = RHS.get()->getValueKind(); 7803 OK = RHS.get()->getObjectKind(); 7804 } 7805 break; 7806 } 7807 if (ResultTy.isNull() || LHS.isInvalid() || RHS.isInvalid()) 7808 return ExprError(); 7809 7810 // Check for array bounds violations for both sides of the BinaryOperator 7811 CheckArrayAccess(LHS.get()); 7812 CheckArrayAccess(RHS.get()); 7813 7814 if (CompResultTy.isNull()) 7815 return Owned(new (Context) BinaryOperator(LHS.take(), RHS.take(), Opc, 7816 ResultTy, VK, OK, OpLoc)); 7817 if (getLangOptions().CPlusPlus && LHS.get()->getObjectKind() != 7818 OK_ObjCProperty) { 7819 VK = VK_LValue; 7820 OK = LHS.get()->getObjectKind(); 7821 } 7822 return Owned(new (Context) CompoundAssignOperator(LHS.take(), RHS.take(), Opc, 7823 ResultTy, VK, OK, CompLHSTy, 7824 CompResultTy, OpLoc)); 7825 } 7826 7827 /// DiagnoseBitwisePrecedence - Emit a warning when bitwise and comparison 7828 /// operators are mixed in a way that suggests that the programmer forgot that 7829 /// comparison operators have higher precedence. The most typical example of 7830 /// such code is "flags & 0x0020 != 0", which is equivalent to "flags & 1". 7831 static void DiagnoseBitwisePrecedence(Sema &Self, BinaryOperatorKind Opc, 7832 SourceLocation OpLoc, Expr *LHSExpr, 7833 Expr *RHSExpr) { 7834 typedef BinaryOperator BinOp; 7835 BinOp::Opcode LHSopc = static_cast<BinOp::Opcode>(-1), 7836 RHSopc = static_cast<BinOp::Opcode>(-1); 7837 if (BinOp *BO = dyn_cast<BinOp>(LHSExpr)) 7838 LHSopc = BO->getOpcode(); 7839 if (BinOp *BO = dyn_cast<BinOp>(RHSExpr)) 7840 RHSopc = BO->getOpcode(); 7841 7842 // Subs are not binary operators. 7843 if (LHSopc == -1 && RHSopc == -1) 7844 return; 7845 7846 // Bitwise operations are sometimes used as eager logical ops. 7847 // Don't diagnose this. 7848 if ((BinOp::isComparisonOp(LHSopc) || BinOp::isBitwiseOp(LHSopc)) && 7849 (BinOp::isComparisonOp(RHSopc) || BinOp::isBitwiseOp(RHSopc))) 7850 return; 7851 7852 bool isLeftComp = BinOp::isComparisonOp(LHSopc); 7853 bool isRightComp = BinOp::isComparisonOp(RHSopc); 7854 if (!isLeftComp && !isRightComp) return; 7855 7856 SourceRange DiagRange = isLeftComp ? SourceRange(LHSExpr->getLocStart(), 7857 OpLoc) 7858 : SourceRange(OpLoc, RHSExpr->getLocEnd()); 7859 std::string OpStr = isLeftComp ? BinOp::getOpcodeStr(LHSopc) 7860 : BinOp::getOpcodeStr(RHSopc); 7861 SourceRange ParensRange = isLeftComp ? 7862 SourceRange(cast<BinOp>(LHSExpr)->getRHS()->getLocStart(), 7863 RHSExpr->getLocEnd()) 7864 : SourceRange(LHSExpr->getLocStart(), 7865 cast<BinOp>(RHSExpr)->getLHS()->getLocStart()); 7866 7867 Self.Diag(OpLoc, diag::warn_precedence_bitwise_rel) 7868 << DiagRange << BinOp::getOpcodeStr(Opc) << OpStr; 7869 SuggestParentheses(Self, OpLoc, 7870 Self.PDiag(diag::note_precedence_bitwise_silence) << OpStr, 7871 RHSExpr->getSourceRange()); 7872 SuggestParentheses(Self, OpLoc, 7873 Self.PDiag(diag::note_precedence_bitwise_first) << BinOp::getOpcodeStr(Opc), 7874 ParensRange); 7875 } 7876 7877 /// \brief It accepts a '&' expr that is inside a '|' one. 7878 /// Emit a diagnostic together with a fixit hint that wraps the '&' expression 7879 /// in parentheses. 7880 static void 7881 EmitDiagnosticForBitwiseAndInBitwiseOr(Sema &Self, SourceLocation OpLoc, 7882 BinaryOperator *Bop) { 7883 assert(Bop->getOpcode() == BO_And); 7884 Self.Diag(Bop->getOperatorLoc(), diag::warn_bitwise_and_in_bitwise_or) 7885 << Bop->getSourceRange() << OpLoc; 7886 SuggestParentheses(Self, Bop->getOperatorLoc(), 7887 Self.PDiag(diag::note_bitwise_and_in_bitwise_or_silence), 7888 Bop->getSourceRange()); 7889 } 7890 7891 /// \brief It accepts a '&&' expr that is inside a '||' one. 7892 /// Emit a diagnostic together with a fixit hint that wraps the '&&' expression 7893 /// in parentheses. 7894 static void 7895 EmitDiagnosticForLogicalAndInLogicalOr(Sema &Self, SourceLocation OpLoc, 7896 BinaryOperator *Bop) { 7897 assert(Bop->getOpcode() == BO_LAnd); 7898 Self.Diag(Bop->getOperatorLoc(), diag::warn_logical_and_in_logical_or) 7899 << Bop->getSourceRange() << OpLoc; 7900 SuggestParentheses(Self, Bop->getOperatorLoc(), 7901 Self.PDiag(diag::note_logical_and_in_logical_or_silence), 7902 Bop->getSourceRange()); 7903 } 7904 7905 /// \brief Returns true if the given expression can be evaluated as a constant 7906 /// 'true'. 7907 static bool EvaluatesAsTrue(Sema &S, Expr *E) { 7908 bool Res; 7909 return E->EvaluateAsBooleanCondition(Res, S.getASTContext()) && Res; 7910 } 7911 7912 /// \brief Returns true if the given expression can be evaluated as a constant 7913 /// 'false'. 7914 static bool EvaluatesAsFalse(Sema &S, Expr *E) { 7915 bool Res; 7916 return E->EvaluateAsBooleanCondition(Res, S.getASTContext()) && !Res; 7917 } 7918 7919 /// \brief Look for '&&' in the left hand of a '||' expr. 7920 static void DiagnoseLogicalAndInLogicalOrLHS(Sema &S, SourceLocation OpLoc, 7921 Expr *LHSExpr, Expr *RHSExpr) { 7922 if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(LHSExpr)) { 7923 if (Bop->getOpcode() == BO_LAnd) { 7924 // If it's "a && b || 0" don't warn since the precedence doesn't matter. 7925 if (EvaluatesAsFalse(S, RHSExpr)) 7926 return; 7927 // If it's "1 && a || b" don't warn since the precedence doesn't matter. 7928 if (!EvaluatesAsTrue(S, Bop->getLHS())) 7929 return EmitDiagnosticForLogicalAndInLogicalOr(S, OpLoc, Bop); 7930 } else if (Bop->getOpcode() == BO_LOr) { 7931 if (BinaryOperator *RBop = dyn_cast<BinaryOperator>(Bop->getRHS())) { 7932 // If it's "a || b && 1 || c" we didn't warn earlier for 7933 // "a || b && 1", but warn now. 7934 if (RBop->getOpcode() == BO_LAnd && EvaluatesAsTrue(S, RBop->getRHS())) 7935 return EmitDiagnosticForLogicalAndInLogicalOr(S, OpLoc, RBop); 7936 } 7937 } 7938 } 7939 } 7940 7941 /// \brief Look for '&&' in the right hand of a '||' expr. 7942 static void DiagnoseLogicalAndInLogicalOrRHS(Sema &S, SourceLocation OpLoc, 7943 Expr *LHSExpr, Expr *RHSExpr) { 7944 if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(RHSExpr)) { 7945 if (Bop->getOpcode() == BO_LAnd) { 7946 // If it's "0 || a && b" don't warn since the precedence doesn't matter. 7947 if (EvaluatesAsFalse(S, LHSExpr)) 7948 return; 7949 // If it's "a || b && 1" don't warn since the precedence doesn't matter. 7950 if (!EvaluatesAsTrue(S, Bop->getRHS())) 7951 return EmitDiagnosticForLogicalAndInLogicalOr(S, OpLoc, Bop); 7952 } 7953 } 7954 } 7955 7956 /// \brief Look for '&' in the left or right hand of a '|' expr. 7957 static void DiagnoseBitwiseAndInBitwiseOr(Sema &S, SourceLocation OpLoc, 7958 Expr *OrArg) { 7959 if (BinaryOperator *Bop = dyn_cast<BinaryOperator>(OrArg)) { 7960 if (Bop->getOpcode() == BO_And) 7961 return EmitDiagnosticForBitwiseAndInBitwiseOr(S, OpLoc, Bop); 7962 } 7963 } 7964 7965 /// DiagnoseBinOpPrecedence - Emit warnings for expressions with tricky 7966 /// precedence. 7967 static void DiagnoseBinOpPrecedence(Sema &Self, BinaryOperatorKind Opc, 7968 SourceLocation OpLoc, Expr *LHSExpr, 7969 Expr *RHSExpr){ 7970 // Diagnose "arg1 'bitwise' arg2 'eq' arg3". 7971 if (BinaryOperator::isBitwiseOp(Opc)) 7972 DiagnoseBitwisePrecedence(Self, Opc, OpLoc, LHSExpr, RHSExpr); 7973 7974 // Diagnose "arg1 & arg2 | arg3" 7975 if (Opc == BO_Or && !OpLoc.isMacroID()/* Don't warn in macros. */) { 7976 DiagnoseBitwiseAndInBitwiseOr(Self, OpLoc, LHSExpr); 7977 DiagnoseBitwiseAndInBitwiseOr(Self, OpLoc, RHSExpr); 7978 } 7979 7980 // Warn about arg1 || arg2 && arg3, as GCC 4.3+ does. 7981 // We don't warn for 'assert(a || b && "bad")' since this is safe. 7982 if (Opc == BO_LOr && !OpLoc.isMacroID()/* Don't warn in macros. */) { 7983 DiagnoseLogicalAndInLogicalOrLHS(Self, OpLoc, LHSExpr, RHSExpr); 7984 DiagnoseLogicalAndInLogicalOrRHS(Self, OpLoc, LHSExpr, RHSExpr); 7985 } 7986 } 7987 7988 // Binary Operators. 'Tok' is the token for the operator. 7989 ExprResult Sema::ActOnBinOp(Scope *S, SourceLocation TokLoc, 7990 tok::TokenKind Kind, 7991 Expr *LHSExpr, Expr *RHSExpr) { 7992 BinaryOperatorKind Opc = ConvertTokenKindToBinaryOpcode(Kind); 7993 assert((LHSExpr != 0) && "ActOnBinOp(): missing left expression"); 7994 assert((RHSExpr != 0) && "ActOnBinOp(): missing right expression"); 7995 7996 // Emit warnings for tricky precedence issues, e.g. "bitfield & 0x4 == 0" 7997 DiagnoseBinOpPrecedence(*this, Opc, TokLoc, LHSExpr, RHSExpr); 7998 7999 return BuildBinOp(S, TokLoc, Opc, LHSExpr, RHSExpr); 8000 } 8001 8002 /// Build an overloaded binary operator expression in the given scope. 8003 static ExprResult BuildOverloadedBinOp(Sema &S, Scope *Sc, SourceLocation OpLoc, 8004 BinaryOperatorKind Opc, 8005 Expr *LHS, Expr *RHS) { 8006 // Find all of the overloaded operators visible from this 8007 // point. We perform both an operator-name lookup from the local 8008 // scope and an argument-dependent lookup based on the types of 8009 // the arguments. 8010 UnresolvedSet<16> Functions; 8011 OverloadedOperatorKind OverOp 8012 = BinaryOperator::getOverloadedOperator(Opc); 8013 if (Sc && OverOp != OO_None) 8014 S.LookupOverloadedOperatorName(OverOp, Sc, LHS->getType(), 8015 RHS->getType(), Functions); 8016 8017 // Build the (potentially-overloaded, potentially-dependent) 8018 // binary operation. 8019 return S.CreateOverloadedBinOp(OpLoc, Opc, Functions, LHS, RHS); 8020 } 8021 8022 ExprResult Sema::BuildBinOp(Scope *S, SourceLocation OpLoc, 8023 BinaryOperatorKind Opc, 8024 Expr *LHSExpr, Expr *RHSExpr) { 8025 // We want to end up calling one of checkPseudoObjectAssignment 8026 // (if the LHS is a pseudo-object), BuildOverloadedBinOp (if 8027 // both expressions are overloadable or either is type-dependent), 8028 // or CreateBuiltinBinOp (in any other case). We also want to get 8029 // any placeholder types out of the way. 8030 8031 // Handle pseudo-objects in the LHS. 8032 if (const BuiltinType *pty = LHSExpr->getType()->getAsPlaceholderType()) { 8033 // Assignments with a pseudo-object l-value need special analysis. 8034 if (pty->getKind() == BuiltinType::PseudoObject && 8035 BinaryOperator::isAssignmentOp(Opc)) 8036 return checkPseudoObjectAssignment(S, OpLoc, Opc, LHSExpr, RHSExpr); 8037 8038 // Don't resolve overloads if the other type is overloadable. 8039 if (pty->getKind() == BuiltinType::Overload) { 8040 // We can't actually test that if we still have a placeholder, 8041 // though. Fortunately, none of the exceptions we see in that 8042 // code below are valid when the LHS is an overload set. Note 8043 // that an overload set can be dependently-typed, but it never 8044 // instantiates to having an overloadable type. 8045 ExprResult resolvedRHS = CheckPlaceholderExpr(RHSExpr); 8046 if (resolvedRHS.isInvalid()) return ExprError(); 8047 RHSExpr = resolvedRHS.take(); 8048 8049 if (RHSExpr->isTypeDependent() || 8050 RHSExpr->getType()->isOverloadableType()) 8051 return BuildOverloadedBinOp(*this, S, OpLoc, Opc, LHSExpr, RHSExpr); 8052 } 8053 8054 ExprResult LHS = CheckPlaceholderExpr(LHSExpr); 8055 if (LHS.isInvalid()) return ExprError(); 8056 LHSExpr = LHS.take(); 8057 } 8058 8059 // Handle pseudo-objects in the RHS. 8060 if (const BuiltinType *pty = RHSExpr->getType()->getAsPlaceholderType()) { 8061 // An overload in the RHS can potentially be resolved by the type 8062 // being assigned to. 8063 if (Opc == BO_Assign && pty->getKind() == BuiltinType::Overload) { 8064 if (LHSExpr->isTypeDependent() || RHSExpr->isTypeDependent()) 8065 return BuildOverloadedBinOp(*this, S, OpLoc, Opc, LHSExpr, RHSExpr); 8066 8067 return CreateBuiltinBinOp(OpLoc, Opc, LHSExpr, RHSExpr); 8068 } 8069 8070 // Don't resolve overloads if the other type is overloadable. 8071 if (pty->getKind() == BuiltinType::Overload && 8072 LHSExpr->getType()->isOverloadableType()) 8073 return BuildOverloadedBinOp(*this, S, OpLoc, Opc, LHSExpr, RHSExpr); 8074 8075 ExprResult resolvedRHS = CheckPlaceholderExpr(RHSExpr); 8076 if (!resolvedRHS.isUsable()) return ExprError(); 8077 RHSExpr = resolvedRHS.take(); 8078 } 8079 8080 if (getLangOptions().CPlusPlus) { 8081 // If either expression is type-dependent, always build an 8082 // overloaded op. 8083 if (LHSExpr->isTypeDependent() || RHSExpr->isTypeDependent()) 8084 return BuildOverloadedBinOp(*this, S, OpLoc, Opc, LHSExpr, RHSExpr); 8085 8086 // Otherwise, build an overloaded op if either expression has an 8087 // overloadable type. 8088 if (LHSExpr->getType()->isOverloadableType() || 8089 RHSExpr->getType()->isOverloadableType()) 8090 return BuildOverloadedBinOp(*this, S, OpLoc, Opc, LHSExpr, RHSExpr); 8091 } 8092 8093 // Build a built-in binary operation. 8094 return CreateBuiltinBinOp(OpLoc, Opc, LHSExpr, RHSExpr); 8095 } 8096 8097 ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, 8098 UnaryOperatorKind Opc, 8099 Expr *InputExpr) { 8100 ExprResult Input = Owned(InputExpr); 8101 ExprValueKind VK = VK_RValue; 8102 ExprObjectKind OK = OK_Ordinary; 8103 QualType resultType; 8104 switch (Opc) { 8105 case UO_PreInc: 8106 case UO_PreDec: 8107 case UO_PostInc: 8108 case UO_PostDec: 8109 resultType = CheckIncrementDecrementOperand(*this, Input.get(), VK, OpLoc, 8110 Opc == UO_PreInc || 8111 Opc == UO_PostInc, 8112 Opc == UO_PreInc || 8113 Opc == UO_PreDec); 8114 break; 8115 case UO_AddrOf: 8116 resultType = CheckAddressOfOperand(*this, Input, OpLoc); 8117 break; 8118 case UO_Deref: { 8119 Input = DefaultFunctionArrayLvalueConversion(Input.take()); 8120 resultType = CheckIndirectionOperand(*this, Input.get(), VK, OpLoc); 8121 break; 8122 } 8123 case UO_Plus: 8124 case UO_Minus: 8125 Input = UsualUnaryConversions(Input.take()); 8126 if (Input.isInvalid()) return ExprError(); 8127 resultType = Input.get()->getType(); 8128 if (resultType->isDependentType()) 8129 break; 8130 if (resultType->isArithmeticType() || // C99 6.5.3.3p1 8131 resultType->isVectorType()) 8132 break; 8133 else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6-7 8134 resultType->isEnumeralType()) 8135 break; 8136 else if (getLangOptions().CPlusPlus && // C++ [expr.unary.op]p6 8137 Opc == UO_Plus && 8138 resultType->isPointerType()) 8139 break; 8140 8141 return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) 8142 << resultType << Input.get()->getSourceRange()); 8143 8144 case UO_Not: // bitwise complement 8145 Input = UsualUnaryConversions(Input.take()); 8146 if (Input.isInvalid()) return ExprError(); 8147 resultType = Input.get()->getType(); 8148 if (resultType->isDependentType()) 8149 break; 8150 // C99 6.5.3.3p1. We allow complex int and float as a GCC extension. 8151 if (resultType->isComplexType() || resultType->isComplexIntegerType()) 8152 // C99 does not support '~' for complex conjugation. 8153 Diag(OpLoc, diag::ext_integer_complement_complex) 8154 << resultType << Input.get()->getSourceRange(); 8155 else if (resultType->hasIntegerRepresentation()) 8156 break; 8157 else { 8158 return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) 8159 << resultType << Input.get()->getSourceRange()); 8160 } 8161 break; 8162 8163 case UO_LNot: // logical negation 8164 // Unlike +/-/~, integer promotions aren't done here (C99 6.5.3.3p5). 8165 Input = DefaultFunctionArrayLvalueConversion(Input.take()); 8166 if (Input.isInvalid()) return ExprError(); 8167 resultType = Input.get()->getType(); 8168 8169 // Though we still have to promote half FP to float... 8170 if (resultType->isHalfType()) { 8171 Input = ImpCastExprToType(Input.take(), Context.FloatTy, CK_FloatingCast).take(); 8172 resultType = Context.FloatTy; 8173 } 8174 8175 if (resultType->isDependentType()) 8176 break; 8177 if (resultType->isScalarType()) { 8178 // C99 6.5.3.3p1: ok, fallthrough; 8179 if (Context.getLangOptions().CPlusPlus) { 8180 // C++03 [expr.unary.op]p8, C++0x [expr.unary.op]p9: 8181 // operand contextually converted to bool. 8182 Input = ImpCastExprToType(Input.take(), Context.BoolTy, 8183 ScalarTypeToBooleanCastKind(resultType)); 8184 } 8185 } else { 8186 return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) 8187 << resultType << Input.get()->getSourceRange()); 8188 } 8189 8190 // LNot always has type int. C99 6.5.3.3p5. 8191 // In C++, it's bool. C++ 5.3.1p8 8192 resultType = Context.getLogicalOperationType(); 8193 break; 8194 case UO_Real: 8195 case UO_Imag: 8196 resultType = CheckRealImagOperand(*this, Input, OpLoc, Opc == UO_Real); 8197 // _Real and _Imag map ordinary l-values into ordinary l-values. 8198 if (Input.isInvalid()) return ExprError(); 8199 if (Input.get()->getValueKind() != VK_RValue && 8200 Input.get()->getObjectKind() == OK_Ordinary) 8201 VK = Input.get()->getValueKind(); 8202 break; 8203 case UO_Extension: 8204 resultType = Input.get()->getType(); 8205 VK = Input.get()->getValueKind(); 8206 OK = Input.get()->getObjectKind(); 8207 break; 8208 } 8209 if (resultType.isNull() || Input.isInvalid()) 8210 return ExprError(); 8211 8212 // Check for array bounds violations in the operand of the UnaryOperator, 8213 // except for the '*' and '&' operators that have to be handled specially 8214 // by CheckArrayAccess (as there are special cases like &array[arraysize] 8215 // that are explicitly defined as valid by the standard). 8216 if (Opc != UO_AddrOf && Opc != UO_Deref) 8217 CheckArrayAccess(Input.get()); 8218 8219 return Owned(new (Context) UnaryOperator(Input.take(), Opc, resultType, 8220 VK, OK, OpLoc)); 8221 } 8222 8223 ExprResult Sema::BuildUnaryOp(Scope *S, SourceLocation OpLoc, 8224 UnaryOperatorKind Opc, Expr *Input) { 8225 // First things first: handle placeholders so that the 8226 // overloaded-operator check considers the right type. 8227 if (const BuiltinType *pty = Input->getType()->getAsPlaceholderType()) { 8228 // Increment and decrement of pseudo-object references. 8229 if (pty->getKind() == BuiltinType::PseudoObject && 8230 UnaryOperator::isIncrementDecrementOp(Opc)) 8231 return checkPseudoObjectIncDec(S, OpLoc, Opc, Input); 8232 8233 // extension is always a builtin operator. 8234 if (Opc == UO_Extension) 8235 return CreateBuiltinUnaryOp(OpLoc, Opc, Input); 8236 8237 // & gets special logic for several kinds of placeholder. 8238 // The builtin code knows what to do. 8239 if (Opc == UO_AddrOf && 8240 (pty->getKind() == BuiltinType::Overload || 8241 pty->getKind() == BuiltinType::UnknownAny || 8242 pty->getKind() == BuiltinType::BoundMember)) 8243 return CreateBuiltinUnaryOp(OpLoc, Opc, Input); 8244 8245 // Anything else needs to be handled now. 8246 ExprResult Result = CheckPlaceholderExpr(Input); 8247 if (Result.isInvalid()) return ExprError(); 8248 Input = Result.take(); 8249 } 8250 8251 if (getLangOptions().CPlusPlus && Input->getType()->isOverloadableType() && 8252 UnaryOperator::getOverloadedOperator(Opc) != OO_None) { 8253 // Find all of the overloaded operators visible from this 8254 // point. We perform both an operator-name lookup from the local 8255 // scope and an argument-dependent lookup based on the types of 8256 // the arguments. 8257 UnresolvedSet<16> Functions; 8258 OverloadedOperatorKind OverOp = UnaryOperator::getOverloadedOperator(Opc); 8259 if (S && OverOp != OO_None) 8260 LookupOverloadedOperatorName(OverOp, S, Input->getType(), QualType(), 8261 Functions); 8262 8263 return CreateOverloadedUnaryOp(OpLoc, Opc, Functions, Input); 8264 } 8265 8266 return CreateBuiltinUnaryOp(OpLoc, Opc, Input); 8267 } 8268 8269 // Unary Operators. 'Tok' is the token for the operator. 8270 ExprResult Sema::ActOnUnaryOp(Scope *S, SourceLocation OpLoc, 8271 tok::TokenKind Op, Expr *Input) { 8272 return BuildUnaryOp(S, OpLoc, ConvertTokenKindToUnaryOpcode(Op), Input); 8273 } 8274 8275 /// ActOnAddrLabel - Parse the GNU address of label extension: "&&foo". 8276 ExprResult Sema::ActOnAddrLabel(SourceLocation OpLoc, SourceLocation LabLoc, 8277 LabelDecl *TheDecl) { 8278 TheDecl->setUsed(); 8279 // Create the AST node. The address of a label always has type 'void*'. 8280 return Owned(new (Context) AddrLabelExpr(OpLoc, LabLoc, TheDecl, 8281 Context.getPointerType(Context.VoidTy))); 8282 } 8283 8284 /// Given the last statement in a statement-expression, check whether 8285 /// the result is a producing expression (like a call to an 8286 /// ns_returns_retained function) and, if so, rebuild it to hoist the 8287 /// release out of the full-expression. Otherwise, return null. 8288 /// Cannot fail. 8289 static Expr *maybeRebuildARCConsumingStmt(Stmt *Statement) { 8290 // Should always be wrapped with one of these. 8291 ExprWithCleanups *cleanups = dyn_cast<ExprWithCleanups>(Statement); 8292 if (!cleanups) return 0; 8293 8294 ImplicitCastExpr *cast = dyn_cast<ImplicitCastExpr>(cleanups->getSubExpr()); 8295 if (!cast || cast->getCastKind() != CK_ARCConsumeObject) 8296 return 0; 8297 8298 // Splice out the cast. This shouldn't modify any interesting 8299 // features of the statement. 8300 Expr *producer = cast->getSubExpr(); 8301 assert(producer->getType() == cast->getType()); 8302 assert(producer->getValueKind() == cast->getValueKind()); 8303 cleanups->setSubExpr(producer); 8304 return cleanups; 8305 } 8306 8307 ExprResult 8308 Sema::ActOnStmtExpr(SourceLocation LPLoc, Stmt *SubStmt, 8309 SourceLocation RPLoc) { // "({..})" 8310 assert(SubStmt && isa<CompoundStmt>(SubStmt) && "Invalid action invocation!"); 8311 CompoundStmt *Compound = cast<CompoundStmt>(SubStmt); 8312 8313 bool isFileScope 8314 = (getCurFunctionOrMethodDecl() == 0) && (getCurBlock() == 0); 8315 if (isFileScope) 8316 return ExprError(Diag(LPLoc, diag::err_stmtexpr_file_scope)); 8317 8318 // FIXME: there are a variety of strange constraints to enforce here, for 8319 // example, it is not possible to goto into a stmt expression apparently. 8320 // More semantic analysis is needed. 8321 8322 // If there are sub stmts in the compound stmt, take the type of the last one 8323 // as the type of the stmtexpr. 8324 QualType Ty = Context.VoidTy; 8325 bool StmtExprMayBindToTemp = false; 8326 if (!Compound->body_empty()) { 8327 Stmt *LastStmt = Compound->body_back(); 8328 LabelStmt *LastLabelStmt = 0; 8329 // If LastStmt is a label, skip down through into the body. 8330 while (LabelStmt *Label = dyn_cast<LabelStmt>(LastStmt)) { 8331 LastLabelStmt = Label; 8332 LastStmt = Label->getSubStmt(); 8333 } 8334 8335 if (Expr *LastE = dyn_cast<Expr>(LastStmt)) { 8336 // Do function/array conversion on the last expression, but not 8337 // lvalue-to-rvalue. However, initialize an unqualified type. 8338 ExprResult LastExpr = DefaultFunctionArrayConversion(LastE); 8339 if (LastExpr.isInvalid()) 8340 return ExprError(); 8341 Ty = LastExpr.get()->getType().getUnqualifiedType(); 8342 8343 if (!Ty->isDependentType() && !LastExpr.get()->isTypeDependent()) { 8344 // In ARC, if the final expression ends in a consume, splice 8345 // the consume out and bind it later. In the alternate case 8346 // (when dealing with a retainable type), the result 8347 // initialization will create a produce. In both cases the 8348 // result will be +1, and we'll need to balance that out with 8349 // a bind. 8350 if (Expr *rebuiltLastStmt 8351 = maybeRebuildARCConsumingStmt(LastExpr.get())) { 8352 LastExpr = rebuiltLastStmt; 8353 } else { 8354 LastExpr = PerformCopyInitialization( 8355 InitializedEntity::InitializeResult(LPLoc, 8356 Ty, 8357 false), 8358 SourceLocation(), 8359 LastExpr); 8360 } 8361 8362 if (LastExpr.isInvalid()) 8363 return ExprError(); 8364 if (LastExpr.get() != 0) { 8365 if (!LastLabelStmt) 8366 Compound->setLastStmt(LastExpr.take()); 8367 else 8368 LastLabelStmt->setSubStmt(LastExpr.take()); 8369 StmtExprMayBindToTemp = true; 8370 } 8371 } 8372 } 8373 } 8374 8375 // FIXME: Check that expression type is complete/non-abstract; statement 8376 // expressions are not lvalues. 8377 Expr *ResStmtExpr = new (Context) StmtExpr(Compound, Ty, LPLoc, RPLoc); 8378 if (StmtExprMayBindToTemp) 8379 return MaybeBindToTemporary(ResStmtExpr); 8380 return Owned(ResStmtExpr); 8381 } 8382 8383 ExprResult Sema::BuildBuiltinOffsetOf(SourceLocation BuiltinLoc, 8384 TypeSourceInfo *TInfo, 8385 OffsetOfComponent *CompPtr, 8386 unsigned NumComponents, 8387 SourceLocation RParenLoc) { 8388 QualType ArgTy = TInfo->getType(); 8389 bool Dependent = ArgTy->isDependentType(); 8390 SourceRange TypeRange = TInfo->getTypeLoc().getLocalSourceRange(); 8391 8392 // We must have at least one component that refers to the type, and the first 8393 // one is known to be a field designator. Verify that the ArgTy represents 8394 // a struct/union/class. 8395 if (!Dependent && !ArgTy->isRecordType()) 8396 return ExprError(Diag(BuiltinLoc, diag::err_offsetof_record_type) 8397 << ArgTy << TypeRange); 8398 8399 // Type must be complete per C99 7.17p3 because a declaring a variable 8400 // with an incomplete type would be ill-formed. 8401 if (!Dependent 8402 && RequireCompleteType(BuiltinLoc, ArgTy, 8403 PDiag(diag::err_offsetof_incomplete_type) 8404 << TypeRange)) 8405 return ExprError(); 8406 8407 // offsetof with non-identifier designators (e.g. "offsetof(x, a.b[c])") are a 8408 // GCC extension, diagnose them. 8409 // FIXME: This diagnostic isn't actually visible because the location is in 8410 // a system header! 8411 if (NumComponents != 1) 8412 Diag(BuiltinLoc, diag::ext_offsetof_extended_field_designator) 8413 << SourceRange(CompPtr[1].LocStart, CompPtr[NumComponents-1].LocEnd); 8414 8415 bool DidWarnAboutNonPOD = false; 8416 QualType CurrentType = ArgTy; 8417 typedef OffsetOfExpr::OffsetOfNode OffsetOfNode; 8418 SmallVector<OffsetOfNode, 4> Comps; 8419 SmallVector<Expr*, 4> Exprs; 8420 for (unsigned i = 0; i != NumComponents; ++i) { 8421 const OffsetOfComponent &OC = CompPtr[i]; 8422 if (OC.isBrackets) { 8423 // Offset of an array sub-field. TODO: Should we allow vector elements? 8424 if (!CurrentType->isDependentType()) { 8425 const ArrayType *AT = Context.getAsArrayType(CurrentType); 8426 if(!AT) 8427 return ExprError(Diag(OC.LocEnd, diag::err_offsetof_array_type) 8428 << CurrentType); 8429 CurrentType = AT->getElementType(); 8430 } else 8431 CurrentType = Context.DependentTy; 8432 8433 ExprResult IdxRval = DefaultLvalueConversion(static_cast<Expr*>(OC.U.E)); 8434 if (IdxRval.isInvalid()) 8435 return ExprError(); 8436 Expr *Idx = IdxRval.take(); 8437 8438 // The expression must be an integral expression. 8439 // FIXME: An integral constant expression? 8440 if (!Idx->isTypeDependent() && !Idx->isValueDependent() && 8441 !Idx->getType()->isIntegerType()) 8442 return ExprError(Diag(Idx->getLocStart(), 8443 diag::err_typecheck_subscript_not_integer) 8444 << Idx->getSourceRange()); 8445 8446 // Record this array index. 8447 Comps.push_back(OffsetOfNode(OC.LocStart, Exprs.size(), OC.LocEnd)); 8448 Exprs.push_back(Idx); 8449 continue; 8450 } 8451 8452 // Offset of a field. 8453 if (CurrentType->isDependentType()) { 8454 // We have the offset of a field, but we can't look into the dependent 8455 // type. Just record the identifier of the field. 8456 Comps.push_back(OffsetOfNode(OC.LocStart, OC.U.IdentInfo, OC.LocEnd)); 8457 CurrentType = Context.DependentTy; 8458 continue; 8459 } 8460 8461 // We need to have a complete type to look into. 8462 if (RequireCompleteType(OC.LocStart, CurrentType, 8463 diag::err_offsetof_incomplete_type)) 8464 return ExprError(); 8465 8466 // Look for the designated field. 8467 const RecordType *RC = CurrentType->getAs<RecordType>(); 8468 if (!RC) 8469 return ExprError(Diag(OC.LocEnd, diag::err_offsetof_record_type) 8470 << CurrentType); 8471 RecordDecl *RD = RC->getDecl(); 8472 8473 // C++ [lib.support.types]p5: 8474 // The macro offsetof accepts a restricted set of type arguments in this 8475 // International Standard. type shall be a POD structure or a POD union 8476 // (clause 9). 8477 if (CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(RD)) { 8478 if (!CRD->isPOD() && !DidWarnAboutNonPOD && 8479 DiagRuntimeBehavior(BuiltinLoc, 0, 8480 PDiag(diag::warn_offsetof_non_pod_type) 8481 << SourceRange(CompPtr[0].LocStart, OC.LocEnd) 8482 << CurrentType)) 8483 DidWarnAboutNonPOD = true; 8484 } 8485 8486 // Look for the field. 8487 LookupResult R(*this, OC.U.IdentInfo, OC.LocStart, LookupMemberName); 8488 LookupQualifiedName(R, RD); 8489 FieldDecl *MemberDecl = R.getAsSingle<FieldDecl>(); 8490 IndirectFieldDecl *IndirectMemberDecl = 0; 8491 if (!MemberDecl) { 8492 if ((IndirectMemberDecl = R.getAsSingle<IndirectFieldDecl>())) 8493 MemberDecl = IndirectMemberDecl->getAnonField(); 8494 } 8495 8496 if (!MemberDecl) 8497 return ExprError(Diag(BuiltinLoc, diag::err_no_member) 8498 << OC.U.IdentInfo << RD << SourceRange(OC.LocStart, 8499 OC.LocEnd)); 8500 8501 // C99 7.17p3: 8502 // (If the specified member is a bit-field, the behavior is undefined.) 8503 // 8504 // We diagnose this as an error. 8505 if (MemberDecl->isBitField()) { 8506 Diag(OC.LocEnd, diag::err_offsetof_bitfield) 8507 << MemberDecl->getDeclName() 8508 << SourceRange(BuiltinLoc, RParenLoc); 8509 Diag(MemberDecl->getLocation(), diag::note_bitfield_decl); 8510 return ExprError(); 8511 } 8512 8513 RecordDecl *Parent = MemberDecl->getParent(); 8514 if (IndirectMemberDecl) 8515 Parent = cast<RecordDecl>(IndirectMemberDecl->getDeclContext()); 8516 8517 // If the member was found in a base class, introduce OffsetOfNodes for 8518 // the base class indirections. 8519 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 8520 /*DetectVirtual=*/false); 8521 if (IsDerivedFrom(CurrentType, Context.getTypeDeclType(Parent), Paths)) { 8522 CXXBasePath &Path = Paths.front(); 8523 for (CXXBasePath::iterator B = Path.begin(), BEnd = Path.end(); 8524 B != BEnd; ++B) 8525 Comps.push_back(OffsetOfNode(B->Base)); 8526 } 8527 8528 if (IndirectMemberDecl) { 8529 for (IndirectFieldDecl::chain_iterator FI = 8530 IndirectMemberDecl->chain_begin(), 8531 FEnd = IndirectMemberDecl->chain_end(); FI != FEnd; FI++) { 8532 assert(isa<FieldDecl>(*FI)); 8533 Comps.push_back(OffsetOfNode(OC.LocStart, 8534 cast<FieldDecl>(*FI), OC.LocEnd)); 8535 } 8536 } else 8537 Comps.push_back(OffsetOfNode(OC.LocStart, MemberDecl, OC.LocEnd)); 8538 8539 CurrentType = MemberDecl->getType().getNonReferenceType(); 8540 } 8541 8542 return Owned(OffsetOfExpr::Create(Context, Context.getSizeType(), BuiltinLoc, 8543 TInfo, Comps.data(), Comps.size(), 8544 Exprs.data(), Exprs.size(), RParenLoc)); 8545 } 8546 8547 ExprResult Sema::ActOnBuiltinOffsetOf(Scope *S, 8548 SourceLocation BuiltinLoc, 8549 SourceLocation TypeLoc, 8550 ParsedType ParsedArgTy, 8551 OffsetOfComponent *CompPtr, 8552 unsigned NumComponents, 8553 SourceLocation RParenLoc) { 8554 8555 TypeSourceInfo *ArgTInfo; 8556 QualType ArgTy = GetTypeFromParser(ParsedArgTy, &ArgTInfo); 8557 if (ArgTy.isNull()) 8558 return ExprError(); 8559 8560 if (!ArgTInfo) 8561 ArgTInfo = Context.getTrivialTypeSourceInfo(ArgTy, TypeLoc); 8562 8563 return BuildBuiltinOffsetOf(BuiltinLoc, ArgTInfo, CompPtr, NumComponents, 8564 RParenLoc); 8565 } 8566 8567 8568 ExprResult Sema::ActOnChooseExpr(SourceLocation BuiltinLoc, 8569 Expr *CondExpr, 8570 Expr *LHSExpr, Expr *RHSExpr, 8571 SourceLocation RPLoc) { 8572 assert((CondExpr && LHSExpr && RHSExpr) && "Missing type argument(s)"); 8573 8574 ExprValueKind VK = VK_RValue; 8575 ExprObjectKind OK = OK_Ordinary; 8576 QualType resType; 8577 bool ValueDependent = false; 8578 if (CondExpr->isTypeDependent() || CondExpr->isValueDependent()) { 8579 resType = Context.DependentTy; 8580 ValueDependent = true; 8581 } else { 8582 // The conditional expression is required to be a constant expression. 8583 llvm::APSInt condEval(32); 8584 SourceLocation ExpLoc; 8585 if (!CondExpr->isIntegerConstantExpr(condEval, Context, &ExpLoc)) 8586 return ExprError(Diag(ExpLoc, 8587 diag::err_typecheck_choose_expr_requires_constant) 8588 << CondExpr->getSourceRange()); 8589 8590 // If the condition is > zero, then the AST type is the same as the LSHExpr. 8591 Expr *ActiveExpr = condEval.getZExtValue() ? LHSExpr : RHSExpr; 8592 8593 resType = ActiveExpr->getType(); 8594 ValueDependent = ActiveExpr->isValueDependent(); 8595 VK = ActiveExpr->getValueKind(); 8596 OK = ActiveExpr->getObjectKind(); 8597 } 8598 8599 return Owned(new (Context) ChooseExpr(BuiltinLoc, CondExpr, LHSExpr, RHSExpr, 8600 resType, VK, OK, RPLoc, 8601 resType->isDependentType(), 8602 ValueDependent)); 8603 } 8604 8605 //===----------------------------------------------------------------------===// 8606 // Clang Extensions. 8607 //===----------------------------------------------------------------------===// 8608 8609 /// ActOnBlockStart - This callback is invoked when a block literal is started. 8610 void Sema::ActOnBlockStart(SourceLocation CaretLoc, Scope *CurScope) { 8611 BlockDecl *Block = BlockDecl::Create(Context, CurContext, CaretLoc); 8612 PushBlockScope(CurScope, Block); 8613 CurContext->addDecl(Block); 8614 if (CurScope) 8615 PushDeclContext(CurScope, Block); 8616 else 8617 CurContext = Block; 8618 8619 // Enter a new evaluation context to insulate the block from any 8620 // cleanups from the enclosing full-expression. 8621 PushExpressionEvaluationContext(PotentiallyEvaluated); 8622 } 8623 8624 void Sema::ActOnBlockArguments(Declarator &ParamInfo, Scope *CurScope) { 8625 assert(ParamInfo.getIdentifier()==0 && "block-id should have no identifier!"); 8626 assert(ParamInfo.getContext() == Declarator::BlockLiteralContext); 8627 BlockScopeInfo *CurBlock = getCurBlock(); 8628 8629 TypeSourceInfo *Sig = GetTypeForDeclarator(ParamInfo, CurScope); 8630 QualType T = Sig->getType(); 8631 8632 // GetTypeForDeclarator always produces a function type for a block 8633 // literal signature. Furthermore, it is always a FunctionProtoType 8634 // unless the function was written with a typedef. 8635 assert(T->isFunctionType() && 8636 "GetTypeForDeclarator made a non-function block signature"); 8637 8638 // Look for an explicit signature in that function type. 8639 FunctionProtoTypeLoc ExplicitSignature; 8640 8641 TypeLoc tmp = Sig->getTypeLoc().IgnoreParens(); 8642 if (isa<FunctionProtoTypeLoc>(tmp)) { 8643 ExplicitSignature = cast<FunctionProtoTypeLoc>(tmp); 8644 8645 // Check whether that explicit signature was synthesized by 8646 // GetTypeForDeclarator. If so, don't save that as part of the 8647 // written signature. 8648 if (ExplicitSignature.getLocalRangeBegin() == 8649 ExplicitSignature.getLocalRangeEnd()) { 8650 // This would be much cheaper if we stored TypeLocs instead of 8651 // TypeSourceInfos. 8652 TypeLoc Result = ExplicitSignature.getResultLoc(); 8653 unsigned Size = Result.getFullDataSize(); 8654 Sig = Context.CreateTypeSourceInfo(Result.getType(), Size); 8655 Sig->getTypeLoc().initializeFullCopy(Result, Size); 8656 8657 ExplicitSignature = FunctionProtoTypeLoc(); 8658 } 8659 } 8660 8661 CurBlock->TheDecl->setSignatureAsWritten(Sig); 8662 CurBlock->FunctionType = T; 8663 8664 const FunctionType *Fn = T->getAs<FunctionType>(); 8665 QualType RetTy = Fn->getResultType(); 8666 bool isVariadic = 8667 (isa<FunctionProtoType>(Fn) && cast<FunctionProtoType>(Fn)->isVariadic()); 8668 8669 CurBlock->TheDecl->setIsVariadic(isVariadic); 8670 8671 // Don't allow returning a objc interface by value. 8672 if (RetTy->isObjCObjectType()) { 8673 Diag(ParamInfo.getSourceRange().getBegin(), 8674 diag::err_object_cannot_be_passed_returned_by_value) << 0 << RetTy; 8675 return; 8676 } 8677 8678 // Context.DependentTy is used as a placeholder for a missing block 8679 // return type. TODO: what should we do with declarators like: 8680 // ^ * { ... } 8681 // If the answer is "apply template argument deduction".... 8682 if (RetTy != Context.DependentTy) 8683 CurBlock->ReturnType = RetTy; 8684 8685 // Push block parameters from the declarator if we had them. 8686 SmallVector<ParmVarDecl*, 8> Params; 8687 if (ExplicitSignature) { 8688 for (unsigned I = 0, E = ExplicitSignature.getNumArgs(); I != E; ++I) { 8689 ParmVarDecl *Param = ExplicitSignature.getArg(I); 8690 if (Param->getIdentifier() == 0 && 8691 !Param->isImplicit() && 8692 !Param->isInvalidDecl() && 8693 !getLangOptions().CPlusPlus) 8694 Diag(Param->getLocation(), diag::err_parameter_name_omitted); 8695 Params.push_back(Param); 8696 } 8697 8698 // Fake up parameter variables if we have a typedef, like 8699 // ^ fntype { ... } 8700 } else if (const FunctionProtoType *Fn = T->getAs<FunctionProtoType>()) { 8701 for (FunctionProtoType::arg_type_iterator 8702 I = Fn->arg_type_begin(), E = Fn->arg_type_end(); I != E; ++I) { 8703 ParmVarDecl *Param = 8704 BuildParmVarDeclForTypedef(CurBlock->TheDecl, 8705 ParamInfo.getSourceRange().getBegin(), 8706 *I); 8707 Params.push_back(Param); 8708 } 8709 } 8710 8711 // Set the parameters on the block decl. 8712 if (!Params.empty()) { 8713 CurBlock->TheDecl->setParams(Params); 8714 CheckParmsForFunctionDef(CurBlock->TheDecl->param_begin(), 8715 CurBlock->TheDecl->param_end(), 8716 /*CheckParameterNames=*/false); 8717 } 8718 8719 // Finally we can process decl attributes. 8720 ProcessDeclAttributes(CurScope, CurBlock->TheDecl, ParamInfo); 8721 8722 if (!isVariadic && CurBlock->TheDecl->getAttr<SentinelAttr>()) { 8723 Diag(ParamInfo.getAttributes()->getLoc(), 8724 diag::warn_attribute_sentinel_not_variadic) << 1; 8725 // FIXME: remove the attribute. 8726 } 8727 8728 // Put the parameter variables in scope. We can bail out immediately 8729 // if we don't have any. 8730 if (Params.empty()) 8731 return; 8732 8733 for (BlockDecl::param_iterator AI = CurBlock->TheDecl->param_begin(), 8734 E = CurBlock->TheDecl->param_end(); AI != E; ++AI) { 8735 (*AI)->setOwningFunction(CurBlock->TheDecl); 8736 8737 // If this has an identifier, add it to the scope stack. 8738 if ((*AI)->getIdentifier()) { 8739 CheckShadow(CurBlock->TheScope, *AI); 8740 8741 PushOnScopeChains(*AI, CurBlock->TheScope); 8742 } 8743 } 8744 } 8745 8746 /// ActOnBlockError - If there is an error parsing a block, this callback 8747 /// is invoked to pop the information about the block from the action impl. 8748 void Sema::ActOnBlockError(SourceLocation CaretLoc, Scope *CurScope) { 8749 // Leave the expression-evaluation context. 8750 DiscardCleanupsInEvaluationContext(); 8751 PopExpressionEvaluationContext(); 8752 8753 // Pop off CurBlock, handle nested blocks. 8754 PopDeclContext(); 8755 PopFunctionOrBlockScope(); 8756 } 8757 8758 /// ActOnBlockStmtExpr - This is called when the body of a block statement 8759 /// literal was successfully completed. ^(int x){...} 8760 ExprResult Sema::ActOnBlockStmtExpr(SourceLocation CaretLoc, 8761 Stmt *Body, Scope *CurScope) { 8762 // If blocks are disabled, emit an error. 8763 if (!LangOpts.Blocks) 8764 Diag(CaretLoc, diag::err_blocks_disable); 8765 8766 // Leave the expression-evaluation context. 8767 assert(!ExprNeedsCleanups && "cleanups within block not correctly bound!"); 8768 PopExpressionEvaluationContext(); 8769 8770 BlockScopeInfo *BSI = cast<BlockScopeInfo>(FunctionScopes.back()); 8771 8772 PopDeclContext(); 8773 8774 QualType RetTy = Context.VoidTy; 8775 if (!BSI->ReturnType.isNull()) 8776 RetTy = BSI->ReturnType; 8777 8778 bool NoReturn = BSI->TheDecl->getAttr<NoReturnAttr>(); 8779 QualType BlockTy; 8780 8781 // Set the captured variables on the block. 8782 BSI->TheDecl->setCaptures(Context, BSI->Captures.begin(), BSI->Captures.end(), 8783 BSI->CapturesCXXThis); 8784 8785 // If the user wrote a function type in some form, try to use that. 8786 if (!BSI->FunctionType.isNull()) { 8787 const FunctionType *FTy = BSI->FunctionType->getAs<FunctionType>(); 8788 8789 FunctionType::ExtInfo Ext = FTy->getExtInfo(); 8790 if (NoReturn && !Ext.getNoReturn()) Ext = Ext.withNoReturn(true); 8791 8792 // Turn protoless block types into nullary block types. 8793 if (isa<FunctionNoProtoType>(FTy)) { 8794 FunctionProtoType::ExtProtoInfo EPI; 8795 EPI.ExtInfo = Ext; 8796 BlockTy = Context.getFunctionType(RetTy, 0, 0, EPI); 8797 8798 // Otherwise, if we don't need to change anything about the function type, 8799 // preserve its sugar structure. 8800 } else if (FTy->getResultType() == RetTy && 8801 (!NoReturn || FTy->getNoReturnAttr())) { 8802 BlockTy = BSI->FunctionType; 8803 8804 // Otherwise, make the minimal modifications to the function type. 8805 } else { 8806 const FunctionProtoType *FPT = cast<FunctionProtoType>(FTy); 8807 FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); 8808 EPI.TypeQuals = 0; // FIXME: silently? 8809 EPI.ExtInfo = Ext; 8810 BlockTy = Context.getFunctionType(RetTy, 8811 FPT->arg_type_begin(), 8812 FPT->getNumArgs(), 8813 EPI); 8814 } 8815 8816 // If we don't have a function type, just build one from nothing. 8817 } else { 8818 FunctionProtoType::ExtProtoInfo EPI; 8819 EPI.ExtInfo = FunctionType::ExtInfo().withNoReturn(NoReturn); 8820 BlockTy = Context.getFunctionType(RetTy, 0, 0, EPI); 8821 } 8822 8823 DiagnoseUnusedParameters(BSI->TheDecl->param_begin(), 8824 BSI->TheDecl->param_end()); 8825 BlockTy = Context.getBlockPointerType(BlockTy); 8826 8827 // If needed, diagnose invalid gotos and switches in the block. 8828 if (getCurFunction()->NeedsScopeChecking() && 8829 !hasAnyUnrecoverableErrorsInThisFunction()) 8830 DiagnoseInvalidJumps(cast<CompoundStmt>(Body)); 8831 8832 BSI->TheDecl->setBody(cast<CompoundStmt>(Body)); 8833 8834 for (BlockDecl::capture_const_iterator ci = BSI->TheDecl->capture_begin(), 8835 ce = BSI->TheDecl->capture_end(); ci != ce; ++ci) { 8836 const VarDecl *variable = ci->getVariable(); 8837 QualType T = variable->getType(); 8838 QualType::DestructionKind destructKind = T.isDestructedType(); 8839 if (destructKind != QualType::DK_none) 8840 getCurFunction()->setHasBranchProtectedScope(); 8841 } 8842 8843 computeNRVO(Body, getCurBlock()); 8844 8845 BlockExpr *Result = new (Context) BlockExpr(BSI->TheDecl, BlockTy); 8846 const AnalysisBasedWarnings::Policy &WP = AnalysisWarnings.getDefaultPolicy(); 8847 PopFunctionOrBlockScope(&WP, Result->getBlockDecl(), Result); 8848 8849 // If the block isn't obviously global, i.e. it captures anything at 8850 // all, mark this full-expression as needing a cleanup. 8851 if (Result->getBlockDecl()->hasCaptures()) { 8852 ExprCleanupObjects.push_back(Result->getBlockDecl()); 8853 ExprNeedsCleanups = true; 8854 } 8855 8856 return Owned(Result); 8857 } 8858 8859 ExprResult Sema::ActOnVAArg(SourceLocation BuiltinLoc, 8860 Expr *E, ParsedType Ty, 8861 SourceLocation RPLoc) { 8862 TypeSourceInfo *TInfo; 8863 GetTypeFromParser(Ty, &TInfo); 8864 return BuildVAArgExpr(BuiltinLoc, E, TInfo, RPLoc); 8865 } 8866 8867 ExprResult Sema::BuildVAArgExpr(SourceLocation BuiltinLoc, 8868 Expr *E, TypeSourceInfo *TInfo, 8869 SourceLocation RPLoc) { 8870 Expr *OrigExpr = E; 8871 8872 // Get the va_list type 8873 QualType VaListType = Context.getBuiltinVaListType(); 8874 if (VaListType->isArrayType()) { 8875 // Deal with implicit array decay; for example, on x86-64, 8876 // va_list is an array, but it's supposed to decay to 8877 // a pointer for va_arg. 8878 VaListType = Context.getArrayDecayedType(VaListType); 8879 // Make sure the input expression also decays appropriately. 8880 ExprResult Result = UsualUnaryConversions(E); 8881 if (Result.isInvalid()) 8882 return ExprError(); 8883 E = Result.take(); 8884 } else { 8885 // Otherwise, the va_list argument must be an l-value because 8886 // it is modified by va_arg. 8887 if (!E->isTypeDependent() && 8888 CheckForModifiableLvalue(E, BuiltinLoc, *this)) 8889 return ExprError(); 8890 } 8891 8892 if (!E->isTypeDependent() && 8893 !Context.hasSameType(VaListType, E->getType())) { 8894 return ExprError(Diag(E->getLocStart(), 8895 diag::err_first_argument_to_va_arg_not_of_type_va_list) 8896 << OrigExpr->getType() << E->getSourceRange()); 8897 } 8898 8899 if (!TInfo->getType()->isDependentType()) { 8900 if (RequireCompleteType(TInfo->getTypeLoc().getBeginLoc(), TInfo->getType(), 8901 PDiag(diag::err_second_parameter_to_va_arg_incomplete) 8902 << TInfo->getTypeLoc().getSourceRange())) 8903 return ExprError(); 8904 8905 if (RequireNonAbstractType(TInfo->getTypeLoc().getBeginLoc(), 8906 TInfo->getType(), 8907 PDiag(diag::err_second_parameter_to_va_arg_abstract) 8908 << TInfo->getTypeLoc().getSourceRange())) 8909 return ExprError(); 8910 8911 if (!TInfo->getType().isPODType(Context)) { 8912 Diag(TInfo->getTypeLoc().getBeginLoc(), 8913 TInfo->getType()->isObjCLifetimeType() 8914 ? diag::warn_second_parameter_to_va_arg_ownership_qualified 8915 : diag::warn_second_parameter_to_va_arg_not_pod) 8916 << TInfo->getType() 8917 << TInfo->getTypeLoc().getSourceRange(); 8918 } 8919 8920 // Check for va_arg where arguments of the given type will be promoted 8921 // (i.e. this va_arg is guaranteed to have undefined behavior). 8922 QualType PromoteType; 8923 if (TInfo->getType()->isPromotableIntegerType()) { 8924 PromoteType = Context.getPromotedIntegerType(TInfo->getType()); 8925 if (Context.typesAreCompatible(PromoteType, TInfo->getType())) 8926 PromoteType = QualType(); 8927 } 8928 if (TInfo->getType()->isSpecificBuiltinType(BuiltinType::Float)) 8929 PromoteType = Context.DoubleTy; 8930 if (!PromoteType.isNull()) 8931 Diag(TInfo->getTypeLoc().getBeginLoc(), 8932 diag::warn_second_parameter_to_va_arg_never_compatible) 8933 << TInfo->getType() 8934 << PromoteType 8935 << TInfo->getTypeLoc().getSourceRange(); 8936 } 8937 8938 QualType T = TInfo->getType().getNonLValueExprType(Context); 8939 return Owned(new (Context) VAArgExpr(BuiltinLoc, E, TInfo, RPLoc, T)); 8940 } 8941 8942 ExprResult Sema::ActOnGNUNullExpr(SourceLocation TokenLoc) { 8943 // The type of __null will be int or long, depending on the size of 8944 // pointers on the target. 8945 QualType Ty; 8946 unsigned pw = Context.getTargetInfo().getPointerWidth(0); 8947 if (pw == Context.getTargetInfo().getIntWidth()) 8948 Ty = Context.IntTy; 8949 else if (pw == Context.getTargetInfo().getLongWidth()) 8950 Ty = Context.LongTy; 8951 else if (pw == Context.getTargetInfo().getLongLongWidth()) 8952 Ty = Context.LongLongTy; 8953 else { 8954 llvm_unreachable("I don't know size of pointer!"); 8955 } 8956 8957 return Owned(new (Context) GNUNullExpr(Ty, TokenLoc)); 8958 } 8959 8960 static void MakeObjCStringLiteralFixItHint(Sema& SemaRef, QualType DstType, 8961 Expr *SrcExpr, FixItHint &Hint) { 8962 if (!SemaRef.getLangOptions().ObjC1) 8963 return; 8964 8965 const ObjCObjectPointerType *PT = DstType->getAs<ObjCObjectPointerType>(); 8966 if (!PT) 8967 return; 8968 8969 // Check if the destination is of type 'id'. 8970 if (!PT->isObjCIdType()) { 8971 // Check if the destination is the 'NSString' interface. 8972 const ObjCInterfaceDecl *ID = PT->getInterfaceDecl(); 8973 if (!ID || !ID->getIdentifier()->isStr("NSString")) 8974 return; 8975 } 8976 8977 // Ignore any parens, implicit casts (should only be 8978 // array-to-pointer decays), and not-so-opaque values. The last is 8979 // important for making this trigger for property assignments. 8980 SrcExpr = SrcExpr->IgnoreParenImpCasts(); 8981 if (OpaqueValueExpr *OV = dyn_cast<OpaqueValueExpr>(SrcExpr)) 8982 if (OV->getSourceExpr()) 8983 SrcExpr = OV->getSourceExpr()->IgnoreParenImpCasts(); 8984 8985 StringLiteral *SL = dyn_cast<StringLiteral>(SrcExpr); 8986 if (!SL || !SL->isAscii()) 8987 return; 8988 8989 Hint = FixItHint::CreateInsertion(SL->getLocStart(), "@"); 8990 } 8991 8992 bool Sema::DiagnoseAssignmentResult(AssignConvertType ConvTy, 8993 SourceLocation Loc, 8994 QualType DstType, QualType SrcType, 8995 Expr *SrcExpr, AssignmentAction Action, 8996 bool *Complained) { 8997 if (Complained) 8998 *Complained = false; 8999 9000 // Decode the result (notice that AST's are still created for extensions). 9001 bool CheckInferredResultType = false; 9002 bool isInvalid = false; 9003 unsigned DiagKind; 9004 FixItHint Hint; 9005 ConversionFixItGenerator ConvHints; 9006 bool MayHaveConvFixit = false; 9007 9008 switch (ConvTy) { 9009 default: llvm_unreachable("Unknown conversion type"); 9010 case Compatible: return false; 9011 case PointerToInt: 9012 DiagKind = diag::ext_typecheck_convert_pointer_int; 9013 ConvHints.tryToFixConversion(SrcExpr, SrcType, DstType, *this); 9014 MayHaveConvFixit = true; 9015 break; 9016 case IntToPointer: 9017 DiagKind = diag::ext_typecheck_convert_int_pointer; 9018 ConvHints.tryToFixConversion(SrcExpr, SrcType, DstType, *this); 9019 MayHaveConvFixit = true; 9020 break; 9021 case IncompatiblePointer: 9022 MakeObjCStringLiteralFixItHint(*this, DstType, SrcExpr, Hint); 9023 DiagKind = diag::ext_typecheck_convert_incompatible_pointer; 9024 CheckInferredResultType = DstType->isObjCObjectPointerType() && 9025 SrcType->isObjCObjectPointerType(); 9026 if (Hint.isNull() && !CheckInferredResultType) { 9027 ConvHints.tryToFixConversion(SrcExpr, SrcType, DstType, *this); 9028 } 9029 MayHaveConvFixit = true; 9030 break; 9031 case IncompatiblePointerSign: 9032 DiagKind = diag::ext_typecheck_convert_incompatible_pointer_sign; 9033 break; 9034 case FunctionVoidPointer: 9035 DiagKind = diag::ext_typecheck_convert_pointer_void_func; 9036 break; 9037 case IncompatiblePointerDiscardsQualifiers: { 9038 // Perform array-to-pointer decay if necessary. 9039 if (SrcType->isArrayType()) SrcType = Context.getArrayDecayedType(SrcType); 9040 9041 Qualifiers lhq = SrcType->getPointeeType().getQualifiers(); 9042 Qualifiers rhq = DstType->getPointeeType().getQualifiers(); 9043 if (lhq.getAddressSpace() != rhq.getAddressSpace()) { 9044 DiagKind = diag::err_typecheck_incompatible_address_space; 9045 break; 9046 9047 9048 } else if (lhq.getObjCLifetime() != rhq.getObjCLifetime()) { 9049 DiagKind = diag::err_typecheck_incompatible_ownership; 9050 break; 9051 } 9052 9053 llvm_unreachable("unknown error case for discarding qualifiers!"); 9054 // fallthrough 9055 } 9056 case CompatiblePointerDiscardsQualifiers: 9057 // If the qualifiers lost were because we were applying the 9058 // (deprecated) C++ conversion from a string literal to a char* 9059 // (or wchar_t*), then there was no error (C++ 4.2p2). FIXME: 9060 // Ideally, this check would be performed in 9061 // checkPointerTypesForAssignment. However, that would require a 9062 // bit of refactoring (so that the second argument is an 9063 // expression, rather than a type), which should be done as part 9064 // of a larger effort to fix checkPointerTypesForAssignment for 9065 // C++ semantics. 9066 if (getLangOptions().CPlusPlus && 9067 IsStringLiteralToNonConstPointerConversion(SrcExpr, DstType)) 9068 return false; 9069 DiagKind = diag::ext_typecheck_convert_discards_qualifiers; 9070 break; 9071 case IncompatibleNestedPointerQualifiers: 9072 DiagKind = diag::ext_nested_pointer_qualifier_mismatch; 9073 break; 9074 case IntToBlockPointer: 9075 DiagKind = diag::err_int_to_block_pointer; 9076 break; 9077 case IncompatibleBlockPointer: 9078 DiagKind = diag::err_typecheck_convert_incompatible_block_pointer; 9079 break; 9080 case IncompatibleObjCQualifiedId: 9081 // FIXME: Diagnose the problem in ObjCQualifiedIdTypesAreCompatible, since 9082 // it can give a more specific diagnostic. 9083 DiagKind = diag::warn_incompatible_qualified_id; 9084 break; 9085 case IncompatibleVectors: 9086 DiagKind = diag::warn_incompatible_vectors; 9087 break; 9088 case IncompatibleObjCWeakRef: 9089 DiagKind = diag::err_arc_weak_unavailable_assign; 9090 break; 9091 case Incompatible: 9092 DiagKind = diag::err_typecheck_convert_incompatible; 9093 ConvHints.tryToFixConversion(SrcExpr, SrcType, DstType, *this); 9094 MayHaveConvFixit = true; 9095 isInvalid = true; 9096 break; 9097 } 9098 9099 QualType FirstType, SecondType; 9100 switch (Action) { 9101 case AA_Assigning: 9102 case AA_Initializing: 9103 // The destination type comes first. 9104 FirstType = DstType; 9105 SecondType = SrcType; 9106 break; 9107 9108 case AA_Returning: 9109 case AA_Passing: 9110 case AA_Converting: 9111 case AA_Sending: 9112 case AA_Casting: 9113 // The source type comes first. 9114 FirstType = SrcType; 9115 SecondType = DstType; 9116 break; 9117 } 9118 9119 PartialDiagnostic FDiag = PDiag(DiagKind); 9120 FDiag << FirstType << SecondType << Action << SrcExpr->getSourceRange(); 9121 9122 // If we can fix the conversion, suggest the FixIts. 9123 assert(ConvHints.isNull() || Hint.isNull()); 9124 if (!ConvHints.isNull()) { 9125 for (llvm::SmallVector<FixItHint, 1>::iterator 9126 HI = ConvHints.Hints.begin(), HE = ConvHints.Hints.end(); 9127 HI != HE; ++HI) 9128 FDiag << *HI; 9129 } else { 9130 FDiag << Hint; 9131 } 9132 if (MayHaveConvFixit) { FDiag << (unsigned) (ConvHints.Kind); } 9133 9134 Diag(Loc, FDiag); 9135 9136 if (CheckInferredResultType) 9137 EmitRelatedResultTypeNote(SrcExpr); 9138 9139 if (Complained) 9140 *Complained = true; 9141 return isInvalid; 9142 } 9143 9144 bool Sema::VerifyIntegerConstantExpression(const Expr *E, llvm::APSInt *Result){ 9145 llvm::APSInt ICEResult; 9146 if (E->isIntegerConstantExpr(ICEResult, Context)) { 9147 if (Result) 9148 *Result = ICEResult; 9149 return false; 9150 } 9151 9152 Expr::EvalResult EvalResult; 9153 9154 if (!E->EvaluateAsRValue(EvalResult, Context) || !EvalResult.Val.isInt() || 9155 EvalResult.HasSideEffects) { 9156 Diag(E->getExprLoc(), diag::err_expr_not_ice) << E->getSourceRange(); 9157 9158 if (EvalResult.Diag) { 9159 // We only show the note if it's not the usual "invalid subexpression" 9160 // or if it's actually in a subexpression. 9161 if (EvalResult.Diag != diag::note_invalid_subexpr_in_ice || 9162 E->IgnoreParens() != EvalResult.DiagExpr->IgnoreParens()) 9163 Diag(EvalResult.DiagLoc, EvalResult.Diag); 9164 } 9165 9166 return true; 9167 } 9168 9169 Diag(E->getExprLoc(), diag::ext_expr_not_ice) << 9170 E->getSourceRange(); 9171 9172 if (EvalResult.Diag && 9173 Diags.getDiagnosticLevel(diag::ext_expr_not_ice, EvalResult.DiagLoc) 9174 != DiagnosticsEngine::Ignored) 9175 Diag(EvalResult.DiagLoc, EvalResult.Diag); 9176 9177 if (Result) 9178 *Result = EvalResult.Val.getInt(); 9179 return false; 9180 } 9181 9182 void 9183 Sema::PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext) { 9184 ExprEvalContexts.push_back( 9185 ExpressionEvaluationContextRecord(NewContext, 9186 ExprCleanupObjects.size(), 9187 ExprNeedsCleanups)); 9188 ExprNeedsCleanups = false; 9189 } 9190 9191 void Sema::PopExpressionEvaluationContext() { 9192 // Pop the current expression evaluation context off the stack. 9193 ExpressionEvaluationContextRecord Rec = ExprEvalContexts.back(); 9194 ExprEvalContexts.pop_back(); 9195 9196 if (Rec.Context == PotentiallyPotentiallyEvaluated) { 9197 if (Rec.PotentiallyReferenced) { 9198 // Mark any remaining declarations in the current position of the stack 9199 // as "referenced". If they were not meant to be referenced, semantic 9200 // analysis would have eliminated them (e.g., in ActOnCXXTypeId). 9201 for (PotentiallyReferencedDecls::iterator 9202 I = Rec.PotentiallyReferenced->begin(), 9203 IEnd = Rec.PotentiallyReferenced->end(); 9204 I != IEnd; ++I) 9205 MarkDeclarationReferenced(I->first, I->second); 9206 } 9207 9208 if (Rec.PotentiallyDiagnosed) { 9209 // Emit any pending diagnostics. 9210 for (PotentiallyEmittedDiagnostics::iterator 9211 I = Rec.PotentiallyDiagnosed->begin(), 9212 IEnd = Rec.PotentiallyDiagnosed->end(); 9213 I != IEnd; ++I) 9214 Diag(I->first, I->second); 9215 } 9216 } 9217 9218 // When are coming out of an unevaluated context, clear out any 9219 // temporaries that we may have created as part of the evaluation of 9220 // the expression in that context: they aren't relevant because they 9221 // will never be constructed. 9222 if (Rec.Context == Unevaluated) { 9223 ExprCleanupObjects.erase(ExprCleanupObjects.begin() + Rec.NumCleanupObjects, 9224 ExprCleanupObjects.end()); 9225 ExprNeedsCleanups = Rec.ParentNeedsCleanups; 9226 9227 // Otherwise, merge the contexts together. 9228 } else { 9229 ExprNeedsCleanups |= Rec.ParentNeedsCleanups; 9230 } 9231 9232 // Destroy the popped expression evaluation record. 9233 Rec.Destroy(); 9234 } 9235 9236 void Sema::DiscardCleanupsInEvaluationContext() { 9237 ExprCleanupObjects.erase( 9238 ExprCleanupObjects.begin() + ExprEvalContexts.back().NumCleanupObjects, 9239 ExprCleanupObjects.end()); 9240 ExprNeedsCleanups = false; 9241 } 9242 9243 /// \brief Note that the given declaration was referenced in the source code. 9244 /// 9245 /// This routine should be invoke whenever a given declaration is referenced 9246 /// in the source code, and where that reference occurred. If this declaration 9247 /// reference means that the the declaration is used (C++ [basic.def.odr]p2, 9248 /// C99 6.9p3), then the declaration will be marked as used. 9249 /// 9250 /// \param Loc the location where the declaration was referenced. 9251 /// 9252 /// \param D the declaration that has been referenced by the source code. 9253 void Sema::MarkDeclarationReferenced(SourceLocation Loc, Decl *D) { 9254 assert(D && "No declaration?"); 9255 9256 D->setReferenced(); 9257 9258 if (D->isUsed(false)) 9259 return; 9260 9261 // Mark a parameter or variable declaration "used", regardless of whether 9262 // we're in a template or not. The reason for this is that unevaluated 9263 // expressions (e.g. (void)sizeof()) constitute a use for warning purposes 9264 // (-Wunused-variables and -Wunused-parameters) 9265 if (isa<ParmVarDecl>(D) || 9266 (isa<VarDecl>(D) && D->getDeclContext()->isFunctionOrMethod())) { 9267 D->setUsed(); 9268 return; 9269 } 9270 9271 if (!isa<VarDecl>(D) && !isa<FunctionDecl>(D)) 9272 return; 9273 9274 // Do not mark anything as "used" within a dependent context; wait for 9275 // an instantiation. 9276 if (CurContext->isDependentContext()) 9277 return; 9278 9279 switch (ExprEvalContexts.back().Context) { 9280 case Unevaluated: 9281 // We are in an expression that is not potentially evaluated; do nothing. 9282 return; 9283 9284 case PotentiallyEvaluated: 9285 // We are in a potentially-evaluated expression, so this declaration is 9286 // "used"; handle this below. 9287 break; 9288 9289 case PotentiallyPotentiallyEvaluated: 9290 // We are in an expression that may be potentially evaluated; queue this 9291 // declaration reference until we know whether the expression is 9292 // potentially evaluated. 9293 ExprEvalContexts.back().addReferencedDecl(Loc, D); 9294 return; 9295 9296 case PotentiallyEvaluatedIfUsed: 9297 // Referenced declarations will only be used if the construct in the 9298 // containing expression is used. 9299 return; 9300 } 9301 9302 // Note that this declaration has been used. 9303 if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) { 9304 if (Constructor->isDefaulted()) { 9305 if (Constructor->isDefaultConstructor()) { 9306 if (Constructor->isTrivial()) 9307 return; 9308 if (!Constructor->isUsed(false)) 9309 DefineImplicitDefaultConstructor(Loc, Constructor); 9310 } else if (Constructor->isCopyConstructor()) { 9311 if (!Constructor->isUsed(false)) 9312 DefineImplicitCopyConstructor(Loc, Constructor); 9313 } else if (Constructor->isMoveConstructor()) { 9314 if (!Constructor->isUsed(false)) 9315 DefineImplicitMoveConstructor(Loc, Constructor); 9316 } 9317 } 9318 9319 MarkVTableUsed(Loc, Constructor->getParent()); 9320 } else if (CXXDestructorDecl *Destructor = dyn_cast<CXXDestructorDecl>(D)) { 9321 if (Destructor->isDefaulted() && !Destructor->isUsed(false)) 9322 DefineImplicitDestructor(Loc, Destructor); 9323 if (Destructor->isVirtual()) 9324 MarkVTableUsed(Loc, Destructor->getParent()); 9325 } else if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(D)) { 9326 if (MethodDecl->isDefaulted() && MethodDecl->isOverloadedOperator() && 9327 MethodDecl->getOverloadedOperator() == OO_Equal) { 9328 if (!MethodDecl->isUsed(false)) { 9329 if (MethodDecl->isCopyAssignmentOperator()) 9330 DefineImplicitCopyAssignment(Loc, MethodDecl); 9331 else 9332 DefineImplicitMoveAssignment(Loc, MethodDecl); 9333 } 9334 } else if (MethodDecl->isVirtual()) 9335 MarkVTableUsed(Loc, MethodDecl->getParent()); 9336 } 9337 if (FunctionDecl *Function = dyn_cast<FunctionDecl>(D)) { 9338 // Recursive functions should be marked when used from another function. 9339 if (CurContext == Function) return; 9340 9341 // Implicit instantiation of function templates and member functions of 9342 // class templates. 9343 if (Function->isImplicitlyInstantiable()) { 9344 bool AlreadyInstantiated = false; 9345 if (FunctionTemplateSpecializationInfo *SpecInfo 9346 = Function->getTemplateSpecializationInfo()) { 9347 if (SpecInfo->getPointOfInstantiation().isInvalid()) 9348 SpecInfo->setPointOfInstantiation(Loc); 9349 else if (SpecInfo->getTemplateSpecializationKind() 9350 == TSK_ImplicitInstantiation) 9351 AlreadyInstantiated = true; 9352 } else if (MemberSpecializationInfo *MSInfo 9353 = Function->getMemberSpecializationInfo()) { 9354 if (MSInfo->getPointOfInstantiation().isInvalid()) 9355 MSInfo->setPointOfInstantiation(Loc); 9356 else if (MSInfo->getTemplateSpecializationKind() 9357 == TSK_ImplicitInstantiation) 9358 AlreadyInstantiated = true; 9359 } 9360 9361 if (!AlreadyInstantiated) { 9362 if (isa<CXXRecordDecl>(Function->getDeclContext()) && 9363 cast<CXXRecordDecl>(Function->getDeclContext())->isLocalClass()) 9364 PendingLocalImplicitInstantiations.push_back(std::make_pair(Function, 9365 Loc)); 9366 else 9367 PendingInstantiations.push_back(std::make_pair(Function, Loc)); 9368 } 9369 } else { 9370 // Walk redefinitions, as some of them may be instantiable. 9371 for (FunctionDecl::redecl_iterator i(Function->redecls_begin()), 9372 e(Function->redecls_end()); i != e; ++i) { 9373 if (!i->isUsed(false) && i->isImplicitlyInstantiable()) 9374 MarkDeclarationReferenced(Loc, *i); 9375 } 9376 } 9377 9378 // Keep track of used but undefined functions. 9379 if (!Function->isPure() && !Function->hasBody() && 9380 Function->getLinkage() != ExternalLinkage) { 9381 SourceLocation &old = UndefinedInternals[Function->getCanonicalDecl()]; 9382 if (old.isInvalid()) old = Loc; 9383 } 9384 9385 Function->setUsed(true); 9386 return; 9387 } 9388 9389 if (VarDecl *Var = dyn_cast<VarDecl>(D)) { 9390 // Implicit instantiation of static data members of class templates. 9391 if (Var->isStaticDataMember() && 9392 Var->getInstantiatedFromStaticDataMember()) { 9393 MemberSpecializationInfo *MSInfo = Var->getMemberSpecializationInfo(); 9394 assert(MSInfo && "Missing member specialization information?"); 9395 if (MSInfo->getPointOfInstantiation().isInvalid() && 9396 MSInfo->getTemplateSpecializationKind()== TSK_ImplicitInstantiation) { 9397 MSInfo->setPointOfInstantiation(Loc); 9398 // This is a modification of an existing AST node. Notify listeners. 9399 if (ASTMutationListener *L = getASTMutationListener()) 9400 L->StaticDataMemberInstantiated(Var); 9401 PendingInstantiations.push_back(std::make_pair(Var, Loc)); 9402 } 9403 } 9404 9405 // Keep track of used but undefined variables. We make a hole in 9406 // the warning for static const data members with in-line 9407 // initializers. 9408 if (Var->hasDefinition() == VarDecl::DeclarationOnly 9409 && Var->getLinkage() != ExternalLinkage 9410 && !(Var->isStaticDataMember() && Var->hasInit())) { 9411 SourceLocation &old = UndefinedInternals[Var->getCanonicalDecl()]; 9412 if (old.isInvalid()) old = Loc; 9413 } 9414 9415 D->setUsed(true); 9416 return; 9417 } 9418 } 9419 9420 namespace { 9421 // Mark all of the declarations referenced 9422 // FIXME: Not fully implemented yet! We need to have a better understanding 9423 // of when we're entering 9424 class MarkReferencedDecls : public RecursiveASTVisitor<MarkReferencedDecls> { 9425 Sema &S; 9426 SourceLocation Loc; 9427 9428 public: 9429 typedef RecursiveASTVisitor<MarkReferencedDecls> Inherited; 9430 9431 MarkReferencedDecls(Sema &S, SourceLocation Loc) : S(S), Loc(Loc) { } 9432 9433 bool TraverseTemplateArgument(const TemplateArgument &Arg); 9434 bool TraverseRecordType(RecordType *T); 9435 }; 9436 } 9437 9438 bool MarkReferencedDecls::TraverseTemplateArgument( 9439 const TemplateArgument &Arg) { 9440 if (Arg.getKind() == TemplateArgument::Declaration) { 9441 S.MarkDeclarationReferenced(Loc, Arg.getAsDecl()); 9442 } 9443 9444 return Inherited::TraverseTemplateArgument(Arg); 9445 } 9446 9447 bool MarkReferencedDecls::TraverseRecordType(RecordType *T) { 9448 if (ClassTemplateSpecializationDecl *Spec 9449 = dyn_cast<ClassTemplateSpecializationDecl>(T->getDecl())) { 9450 const TemplateArgumentList &Args = Spec->getTemplateArgs(); 9451 return TraverseTemplateArguments(Args.data(), Args.size()); 9452 } 9453 9454 return true; 9455 } 9456 9457 void Sema::MarkDeclarationsReferencedInType(SourceLocation Loc, QualType T) { 9458 MarkReferencedDecls Marker(*this, Loc); 9459 Marker.TraverseType(Context.getCanonicalType(T)); 9460 } 9461 9462 namespace { 9463 /// \brief Helper class that marks all of the declarations referenced by 9464 /// potentially-evaluated subexpressions as "referenced". 9465 class EvaluatedExprMarker : public EvaluatedExprVisitor<EvaluatedExprMarker> { 9466 Sema &S; 9467 9468 public: 9469 typedef EvaluatedExprVisitor<EvaluatedExprMarker> Inherited; 9470 9471 explicit EvaluatedExprMarker(Sema &S) : Inherited(S.Context), S(S) { } 9472 9473 void VisitDeclRefExpr(DeclRefExpr *E) { 9474 S.MarkDeclarationReferenced(E->getLocation(), E->getDecl()); 9475 } 9476 9477 void VisitMemberExpr(MemberExpr *E) { 9478 S.MarkDeclarationReferenced(E->getMemberLoc(), E->getMemberDecl()); 9479 Inherited::VisitMemberExpr(E); 9480 } 9481 9482 void VisitCXXBindTemporaryExpr(CXXBindTemporaryExpr *E) { 9483 S.MarkDeclarationReferenced(E->getLocStart(), 9484 const_cast<CXXDestructorDecl*>(E->getTemporary()->getDestructor())); 9485 Visit(E->getSubExpr()); 9486 } 9487 9488 void VisitCXXNewExpr(CXXNewExpr *E) { 9489 if (E->getConstructor()) 9490 S.MarkDeclarationReferenced(E->getLocStart(), E->getConstructor()); 9491 if (E->getOperatorNew()) 9492 S.MarkDeclarationReferenced(E->getLocStart(), E->getOperatorNew()); 9493 if (E->getOperatorDelete()) 9494 S.MarkDeclarationReferenced(E->getLocStart(), E->getOperatorDelete()); 9495 Inherited::VisitCXXNewExpr(E); 9496 } 9497 9498 void VisitCXXDeleteExpr(CXXDeleteExpr *E) { 9499 if (E->getOperatorDelete()) 9500 S.MarkDeclarationReferenced(E->getLocStart(), E->getOperatorDelete()); 9501 QualType Destroyed = S.Context.getBaseElementType(E->getDestroyedType()); 9502 if (const RecordType *DestroyedRec = Destroyed->getAs<RecordType>()) { 9503 CXXRecordDecl *Record = cast<CXXRecordDecl>(DestroyedRec->getDecl()); 9504 S.MarkDeclarationReferenced(E->getLocStart(), 9505 S.LookupDestructor(Record)); 9506 } 9507 9508 Inherited::VisitCXXDeleteExpr(E); 9509 } 9510 9511 void VisitCXXConstructExpr(CXXConstructExpr *E) { 9512 S.MarkDeclarationReferenced(E->getLocStart(), E->getConstructor()); 9513 Inherited::VisitCXXConstructExpr(E); 9514 } 9515 9516 void VisitBlockDeclRefExpr(BlockDeclRefExpr *E) { 9517 S.MarkDeclarationReferenced(E->getLocation(), E->getDecl()); 9518 } 9519 9520 void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *E) { 9521 Visit(E->getExpr()); 9522 } 9523 }; 9524 } 9525 9526 /// \brief Mark any declarations that appear within this expression or any 9527 /// potentially-evaluated subexpressions as "referenced". 9528 void Sema::MarkDeclarationsReferencedInExpr(Expr *E) { 9529 EvaluatedExprMarker(*this).Visit(E); 9530 } 9531 9532 /// \brief Emit a diagnostic that describes an effect on the run-time behavior 9533 /// of the program being compiled. 9534 /// 9535 /// This routine emits the given diagnostic when the code currently being 9536 /// type-checked is "potentially evaluated", meaning that there is a 9537 /// possibility that the code will actually be executable. Code in sizeof() 9538 /// expressions, code used only during overload resolution, etc., are not 9539 /// potentially evaluated. This routine will suppress such diagnostics or, 9540 /// in the absolutely nutty case of potentially potentially evaluated 9541 /// expressions (C++ typeid), queue the diagnostic to potentially emit it 9542 /// later. 9543 /// 9544 /// This routine should be used for all diagnostics that describe the run-time 9545 /// behavior of a program, such as passing a non-POD value through an ellipsis. 9546 /// Failure to do so will likely result in spurious diagnostics or failures 9547 /// during overload resolution or within sizeof/alignof/typeof/typeid. 9548 bool Sema::DiagRuntimeBehavior(SourceLocation Loc, const Stmt *Statement, 9549 const PartialDiagnostic &PD) { 9550 switch (ExprEvalContexts.back().Context) { 9551 case Unevaluated: 9552 // The argument will never be evaluated, so don't complain. 9553 break; 9554 9555 case PotentiallyEvaluated: 9556 case PotentiallyEvaluatedIfUsed: 9557 if (Statement && getCurFunctionOrMethodDecl()) { 9558 FunctionScopes.back()->PossiblyUnreachableDiags. 9559 push_back(sema::PossiblyUnreachableDiag(PD, Loc, Statement)); 9560 } 9561 else 9562 Diag(Loc, PD); 9563 9564 return true; 9565 9566 case PotentiallyPotentiallyEvaluated: 9567 ExprEvalContexts.back().addDiagnostic(Loc, PD); 9568 break; 9569 } 9570 9571 return false; 9572 } 9573 9574 bool Sema::CheckCallReturnType(QualType ReturnType, SourceLocation Loc, 9575 CallExpr *CE, FunctionDecl *FD) { 9576 if (ReturnType->isVoidType() || !ReturnType->isIncompleteType()) 9577 return false; 9578 9579 PartialDiagnostic Note = 9580 FD ? PDiag(diag::note_function_with_incomplete_return_type_declared_here) 9581 << FD->getDeclName() : PDiag(); 9582 SourceLocation NoteLoc = FD ? FD->getLocation() : SourceLocation(); 9583 9584 if (RequireCompleteType(Loc, ReturnType, 9585 FD ? 9586 PDiag(diag::err_call_function_incomplete_return) 9587 << CE->getSourceRange() << FD->getDeclName() : 9588 PDiag(diag::err_call_incomplete_return) 9589 << CE->getSourceRange(), 9590 std::make_pair(NoteLoc, Note))) 9591 return true; 9592 9593 return false; 9594 } 9595 9596 // Diagnose the s/=/==/ and s/\|=/!=/ typos. Note that adding parentheses 9597 // will prevent this condition from triggering, which is what we want. 9598 void Sema::DiagnoseAssignmentAsCondition(Expr *E) { 9599 SourceLocation Loc; 9600 9601 unsigned diagnostic = diag::warn_condition_is_assignment; 9602 bool IsOrAssign = false; 9603 9604 if (BinaryOperator *Op = dyn_cast<BinaryOperator>(E)) { 9605 if (Op->getOpcode() != BO_Assign && Op->getOpcode() != BO_OrAssign) 9606 return; 9607 9608 IsOrAssign = Op->getOpcode() == BO_OrAssign; 9609 9610 // Greylist some idioms by putting them into a warning subcategory. 9611 if (ObjCMessageExpr *ME 9612 = dyn_cast<ObjCMessageExpr>(Op->getRHS()->IgnoreParenCasts())) { 9613 Selector Sel = ME->getSelector(); 9614 9615 // self = [<foo> init...] 9616 if (isSelfExpr(Op->getLHS()) && Sel.getNameForSlot(0).startswith("init")) 9617 diagnostic = diag::warn_condition_is_idiomatic_assignment; 9618 9619 // <foo> = [<bar> nextObject] 9620 else if (Sel.isUnarySelector() && Sel.getNameForSlot(0) == "nextObject") 9621 diagnostic = diag::warn_condition_is_idiomatic_assignment; 9622 } 9623 9624 Loc = Op->getOperatorLoc(); 9625 } else if (CXXOperatorCallExpr *Op = dyn_cast<CXXOperatorCallExpr>(E)) { 9626 if (Op->getOperator() != OO_Equal && Op->getOperator() != OO_PipeEqual) 9627 return; 9628 9629 IsOrAssign = Op->getOperator() == OO_PipeEqual; 9630 Loc = Op->getOperatorLoc(); 9631 } else { 9632 // Not an assignment. 9633 return; 9634 } 9635 9636 Diag(Loc, diagnostic) << E->getSourceRange(); 9637 9638 SourceLocation Open = E->getSourceRange().getBegin(); 9639 SourceLocation Close = PP.getLocForEndOfToken(E->getSourceRange().getEnd()); 9640 Diag(Loc, diag::note_condition_assign_silence) 9641 << FixItHint::CreateInsertion(Open, "(") 9642 << FixItHint::CreateInsertion(Close, ")"); 9643 9644 if (IsOrAssign) 9645 Diag(Loc, diag::note_condition_or_assign_to_comparison) 9646 << FixItHint::CreateReplacement(Loc, "!="); 9647 else 9648 Diag(Loc, diag::note_condition_assign_to_comparison) 9649 << FixItHint::CreateReplacement(Loc, "=="); 9650 } 9651 9652 /// \brief Redundant parentheses over an equality comparison can indicate 9653 /// that the user intended an assignment used as condition. 9654 void Sema::DiagnoseEqualityWithExtraParens(ParenExpr *ParenE) { 9655 // Don't warn if the parens came from a macro. 9656 SourceLocation parenLoc = ParenE->getLocStart(); 9657 if (parenLoc.isInvalid() || parenLoc.isMacroID()) 9658 return; 9659 // Don't warn for dependent expressions. 9660 if (ParenE->isTypeDependent()) 9661 return; 9662 9663 Expr *E = ParenE->IgnoreParens(); 9664 9665 if (BinaryOperator *opE = dyn_cast<BinaryOperator>(E)) 9666 if (opE->getOpcode() == BO_EQ && 9667 opE->getLHS()->IgnoreParenImpCasts()->isModifiableLvalue(Context) 9668 == Expr::MLV_Valid) { 9669 SourceLocation Loc = opE->getOperatorLoc(); 9670 9671 Diag(Loc, diag::warn_equality_with_extra_parens) << E->getSourceRange(); 9672 Diag(Loc, diag::note_equality_comparison_silence) 9673 << FixItHint::CreateRemoval(ParenE->getSourceRange().getBegin()) 9674 << FixItHint::CreateRemoval(ParenE->getSourceRange().getEnd()); 9675 Diag(Loc, diag::note_equality_comparison_to_assign) 9676 << FixItHint::CreateReplacement(Loc, "="); 9677 } 9678 } 9679 9680 ExprResult Sema::CheckBooleanCondition(Expr *E, SourceLocation Loc) { 9681 DiagnoseAssignmentAsCondition(E); 9682 if (ParenExpr *parenE = dyn_cast<ParenExpr>(E)) 9683 DiagnoseEqualityWithExtraParens(parenE); 9684 9685 ExprResult result = CheckPlaceholderExpr(E); 9686 if (result.isInvalid()) return ExprError(); 9687 E = result.take(); 9688 9689 if (!E->isTypeDependent()) { 9690 if (getLangOptions().CPlusPlus) 9691 return CheckCXXBooleanCondition(E); // C++ 6.4p4 9692 9693 ExprResult ERes = DefaultFunctionArrayLvalueConversion(E); 9694 if (ERes.isInvalid()) 9695 return ExprError(); 9696 E = ERes.take(); 9697 9698 QualType T = E->getType(); 9699 if (!T->isScalarType()) { // C99 6.8.4.1p1 9700 Diag(Loc, diag::err_typecheck_statement_requires_scalar) 9701 << T << E->getSourceRange(); 9702 return ExprError(); 9703 } 9704 } 9705 9706 return Owned(E); 9707 } 9708 9709 ExprResult Sema::ActOnBooleanCondition(Scope *S, SourceLocation Loc, 9710 Expr *SubExpr) { 9711 if (!SubExpr) 9712 return ExprError(); 9713 9714 return CheckBooleanCondition(SubExpr, Loc); 9715 } 9716 9717 namespace { 9718 /// A visitor for rebuilding a call to an __unknown_any expression 9719 /// to have an appropriate type. 9720 struct RebuildUnknownAnyFunction 9721 : StmtVisitor<RebuildUnknownAnyFunction, ExprResult> { 9722 9723 Sema &S; 9724 9725 RebuildUnknownAnyFunction(Sema &S) : S(S) {} 9726 9727 ExprResult VisitStmt(Stmt *S) { 9728 llvm_unreachable("unexpected statement!"); 9729 return ExprError(); 9730 } 9731 9732 ExprResult VisitExpr(Expr *E) { 9733 S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_call) 9734 << E->getSourceRange(); 9735 return ExprError(); 9736 } 9737 9738 /// Rebuild an expression which simply semantically wraps another 9739 /// expression which it shares the type and value kind of. 9740 template <class T> ExprResult rebuildSugarExpr(T *E) { 9741 ExprResult SubResult = Visit(E->getSubExpr()); 9742 if (SubResult.isInvalid()) return ExprError(); 9743 9744 Expr *SubExpr = SubResult.take(); 9745 E->setSubExpr(SubExpr); 9746 E->setType(SubExpr->getType()); 9747 E->setValueKind(SubExpr->getValueKind()); 9748 assert(E->getObjectKind() == OK_Ordinary); 9749 return E; 9750 } 9751 9752 ExprResult VisitParenExpr(ParenExpr *E) { 9753 return rebuildSugarExpr(E); 9754 } 9755 9756 ExprResult VisitUnaryExtension(UnaryOperator *E) { 9757 return rebuildSugarExpr(E); 9758 } 9759 9760 ExprResult VisitUnaryAddrOf(UnaryOperator *E) { 9761 ExprResult SubResult = Visit(E->getSubExpr()); 9762 if (SubResult.isInvalid()) return ExprError(); 9763 9764 Expr *SubExpr = SubResult.take(); 9765 E->setSubExpr(SubExpr); 9766 E->setType(S.Context.getPointerType(SubExpr->getType())); 9767 assert(E->getValueKind() == VK_RValue); 9768 assert(E->getObjectKind() == OK_Ordinary); 9769 return E; 9770 } 9771 9772 ExprResult resolveDecl(Expr *E, ValueDecl *VD) { 9773 if (!isa<FunctionDecl>(VD)) return VisitExpr(E); 9774 9775 E->setType(VD->getType()); 9776 9777 assert(E->getValueKind() == VK_RValue); 9778 if (S.getLangOptions().CPlusPlus && 9779 !(isa<CXXMethodDecl>(VD) && 9780 cast<CXXMethodDecl>(VD)->isInstance())) 9781 E->setValueKind(VK_LValue); 9782 9783 return E; 9784 } 9785 9786 ExprResult VisitMemberExpr(MemberExpr *E) { 9787 return resolveDecl(E, E->getMemberDecl()); 9788 } 9789 9790 ExprResult VisitDeclRefExpr(DeclRefExpr *E) { 9791 return resolveDecl(E, E->getDecl()); 9792 } 9793 }; 9794 } 9795 9796 /// Given a function expression of unknown-any type, try to rebuild it 9797 /// to have a function type. 9798 static ExprResult rebuildUnknownAnyFunction(Sema &S, Expr *FunctionExpr) { 9799 ExprResult Result = RebuildUnknownAnyFunction(S).Visit(FunctionExpr); 9800 if (Result.isInvalid()) return ExprError(); 9801 return S.DefaultFunctionArrayConversion(Result.take()); 9802 } 9803 9804 namespace { 9805 /// A visitor for rebuilding an expression of type __unknown_anytype 9806 /// into one which resolves the type directly on the referring 9807 /// expression. Strict preservation of the original source 9808 /// structure is not a goal. 9809 struct RebuildUnknownAnyExpr 9810 : StmtVisitor<RebuildUnknownAnyExpr, ExprResult> { 9811 9812 Sema &S; 9813 9814 /// The current destination type. 9815 QualType DestType; 9816 9817 RebuildUnknownAnyExpr(Sema &S, QualType CastType) 9818 : S(S), DestType(CastType) {} 9819 9820 ExprResult VisitStmt(Stmt *S) { 9821 llvm_unreachable("unexpected statement!"); 9822 return ExprError(); 9823 } 9824 9825 ExprResult VisitExpr(Expr *E) { 9826 S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_expr) 9827 << E->getSourceRange(); 9828 return ExprError(); 9829 } 9830 9831 ExprResult VisitCallExpr(CallExpr *E); 9832 ExprResult VisitObjCMessageExpr(ObjCMessageExpr *E); 9833 9834 /// Rebuild an expression which simply semantically wraps another 9835 /// expression which it shares the type and value kind of. 9836 template <class T> ExprResult rebuildSugarExpr(T *E) { 9837 ExprResult SubResult = Visit(E->getSubExpr()); 9838 if (SubResult.isInvalid()) return ExprError(); 9839 Expr *SubExpr = SubResult.take(); 9840 E->setSubExpr(SubExpr); 9841 E->setType(SubExpr->getType()); 9842 E->setValueKind(SubExpr->getValueKind()); 9843 assert(E->getObjectKind() == OK_Ordinary); 9844 return E; 9845 } 9846 9847 ExprResult VisitParenExpr(ParenExpr *E) { 9848 return rebuildSugarExpr(E); 9849 } 9850 9851 ExprResult VisitUnaryExtension(UnaryOperator *E) { 9852 return rebuildSugarExpr(E); 9853 } 9854 9855 ExprResult VisitUnaryAddrOf(UnaryOperator *E) { 9856 const PointerType *Ptr = DestType->getAs<PointerType>(); 9857 if (!Ptr) { 9858 S.Diag(E->getOperatorLoc(), diag::err_unknown_any_addrof) 9859 << E->getSourceRange(); 9860 return ExprError(); 9861 } 9862 assert(E->getValueKind() == VK_RValue); 9863 assert(E->getObjectKind() == OK_Ordinary); 9864 E->setType(DestType); 9865 9866 // Build the sub-expression as if it were an object of the pointee type. 9867 DestType = Ptr->getPointeeType(); 9868 ExprResult SubResult = Visit(E->getSubExpr()); 9869 if (SubResult.isInvalid()) return ExprError(); 9870 E->setSubExpr(SubResult.take()); 9871 return E; 9872 } 9873 9874 ExprResult VisitImplicitCastExpr(ImplicitCastExpr *E); 9875 9876 ExprResult resolveDecl(Expr *E, ValueDecl *VD); 9877 9878 ExprResult VisitMemberExpr(MemberExpr *E) { 9879 return resolveDecl(E, E->getMemberDecl()); 9880 } 9881 9882 ExprResult VisitDeclRefExpr(DeclRefExpr *E) { 9883 return resolveDecl(E, E->getDecl()); 9884 } 9885 }; 9886 } 9887 9888 /// Rebuilds a call expression which yielded __unknown_anytype. 9889 ExprResult RebuildUnknownAnyExpr::VisitCallExpr(CallExpr *E) { 9890 Expr *CalleeExpr = E->getCallee(); 9891 9892 enum FnKind { 9893 FK_MemberFunction, 9894 FK_FunctionPointer, 9895 FK_BlockPointer 9896 }; 9897 9898 FnKind Kind; 9899 QualType CalleeType = CalleeExpr->getType(); 9900 if (CalleeType == S.Context.BoundMemberTy) { 9901 assert(isa<CXXMemberCallExpr>(E) || isa<CXXOperatorCallExpr>(E)); 9902 Kind = FK_MemberFunction; 9903 CalleeType = Expr::findBoundMemberType(CalleeExpr); 9904 } else if (const PointerType *Ptr = CalleeType->getAs<PointerType>()) { 9905 CalleeType = Ptr->getPointeeType(); 9906 Kind = FK_FunctionPointer; 9907 } else { 9908 CalleeType = CalleeType->castAs<BlockPointerType>()->getPointeeType(); 9909 Kind = FK_BlockPointer; 9910 } 9911 const FunctionType *FnType = CalleeType->castAs<FunctionType>(); 9912 9913 // Verify that this is a legal result type of a function. 9914 if (DestType->isArrayType() || DestType->isFunctionType()) { 9915 unsigned diagID = diag::err_func_returning_array_function; 9916 if (Kind == FK_BlockPointer) 9917 diagID = diag::err_block_returning_array_function; 9918 9919 S.Diag(E->getExprLoc(), diagID) 9920 << DestType->isFunctionType() << DestType; 9921 return ExprError(); 9922 } 9923 9924 // Otherwise, go ahead and set DestType as the call's result. 9925 E->setType(DestType.getNonLValueExprType(S.Context)); 9926 E->setValueKind(Expr::getValueKindForType(DestType)); 9927 assert(E->getObjectKind() == OK_Ordinary); 9928 9929 // Rebuild the function type, replacing the result type with DestType. 9930 if (const FunctionProtoType *Proto = dyn_cast<FunctionProtoType>(FnType)) 9931 DestType = S.Context.getFunctionType(DestType, 9932 Proto->arg_type_begin(), 9933 Proto->getNumArgs(), 9934 Proto->getExtProtoInfo()); 9935 else 9936 DestType = S.Context.getFunctionNoProtoType(DestType, 9937 FnType->getExtInfo()); 9938 9939 // Rebuild the appropriate pointer-to-function type. 9940 switch (Kind) { 9941 case FK_MemberFunction: 9942 // Nothing to do. 9943 break; 9944 9945 case FK_FunctionPointer: 9946 DestType = S.Context.getPointerType(DestType); 9947 break; 9948 9949 case FK_BlockPointer: 9950 DestType = S.Context.getBlockPointerType(DestType); 9951 break; 9952 } 9953 9954 // Finally, we can recurse. 9955 ExprResult CalleeResult = Visit(CalleeExpr); 9956 if (!CalleeResult.isUsable()) return ExprError(); 9957 E->setCallee(CalleeResult.take()); 9958 9959 // Bind a temporary if necessary. 9960 return S.MaybeBindToTemporary(E); 9961 } 9962 9963 ExprResult RebuildUnknownAnyExpr::VisitObjCMessageExpr(ObjCMessageExpr *E) { 9964 // Verify that this is a legal result type of a call. 9965 if (DestType->isArrayType() || DestType->isFunctionType()) { 9966 S.Diag(E->getExprLoc(), diag::err_func_returning_array_function) 9967 << DestType->isFunctionType() << DestType; 9968 return ExprError(); 9969 } 9970 9971 // Rewrite the method result type if available. 9972 if (ObjCMethodDecl *Method = E->getMethodDecl()) { 9973 assert(Method->getResultType() == S.Context.UnknownAnyTy); 9974 Method->setResultType(DestType); 9975 } 9976 9977 // Change the type of the message. 9978 E->setType(DestType.getNonReferenceType()); 9979 E->setValueKind(Expr::getValueKindForType(DestType)); 9980 9981 return S.MaybeBindToTemporary(E); 9982 } 9983 9984 ExprResult RebuildUnknownAnyExpr::VisitImplicitCastExpr(ImplicitCastExpr *E) { 9985 // The only case we should ever see here is a function-to-pointer decay. 9986 assert(E->getCastKind() == CK_FunctionToPointerDecay); 9987 assert(E->getValueKind() == VK_RValue); 9988 assert(E->getObjectKind() == OK_Ordinary); 9989 9990 E->setType(DestType); 9991 9992 // Rebuild the sub-expression as the pointee (function) type. 9993 DestType = DestType->castAs<PointerType>()->getPointeeType(); 9994 9995 ExprResult Result = Visit(E->getSubExpr()); 9996 if (!Result.isUsable()) return ExprError(); 9997 9998 E->setSubExpr(Result.take()); 9999 return S.Owned(E); 10000 } 10001 10002 ExprResult RebuildUnknownAnyExpr::resolveDecl(Expr *E, ValueDecl *VD) { 10003 ExprValueKind ValueKind = VK_LValue; 10004 QualType Type = DestType; 10005 10006 // We know how to make this work for certain kinds of decls: 10007 10008 // - functions 10009 if (FunctionDecl *FD = dyn_cast<FunctionDecl>(VD)) { 10010 if (const PointerType *Ptr = Type->getAs<PointerType>()) { 10011 DestType = Ptr->getPointeeType(); 10012 ExprResult Result = resolveDecl(E, VD); 10013 if (Result.isInvalid()) return ExprError(); 10014 return S.ImpCastExprToType(Result.take(), Type, 10015 CK_FunctionToPointerDecay, VK_RValue); 10016 } 10017 10018 if (!Type->isFunctionType()) { 10019 S.Diag(E->getExprLoc(), diag::err_unknown_any_function) 10020 << VD << E->getSourceRange(); 10021 return ExprError(); 10022 } 10023 10024 if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD)) 10025 if (MD->isInstance()) { 10026 ValueKind = VK_RValue; 10027 Type = S.Context.BoundMemberTy; 10028 } 10029 10030 // Function references aren't l-values in C. 10031 if (!S.getLangOptions().CPlusPlus) 10032 ValueKind = VK_RValue; 10033 10034 // - variables 10035 } else if (isa<VarDecl>(VD)) { 10036 if (const ReferenceType *RefTy = Type->getAs<ReferenceType>()) { 10037 Type = RefTy->getPointeeType(); 10038 } else if (Type->isFunctionType()) { 10039 S.Diag(E->getExprLoc(), diag::err_unknown_any_var_function_type) 10040 << VD << E->getSourceRange(); 10041 return ExprError(); 10042 } 10043 10044 // - nothing else 10045 } else { 10046 S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_decl) 10047 << VD << E->getSourceRange(); 10048 return ExprError(); 10049 } 10050 10051 VD->setType(DestType); 10052 E->setType(Type); 10053 E->setValueKind(ValueKind); 10054 return S.Owned(E); 10055 } 10056 10057 /// Check a cast of an unknown-any type. We intentionally only 10058 /// trigger this for C-style casts. 10059 ExprResult Sema::checkUnknownAnyCast(SourceRange TypeRange, QualType CastType, 10060 Expr *CastExpr, CastKind &CastKind, 10061 ExprValueKind &VK, CXXCastPath &Path) { 10062 // Rewrite the casted expression from scratch. 10063 ExprResult result = RebuildUnknownAnyExpr(*this, CastType).Visit(CastExpr); 10064 if (!result.isUsable()) return ExprError(); 10065 10066 CastExpr = result.take(); 10067 VK = CastExpr->getValueKind(); 10068 CastKind = CK_NoOp; 10069 10070 return CastExpr; 10071 } 10072 10073 static ExprResult diagnoseUnknownAnyExpr(Sema &S, Expr *E) { 10074 Expr *orig = E; 10075 unsigned diagID = diag::err_uncasted_use_of_unknown_any; 10076 while (true) { 10077 E = E->IgnoreParenImpCasts(); 10078 if (CallExpr *call = dyn_cast<CallExpr>(E)) { 10079 E = call->getCallee(); 10080 diagID = diag::err_uncasted_call_of_unknown_any; 10081 } else { 10082 break; 10083 } 10084 } 10085 10086 SourceLocation loc; 10087 NamedDecl *d; 10088 if (DeclRefExpr *ref = dyn_cast<DeclRefExpr>(E)) { 10089 loc = ref->getLocation(); 10090 d = ref->getDecl(); 10091 } else if (MemberExpr *mem = dyn_cast<MemberExpr>(E)) { 10092 loc = mem->getMemberLoc(); 10093 d = mem->getMemberDecl(); 10094 } else if (ObjCMessageExpr *msg = dyn_cast<ObjCMessageExpr>(E)) { 10095 diagID = diag::err_uncasted_call_of_unknown_any; 10096 loc = msg->getSelectorStartLoc(); 10097 d = msg->getMethodDecl(); 10098 if (!d) { 10099 S.Diag(loc, diag::err_uncasted_send_to_unknown_any_method) 10100 << static_cast<unsigned>(msg->isClassMessage()) << msg->getSelector() 10101 << orig->getSourceRange(); 10102 return ExprError(); 10103 } 10104 } else { 10105 S.Diag(E->getExprLoc(), diag::err_unsupported_unknown_any_expr) 10106 << E->getSourceRange(); 10107 return ExprError(); 10108 } 10109 10110 S.Diag(loc, diagID) << d << orig->getSourceRange(); 10111 10112 // Never recoverable. 10113 return ExprError(); 10114 } 10115 10116 /// Check for operands with placeholder types and complain if found. 10117 /// Returns true if there was an error and no recovery was possible. 10118 ExprResult Sema::CheckPlaceholderExpr(Expr *E) { 10119 const BuiltinType *placeholderType = E->getType()->getAsPlaceholderType(); 10120 if (!placeholderType) return Owned(E); 10121 10122 switch (placeholderType->getKind()) { 10123 10124 // Overloaded expressions. 10125 case BuiltinType::Overload: { 10126 // Try to resolve a single function template specialization. 10127 // This is obligatory. 10128 ExprResult result = Owned(E); 10129 if (ResolveAndFixSingleFunctionTemplateSpecialization(result, false)) { 10130 return result; 10131 10132 // If that failed, try to recover with a call. 10133 } else { 10134 tryToRecoverWithCall(result, PDiag(diag::err_ovl_unresolvable), 10135 /*complain*/ true); 10136 return result; 10137 } 10138 } 10139 10140 // Bound member functions. 10141 case BuiltinType::BoundMember: { 10142 ExprResult result = Owned(E); 10143 tryToRecoverWithCall(result, PDiag(diag::err_bound_member_function), 10144 /*complain*/ true); 10145 return result; 10146 } 10147 10148 // ARC unbridged casts. 10149 case BuiltinType::ARCUnbridgedCast: { 10150 Expr *realCast = stripARCUnbridgedCast(E); 10151 diagnoseARCUnbridgedCast(realCast); 10152 return Owned(realCast); 10153 } 10154 10155 // Expressions of unknown type. 10156 case BuiltinType::UnknownAny: 10157 return diagnoseUnknownAnyExpr(*this, E); 10158 10159 // Pseudo-objects. 10160 case BuiltinType::PseudoObject: 10161 return checkPseudoObjectRValue(E); 10162 10163 // Everything else should be impossible. 10164 #define BUILTIN_TYPE(Id, SingletonId) \ 10165 case BuiltinType::Id: 10166 #define PLACEHOLDER_TYPE(Id, SingletonId) 10167 #include "clang/AST/BuiltinTypes.def" 10168 break; 10169 } 10170 10171 llvm_unreachable("invalid placeholder type!"); 10172 } 10173 10174 bool Sema::CheckCaseExpression(Expr *E) { 10175 if (E->isTypeDependent()) 10176 return true; 10177 if (E->isValueDependent() || E->isIntegerConstantExpr(Context)) 10178 return E->getType()->isIntegralOrEnumerationType(); 10179 return false; 10180 } 10181