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