1//===--- SemaExprCXX.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 C++ expressions. 11// 12//===----------------------------------------------------------------------===// 13 14#include "clang/Sema/SemaInternal.h" 15#include "clang/Sema/DeclSpec.h" 16#include "clang/Sema/Initialization.h" 17#include "clang/Sema/Lookup.h" 18#include "clang/Sema/ParsedTemplate.h" 19#include "clang/Sema/ScopeInfo.h" 20#include "clang/Sema/Scope.h" 21#include "clang/Sema/TemplateDeduction.h" 22#include "clang/AST/ASTContext.h" 23#include "clang/AST/CXXInheritance.h" 24#include "clang/AST/DeclObjC.h" 25#include "clang/AST/ExprCXX.h" 26#include "clang/AST/ExprObjC.h" 27#include "clang/AST/TypeLoc.h" 28#include "clang/Basic/PartialDiagnostic.h" 29#include "clang/Basic/TargetInfo.h" 30#include "clang/Lex/Preprocessor.h" 31#include "llvm/ADT/STLExtras.h" 32#include "llvm/Support/ErrorHandling.h" 33using namespace clang; 34using namespace sema; 35 36ParsedType Sema::getDestructorName(SourceLocation TildeLoc, 37 IdentifierInfo &II, 38 SourceLocation NameLoc, 39 Scope *S, CXXScopeSpec &SS, 40 ParsedType ObjectTypePtr, 41 bool EnteringContext) { 42 // Determine where to perform name lookup. 43 44 // FIXME: This area of the standard is very messy, and the current 45 // wording is rather unclear about which scopes we search for the 46 // destructor name; see core issues 399 and 555. Issue 399 in 47 // particular shows where the current description of destructor name 48 // lookup is completely out of line with existing practice, e.g., 49 // this appears to be ill-formed: 50 // 51 // namespace N { 52 // template <typename T> struct S { 53 // ~S(); 54 // }; 55 // } 56 // 57 // void f(N::S<int>* s) { 58 // s->N::S<int>::~S(); 59 // } 60 // 61 // See also PR6358 and PR6359. 62 // For this reason, we're currently only doing the C++03 version of this 63 // code; the C++0x version has to wait until we get a proper spec. 64 QualType SearchType; 65 DeclContext *LookupCtx = 0; 66 bool isDependent = false; 67 bool LookInScope = false; 68 69 // If we have an object type, it's because we are in a 70 // pseudo-destructor-expression or a member access expression, and 71 // we know what type we're looking for. 72 if (ObjectTypePtr) 73 SearchType = GetTypeFromParser(ObjectTypePtr); 74 75 if (SS.isSet()) { 76 NestedNameSpecifier *NNS = (NestedNameSpecifier *)SS.getScopeRep(); 77 78 bool AlreadySearched = false; 79 bool LookAtPrefix = true; 80 // C++ [basic.lookup.qual]p6: 81 // If a pseudo-destructor-name (5.2.4) contains a nested-name-specifier, 82 // the type-names are looked up as types in the scope designated by the 83 // nested-name-specifier. In a qualified-id of the form: 84 // 85 // ::[opt] nested-name-specifier ~ class-name 86 // 87 // where the nested-name-specifier designates a namespace scope, and in 88 // a qualified-id of the form: 89 // 90 // ::opt nested-name-specifier class-name :: ~ class-name 91 // 92 // the class-names are looked up as types in the scope designated by 93 // the nested-name-specifier. 94 // 95 // Here, we check the first case (completely) and determine whether the 96 // code below is permitted to look at the prefix of the 97 // nested-name-specifier. 98 DeclContext *DC = computeDeclContext(SS, EnteringContext); 99 if (DC && DC->isFileContext()) { 100 AlreadySearched = true; 101 LookupCtx = DC; 102 isDependent = false; 103 } else if (DC && isa<CXXRecordDecl>(DC)) 104 LookAtPrefix = false; 105 106 // The second case from the C++03 rules quoted further above. 107 NestedNameSpecifier *Prefix = 0; 108 if (AlreadySearched) { 109 // Nothing left to do. 110 } else if (LookAtPrefix && (Prefix = NNS->getPrefix())) { 111 CXXScopeSpec PrefixSS; 112 PrefixSS.Adopt(NestedNameSpecifierLoc(Prefix, SS.location_data())); 113 LookupCtx = computeDeclContext(PrefixSS, EnteringContext); 114 isDependent = isDependentScopeSpecifier(PrefixSS); 115 } else if (ObjectTypePtr) { 116 LookupCtx = computeDeclContext(SearchType); 117 isDependent = SearchType->isDependentType(); 118 } else { 119 LookupCtx = computeDeclContext(SS, EnteringContext); 120 isDependent = LookupCtx && LookupCtx->isDependentContext(); 121 } 122 123 LookInScope = false; 124 } else if (ObjectTypePtr) { 125 // C++ [basic.lookup.classref]p3: 126 // If the unqualified-id is ~type-name, the type-name is looked up 127 // in the context of the entire postfix-expression. If the type T 128 // of the object expression is of a class type C, the type-name is 129 // also looked up in the scope of class C. At least one of the 130 // lookups shall find a name that refers to (possibly 131 // cv-qualified) T. 132 LookupCtx = computeDeclContext(SearchType); 133 isDependent = SearchType->isDependentType(); 134 assert((isDependent || !SearchType->isIncompleteType()) && 135 "Caller should have completed object type"); 136 137 LookInScope = true; 138 } else { 139 // Perform lookup into the current scope (only). 140 LookInScope = true; 141 } 142 143 TypeDecl *NonMatchingTypeDecl = 0; 144 LookupResult Found(*this, &II, NameLoc, LookupOrdinaryName); 145 for (unsigned Step = 0; Step != 2; ++Step) { 146 // Look for the name first in the computed lookup context (if we 147 // have one) and, if that fails to find a match, in the scope (if 148 // we're allowed to look there). 149 Found.clear(); 150 if (Step == 0 && LookupCtx) 151 LookupQualifiedName(Found, LookupCtx); 152 else if (Step == 1 && LookInScope && S) 153 LookupName(Found, S); 154 else 155 continue; 156 157 // FIXME: Should we be suppressing ambiguities here? 158 if (Found.isAmbiguous()) 159 return ParsedType(); 160 161 if (TypeDecl *Type = Found.getAsSingle<TypeDecl>()) { 162 QualType T = Context.getTypeDeclType(Type); 163 164 if (SearchType.isNull() || SearchType->isDependentType() || 165 Context.hasSameUnqualifiedType(T, SearchType)) { 166 // We found our type! 167 168 return ParsedType::make(T); 169 } 170 171 if (!SearchType.isNull()) 172 NonMatchingTypeDecl = Type; 173 } 174 175 // If the name that we found is a class template name, and it is 176 // the same name as the template name in the last part of the 177 // nested-name-specifier (if present) or the object type, then 178 // this is the destructor for that class. 179 // FIXME: This is a workaround until we get real drafting for core 180 // issue 399, for which there isn't even an obvious direction. 181 if (ClassTemplateDecl *Template = Found.getAsSingle<ClassTemplateDecl>()) { 182 QualType MemberOfType; 183 if (SS.isSet()) { 184 if (DeclContext *Ctx = computeDeclContext(SS, EnteringContext)) { 185 // Figure out the type of the context, if it has one. 186 if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Ctx)) 187 MemberOfType = Context.getTypeDeclType(Record); 188 } 189 } 190 if (MemberOfType.isNull()) 191 MemberOfType = SearchType; 192 193 if (MemberOfType.isNull()) 194 continue; 195 196 // We're referring into a class template specialization. If the 197 // class template we found is the same as the template being 198 // specialized, we found what we are looking for. 199 if (const RecordType *Record = MemberOfType->getAs<RecordType>()) { 200 if (ClassTemplateSpecializationDecl *Spec 201 = dyn_cast<ClassTemplateSpecializationDecl>(Record->getDecl())) { 202 if (Spec->getSpecializedTemplate()->getCanonicalDecl() == 203 Template->getCanonicalDecl()) 204 return ParsedType::make(MemberOfType); 205 } 206 207 continue; 208 } 209 210 // We're referring to an unresolved class template 211 // specialization. Determine whether we class template we found 212 // is the same as the template being specialized or, if we don't 213 // know which template is being specialized, that it at least 214 // has the same name. 215 if (const TemplateSpecializationType *SpecType 216 = MemberOfType->getAs<TemplateSpecializationType>()) { 217 TemplateName SpecName = SpecType->getTemplateName(); 218 219 // The class template we found is the same template being 220 // specialized. 221 if (TemplateDecl *SpecTemplate = SpecName.getAsTemplateDecl()) { 222 if (SpecTemplate->getCanonicalDecl() == Template->getCanonicalDecl()) 223 return ParsedType::make(MemberOfType); 224 225 continue; 226 } 227 228 // The class template we found has the same name as the 229 // (dependent) template name being specialized. 230 if (DependentTemplateName *DepTemplate 231 = SpecName.getAsDependentTemplateName()) { 232 if (DepTemplate->isIdentifier() && 233 DepTemplate->getIdentifier() == Template->getIdentifier()) 234 return ParsedType::make(MemberOfType); 235 236 continue; 237 } 238 } 239 } 240 } 241 242 if (isDependent) { 243 // We didn't find our type, but that's okay: it's dependent 244 // anyway. 245 246 // FIXME: What if we have no nested-name-specifier? 247 QualType T = CheckTypenameType(ETK_None, SourceLocation(), 248 SS.getWithLocInContext(Context), 249 II, NameLoc); 250 return ParsedType::make(T); 251 } 252 253 if (NonMatchingTypeDecl) { 254 QualType T = Context.getTypeDeclType(NonMatchingTypeDecl); 255 Diag(NameLoc, diag::err_destructor_expr_type_mismatch) 256 << T << SearchType; 257 Diag(NonMatchingTypeDecl->getLocation(), diag::note_destructor_type_here) 258 << T; 259 } else if (ObjectTypePtr) 260 Diag(NameLoc, diag::err_ident_in_dtor_not_a_type) 261 << &II; 262 else 263 Diag(NameLoc, diag::err_destructor_class_name); 264 265 return ParsedType(); 266} 267 268/// \brief Build a C++ typeid expression with a type operand. 269ExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, 270 SourceLocation TypeidLoc, 271 TypeSourceInfo *Operand, 272 SourceLocation RParenLoc) { 273 // C++ [expr.typeid]p4: 274 // The top-level cv-qualifiers of the lvalue expression or the type-id 275 // that is the operand of typeid are always ignored. 276 // If the type of the type-id is a class type or a reference to a class 277 // type, the class shall be completely-defined. 278 Qualifiers Quals; 279 QualType T 280 = Context.getUnqualifiedArrayType(Operand->getType().getNonReferenceType(), 281 Quals); 282 if (T->getAs<RecordType>() && 283 RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid)) 284 return ExprError(); 285 286 return Owned(new (Context) CXXTypeidExpr(TypeInfoType.withConst(), 287 Operand, 288 SourceRange(TypeidLoc, RParenLoc))); 289} 290 291/// \brief Build a C++ typeid expression with an expression operand. 292ExprResult Sema::BuildCXXTypeId(QualType TypeInfoType, 293 SourceLocation TypeidLoc, 294 Expr *E, 295 SourceLocation RParenLoc) { 296 bool isUnevaluatedOperand = true; 297 if (E && !E->isTypeDependent()) { 298 if (E->getType()->isPlaceholderType()) { 299 ExprResult result = CheckPlaceholderExpr(E); 300 if (result.isInvalid()) return ExprError(); 301 E = result.take(); 302 } 303 304 QualType T = E->getType(); 305 if (const RecordType *RecordT = T->getAs<RecordType>()) { 306 CXXRecordDecl *RecordD = cast<CXXRecordDecl>(RecordT->getDecl()); 307 // C++ [expr.typeid]p3: 308 // [...] If the type of the expression is a class type, the class 309 // shall be completely-defined. 310 if (RequireCompleteType(TypeidLoc, T, diag::err_incomplete_typeid)) 311 return ExprError(); 312 313 // C++ [expr.typeid]p3: 314 // When typeid is applied to an expression other than an glvalue of a 315 // polymorphic class type [...] [the] expression is an unevaluated 316 // operand. [...] 317 if (RecordD->isPolymorphic() && E->Classify(Context).isGLValue()) { 318 isUnevaluatedOperand = false; 319 320 // We require a vtable to query the type at run time. 321 MarkVTableUsed(TypeidLoc, RecordD); 322 } 323 } 324 325 // C++ [expr.typeid]p4: 326 // [...] If the type of the type-id is a reference to a possibly 327 // cv-qualified type, the result of the typeid expression refers to a 328 // std::type_info object representing the cv-unqualified referenced 329 // type. 330 Qualifiers Quals; 331 QualType UnqualT = Context.getUnqualifiedArrayType(T, Quals); 332 if (!Context.hasSameType(T, UnqualT)) { 333 T = UnqualT; 334 E = ImpCastExprToType(E, UnqualT, CK_NoOp, E->getValueKind()).take(); 335 } 336 } 337 338 // If this is an unevaluated operand, clear out the set of 339 // declaration references we have been computing and eliminate any 340 // temporaries introduced in its computation. 341 if (isUnevaluatedOperand) 342 ExprEvalContexts.back().Context = Unevaluated; 343 344 return Owned(new (Context) CXXTypeidExpr(TypeInfoType.withConst(), 345 E, 346 SourceRange(TypeidLoc, RParenLoc))); 347} 348 349/// ActOnCXXTypeidOfType - Parse typeid( type-id ) or typeid (expression); 350ExprResult 351Sema::ActOnCXXTypeid(SourceLocation OpLoc, SourceLocation LParenLoc, 352 bool isType, void *TyOrExpr, SourceLocation RParenLoc) { 353 // Find the std::type_info type. 354 if (!getStdNamespace()) 355 return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid)); 356 357 if (!CXXTypeInfoDecl) { 358 IdentifierInfo *TypeInfoII = &PP.getIdentifierTable().get("type_info"); 359 LookupResult R(*this, TypeInfoII, SourceLocation(), LookupTagName); 360 LookupQualifiedName(R, getStdNamespace()); 361 CXXTypeInfoDecl = R.getAsSingle<RecordDecl>(); 362 if (!CXXTypeInfoDecl) 363 return ExprError(Diag(OpLoc, diag::err_need_header_before_typeid)); 364 } 365 366 QualType TypeInfoType = Context.getTypeDeclType(CXXTypeInfoDecl); 367 368 if (isType) { 369 // The operand is a type; handle it as such. 370 TypeSourceInfo *TInfo = 0; 371 QualType T = GetTypeFromParser(ParsedType::getFromOpaquePtr(TyOrExpr), 372 &TInfo); 373 if (T.isNull()) 374 return ExprError(); 375 376 if (!TInfo) 377 TInfo = Context.getTrivialTypeSourceInfo(T, OpLoc); 378 379 return BuildCXXTypeId(TypeInfoType, OpLoc, TInfo, RParenLoc); 380 } 381 382 // The operand is an expression. 383 return BuildCXXTypeId(TypeInfoType, OpLoc, (Expr*)TyOrExpr, RParenLoc); 384} 385 386/// Retrieve the UuidAttr associated with QT. 387static UuidAttr *GetUuidAttrOfType(QualType QT) { 388 // Optionally remove one level of pointer, reference or array indirection. 389 const Type *Ty = QT.getTypePtr();; 390 if (QT->isPointerType() || QT->isReferenceType()) 391 Ty = QT->getPointeeType().getTypePtr(); 392 else if (QT->isArrayType()) 393 Ty = cast<ArrayType>(QT)->getElementType().getTypePtr(); 394 395 // Loop all record redeclaration looking for an uuid attribute. 396 CXXRecordDecl *RD = Ty->getAsCXXRecordDecl(); 397 for (CXXRecordDecl::redecl_iterator I = RD->redecls_begin(), 398 E = RD->redecls_end(); I != E; ++I) { 399 if (UuidAttr *Uuid = I->getAttr<UuidAttr>()) 400 return Uuid; 401 } 402 403 return 0; 404} 405 406/// \brief Build a Microsoft __uuidof expression with a type operand. 407ExprResult Sema::BuildCXXUuidof(QualType TypeInfoType, 408 SourceLocation TypeidLoc, 409 TypeSourceInfo *Operand, 410 SourceLocation RParenLoc) { 411 if (!Operand->getType()->isDependentType()) { 412 if (!GetUuidAttrOfType(Operand->getType())) 413 return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid)); 414 } 415 416 // FIXME: add __uuidof semantic analysis for type operand. 417 return Owned(new (Context) CXXUuidofExpr(TypeInfoType.withConst(), 418 Operand, 419 SourceRange(TypeidLoc, RParenLoc))); 420} 421 422/// \brief Build a Microsoft __uuidof expression with an expression operand. 423ExprResult Sema::BuildCXXUuidof(QualType TypeInfoType, 424 SourceLocation TypeidLoc, 425 Expr *E, 426 SourceLocation RParenLoc) { 427 if (!E->getType()->isDependentType()) { 428 if (!GetUuidAttrOfType(E->getType()) && 429 !E->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) 430 return ExprError(Diag(TypeidLoc, diag::err_uuidof_without_guid)); 431 } 432 // FIXME: add __uuidof semantic analysis for type operand. 433 return Owned(new (Context) CXXUuidofExpr(TypeInfoType.withConst(), 434 E, 435 SourceRange(TypeidLoc, RParenLoc))); 436} 437 438/// ActOnCXXUuidof - Parse __uuidof( type-id ) or __uuidof (expression); 439ExprResult 440Sema::ActOnCXXUuidof(SourceLocation OpLoc, SourceLocation LParenLoc, 441 bool isType, void *TyOrExpr, SourceLocation RParenLoc) { 442 // If MSVCGuidDecl has not been cached, do the lookup. 443 if (!MSVCGuidDecl) { 444 IdentifierInfo *GuidII = &PP.getIdentifierTable().get("_GUID"); 445 LookupResult R(*this, GuidII, SourceLocation(), LookupTagName); 446 LookupQualifiedName(R, Context.getTranslationUnitDecl()); 447 MSVCGuidDecl = R.getAsSingle<RecordDecl>(); 448 if (!MSVCGuidDecl) 449 return ExprError(Diag(OpLoc, diag::err_need_header_before_ms_uuidof)); 450 } 451 452 QualType GuidType = Context.getTypeDeclType(MSVCGuidDecl); 453 454 if (isType) { 455 // The operand is a type; handle it as such. 456 TypeSourceInfo *TInfo = 0; 457 QualType T = GetTypeFromParser(ParsedType::getFromOpaquePtr(TyOrExpr), 458 &TInfo); 459 if (T.isNull()) 460 return ExprError(); 461 462 if (!TInfo) 463 TInfo = Context.getTrivialTypeSourceInfo(T, OpLoc); 464 465 return BuildCXXUuidof(GuidType, OpLoc, TInfo, RParenLoc); 466 } 467 468 // The operand is an expression. 469 return BuildCXXUuidof(GuidType, OpLoc, (Expr*)TyOrExpr, RParenLoc); 470} 471 472/// ActOnCXXBoolLiteral - Parse {true,false} literals. 473ExprResult 474Sema::ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind) { 475 assert((Kind == tok::kw_true || Kind == tok::kw_false) && 476 "Unknown C++ Boolean value!"); 477 return Owned(new (Context) CXXBoolLiteralExpr(Kind == tok::kw_true, 478 Context.BoolTy, OpLoc)); 479} 480 481/// ActOnCXXNullPtrLiteral - Parse 'nullptr'. 482ExprResult 483Sema::ActOnCXXNullPtrLiteral(SourceLocation Loc) { 484 return Owned(new (Context) CXXNullPtrLiteralExpr(Context.NullPtrTy, Loc)); 485} 486 487/// ActOnCXXThrow - Parse throw expressions. 488ExprResult 489Sema::ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *Ex) { 490 bool IsThrownVarInScope = false; 491 if (Ex) { 492 // C++0x [class.copymove]p31: 493 // When certain criteria are met, an implementation is allowed to omit the 494 // copy/move construction of a class object [...] 495 // 496 // - in a throw-expression, when the operand is the name of a 497 // non-volatile automatic object (other than a function or catch- 498 // clause parameter) whose scope does not extend beyond the end of the 499 // innermost enclosing try-block (if there is one), the copy/move 500 // operation from the operand to the exception object (15.1) can be 501 // omitted by constructing the automatic object directly into the 502 // exception object 503 if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Ex->IgnoreParens())) 504 if (VarDecl *Var = dyn_cast<VarDecl>(DRE->getDecl())) { 505 if (Var->hasLocalStorage() && !Var->getType().isVolatileQualified()) { 506 for( ; S; S = S->getParent()) { 507 if (S->isDeclScope(Var)) { 508 IsThrownVarInScope = true; 509 break; 510 } 511 512 if (S->getFlags() & 513 (Scope::FnScope | Scope::ClassScope | Scope::BlockScope | 514 Scope::FunctionPrototypeScope | Scope::ObjCMethodScope | 515 Scope::TryScope)) 516 break; 517 } 518 } 519 } 520 } 521 522 return BuildCXXThrow(OpLoc, Ex, IsThrownVarInScope); 523} 524 525ExprResult Sema::BuildCXXThrow(SourceLocation OpLoc, Expr *Ex, 526 bool IsThrownVarInScope) { 527 // Don't report an error if 'throw' is used in system headers. 528 if (!getLangOptions().CXXExceptions && 529 !getSourceManager().isInSystemHeader(OpLoc)) 530 Diag(OpLoc, diag::err_exceptions_disabled) << "throw"; 531 532 if (Ex && !Ex->isTypeDependent()) { 533 ExprResult ExRes = CheckCXXThrowOperand(OpLoc, Ex, IsThrownVarInScope); 534 if (ExRes.isInvalid()) 535 return ExprError(); 536 Ex = ExRes.take(); 537 } 538 539 return Owned(new (Context) CXXThrowExpr(Ex, Context.VoidTy, OpLoc, 540 IsThrownVarInScope)); 541} 542 543/// CheckCXXThrowOperand - Validate the operand of a throw. 544ExprResult Sema::CheckCXXThrowOperand(SourceLocation ThrowLoc, Expr *E, 545 bool IsThrownVarInScope) { 546 // C++ [except.throw]p3: 547 // A throw-expression initializes a temporary object, called the exception 548 // object, the type of which is determined by removing any top-level 549 // cv-qualifiers from the static type of the operand of throw and adjusting 550 // the type from "array of T" or "function returning T" to "pointer to T" 551 // or "pointer to function returning T", [...] 552 if (E->getType().hasQualifiers()) 553 E = ImpCastExprToType(E, E->getType().getUnqualifiedType(), CK_NoOp, 554 E->getValueKind()).take(); 555 556 ExprResult Res = DefaultFunctionArrayConversion(E); 557 if (Res.isInvalid()) 558 return ExprError(); 559 E = Res.take(); 560 561 // If the type of the exception would be an incomplete type or a pointer 562 // to an incomplete type other than (cv) void the program is ill-formed. 563 QualType Ty = E->getType(); 564 bool isPointer = false; 565 if (const PointerType* Ptr = Ty->getAs<PointerType>()) { 566 Ty = Ptr->getPointeeType(); 567 isPointer = true; 568 } 569 if (!isPointer || !Ty->isVoidType()) { 570 if (RequireCompleteType(ThrowLoc, Ty, 571 PDiag(isPointer ? diag::err_throw_incomplete_ptr 572 : diag::err_throw_incomplete) 573 << E->getSourceRange())) 574 return ExprError(); 575 576 if (RequireNonAbstractType(ThrowLoc, E->getType(), 577 PDiag(diag::err_throw_abstract_type) 578 << E->getSourceRange())) 579 return ExprError(); 580 } 581 582 // Initialize the exception result. This implicitly weeds out 583 // abstract types or types with inaccessible copy constructors. 584 585 // C++0x [class.copymove]p31: 586 // When certain criteria are met, an implementation is allowed to omit the 587 // copy/move construction of a class object [...] 588 // 589 // - in a throw-expression, when the operand is the name of a 590 // non-volatile automatic object (other than a function or catch-clause 591 // parameter) whose scope does not extend beyond the end of the 592 // innermost enclosing try-block (if there is one), the copy/move 593 // operation from the operand to the exception object (15.1) can be 594 // omitted by constructing the automatic object directly into the 595 // exception object 596 const VarDecl *NRVOVariable = 0; 597 if (IsThrownVarInScope) 598 NRVOVariable = getCopyElisionCandidate(QualType(), E, false); 599 600 InitializedEntity Entity = 601 InitializedEntity::InitializeException(ThrowLoc, E->getType(), 602 /*NRVO=*/NRVOVariable != 0); 603 Res = PerformMoveOrCopyInitialization(Entity, NRVOVariable, 604 QualType(), E, 605 IsThrownVarInScope); 606 if (Res.isInvalid()) 607 return ExprError(); 608 E = Res.take(); 609 610 // If the exception has class type, we need additional handling. 611 const RecordType *RecordTy = Ty->getAs<RecordType>(); 612 if (!RecordTy) 613 return Owned(E); 614 CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl()); 615 616 // If we are throwing a polymorphic class type or pointer thereof, 617 // exception handling will make use of the vtable. 618 MarkVTableUsed(ThrowLoc, RD); 619 620 // If a pointer is thrown, the referenced object will not be destroyed. 621 if (isPointer) 622 return Owned(E); 623 624 // If the class has a non-trivial destructor, we must be able to call it. 625 if (RD->hasTrivialDestructor()) 626 return Owned(E); 627 628 CXXDestructorDecl *Destructor 629 = const_cast<CXXDestructorDecl*>(LookupDestructor(RD)); 630 if (!Destructor) 631 return Owned(E); 632 633 MarkDeclarationReferenced(E->getExprLoc(), Destructor); 634 CheckDestructorAccess(E->getExprLoc(), Destructor, 635 PDiag(diag::err_access_dtor_exception) << Ty); 636 return Owned(E); 637} 638 639QualType Sema::getCurrentThisType(bool Capture) { 640 // Ignore block scopes: we can capture through them. 641 // Ignore nested enum scopes: we'll diagnose non-constant expressions 642 // where they're invalid, and other uses are legitimate. 643 // Don't ignore nested class scopes: you can't use 'this' in a local class. 644 DeclContext *DC = CurContext; 645 unsigned NumBlocks = 0; 646 while (true) { 647 if (isa<BlockDecl>(DC)) { 648 DC = cast<BlockDecl>(DC)->getDeclContext(); 649 ++NumBlocks; 650 } else if (isa<EnumDecl>(DC)) 651 DC = cast<EnumDecl>(DC)->getDeclContext(); 652 else break; 653 } 654 655 QualType ThisTy; 656 if (CXXMethodDecl *method = dyn_cast<CXXMethodDecl>(DC)) { 657 if (method && method->isInstance()) 658 ThisTy = method->getThisType(Context); 659 } else if (CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(DC)) { 660 // C++0x [expr.prim]p4: 661 // Otherwise, if a member-declarator declares a non-static data member 662 // of a class X, the expression this is a prvalue of type "pointer to X" 663 // within the optional brace-or-equal-initializer. 664 Scope *S = getScopeForContext(DC); 665 if (!S || S->getFlags() & Scope::ThisScope) 666 ThisTy = Context.getPointerType(Context.getRecordType(RD)); 667 } 668 669 if (!Capture || ThisTy.isNull()) 670 return ThisTy; 671 672 // Mark that we're closing on 'this' in all the block scopes we ignored. 673 for (unsigned idx = FunctionScopes.size() - 1; 674 NumBlocks; --idx, --NumBlocks) 675 cast<BlockScopeInfo>(FunctionScopes[idx])->CapturesCXXThis = true; 676 677 return ThisTy; 678} 679 680ExprResult Sema::ActOnCXXThis(SourceLocation Loc) { 681 /// C++ 9.3.2: In the body of a non-static member function, the keyword this 682 /// is a non-lvalue expression whose value is the address of the object for 683 /// which the function is called. 684 685 QualType ThisTy = getCurrentThisType(); 686 if (ThisTy.isNull()) return Diag(Loc, diag::err_invalid_this_use); 687 688 return Owned(new (Context) CXXThisExpr(Loc, ThisTy, /*isImplicit=*/false)); 689} 690 691ExprResult 692Sema::ActOnCXXTypeConstructExpr(ParsedType TypeRep, 693 SourceLocation LParenLoc, 694 MultiExprArg exprs, 695 SourceLocation RParenLoc) { 696 if (!TypeRep) 697 return ExprError(); 698 699 TypeSourceInfo *TInfo; 700 QualType Ty = GetTypeFromParser(TypeRep, &TInfo); 701 if (!TInfo) 702 TInfo = Context.getTrivialTypeSourceInfo(Ty, SourceLocation()); 703 704 return BuildCXXTypeConstructExpr(TInfo, LParenLoc, exprs, RParenLoc); 705} 706 707/// ActOnCXXTypeConstructExpr - Parse construction of a specified type. 708/// Can be interpreted either as function-style casting ("int(x)") 709/// or class type construction ("ClassType(x,y,z)") 710/// or creation of a value-initialized type ("int()"). 711ExprResult 712Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo, 713 SourceLocation LParenLoc, 714 MultiExprArg exprs, 715 SourceLocation RParenLoc) { 716 QualType Ty = TInfo->getType(); 717 unsigned NumExprs = exprs.size(); 718 Expr **Exprs = (Expr**)exprs.get(); 719 SourceLocation TyBeginLoc = TInfo->getTypeLoc().getBeginLoc(); 720 SourceRange FullRange = SourceRange(TyBeginLoc, RParenLoc); 721 722 if (Ty->isDependentType() || 723 CallExpr::hasAnyTypeDependentArguments(Exprs, NumExprs)) { 724 exprs.release(); 725 726 return Owned(CXXUnresolvedConstructExpr::Create(Context, TInfo, 727 LParenLoc, 728 Exprs, NumExprs, 729 RParenLoc)); 730 } 731 732 if (Ty->isArrayType()) 733 return ExprError(Diag(TyBeginLoc, 734 diag::err_value_init_for_array_type) << FullRange); 735 if (!Ty->isVoidType() && 736 RequireCompleteType(TyBeginLoc, Ty, 737 PDiag(diag::err_invalid_incomplete_type_use) 738 << FullRange)) 739 return ExprError(); 740 741 if (RequireNonAbstractType(TyBeginLoc, Ty, 742 diag::err_allocation_of_abstract_type)) 743 return ExprError(); 744 745 746 // C++ [expr.type.conv]p1: 747 // If the expression list is a single expression, the type conversion 748 // expression is equivalent (in definedness, and if defined in meaning) to the 749 // corresponding cast expression. 750 if (NumExprs == 1) { 751 Expr *Arg = Exprs[0]; 752 exprs.release(); 753 return BuildCXXFunctionalCastExpr(TInfo, LParenLoc, Arg, RParenLoc); 754 } 755 756 InitializedEntity Entity = InitializedEntity::InitializeTemporary(TInfo); 757 InitializationKind Kind 758 = NumExprs ? InitializationKind::CreateDirect(TyBeginLoc, 759 LParenLoc, RParenLoc) 760 : InitializationKind::CreateValue(TyBeginLoc, 761 LParenLoc, RParenLoc); 762 InitializationSequence InitSeq(*this, Entity, Kind, Exprs, NumExprs); 763 ExprResult Result = InitSeq.Perform(*this, Entity, Kind, move(exprs)); 764 765 // FIXME: Improve AST representation? 766 return move(Result); 767} 768 769/// doesUsualArrayDeleteWantSize - Answers whether the usual 770/// operator delete[] for the given type has a size_t parameter. 771static bool doesUsualArrayDeleteWantSize(Sema &S, SourceLocation loc, 772 QualType allocType) { 773 const RecordType *record = 774 allocType->getBaseElementTypeUnsafe()->getAs<RecordType>(); 775 if (!record) return false; 776 777 // Try to find an operator delete[] in class scope. 778 779 DeclarationName deleteName = 780 S.Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete); 781 LookupResult ops(S, deleteName, loc, Sema::LookupOrdinaryName); 782 S.LookupQualifiedName(ops, record->getDecl()); 783 784 // We're just doing this for information. 785 ops.suppressDiagnostics(); 786 787 // Very likely: there's no operator delete[]. 788 if (ops.empty()) return false; 789 790 // If it's ambiguous, it should be illegal to call operator delete[] 791 // on this thing, so it doesn't matter if we allocate extra space or not. 792 if (ops.isAmbiguous()) return false; 793 794 LookupResult::Filter filter = ops.makeFilter(); 795 while (filter.hasNext()) { 796 NamedDecl *del = filter.next()->getUnderlyingDecl(); 797 798 // C++0x [basic.stc.dynamic.deallocation]p2: 799 // A template instance is never a usual deallocation function, 800 // regardless of its signature. 801 if (isa<FunctionTemplateDecl>(del)) { 802 filter.erase(); 803 continue; 804 } 805 806 // C++0x [basic.stc.dynamic.deallocation]p2: 807 // If class T does not declare [an operator delete[] with one 808 // parameter] but does declare a member deallocation function 809 // named operator delete[] with exactly two parameters, the 810 // second of which has type std::size_t, then this function 811 // is a usual deallocation function. 812 if (!cast<CXXMethodDecl>(del)->isUsualDeallocationFunction()) { 813 filter.erase(); 814 continue; 815 } 816 } 817 filter.done(); 818 819 if (!ops.isSingleResult()) return false; 820 821 const FunctionDecl *del = cast<FunctionDecl>(ops.getFoundDecl()); 822 return (del->getNumParams() == 2); 823} 824 825/// ActOnCXXNew - Parsed a C++ 'new' expression (C++ 5.3.4), as in e.g.: 826/// @code new (memory) int[size][4] @endcode 827/// or 828/// @code ::new Foo(23, "hello") @endcode 829/// For the interpretation of this heap of arguments, consult the base version. 830ExprResult 831Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal, 832 SourceLocation PlacementLParen, MultiExprArg PlacementArgs, 833 SourceLocation PlacementRParen, SourceRange TypeIdParens, 834 Declarator &D, SourceLocation ConstructorLParen, 835 MultiExprArg ConstructorArgs, 836 SourceLocation ConstructorRParen) { 837 bool TypeContainsAuto = D.getDeclSpec().getTypeSpecType() == DeclSpec::TST_auto; 838 839 Expr *ArraySize = 0; 840 // If the specified type is an array, unwrap it and save the expression. 841 if (D.getNumTypeObjects() > 0 && 842 D.getTypeObject(0).Kind == DeclaratorChunk::Array) { 843 DeclaratorChunk &Chunk = D.getTypeObject(0); 844 if (TypeContainsAuto) 845 return ExprError(Diag(Chunk.Loc, diag::err_new_array_of_auto) 846 << D.getSourceRange()); 847 if (Chunk.Arr.hasStatic) 848 return ExprError(Diag(Chunk.Loc, diag::err_static_illegal_in_new) 849 << D.getSourceRange()); 850 if (!Chunk.Arr.NumElts) 851 return ExprError(Diag(Chunk.Loc, diag::err_array_new_needs_size) 852 << D.getSourceRange()); 853 854 ArraySize = static_cast<Expr*>(Chunk.Arr.NumElts); 855 D.DropFirstTypeObject(); 856 } 857 858 // Every dimension shall be of constant size. 859 if (ArraySize) { 860 for (unsigned I = 0, N = D.getNumTypeObjects(); I < N; ++I) { 861 if (D.getTypeObject(I).Kind != DeclaratorChunk::Array) 862 break; 863 864 DeclaratorChunk::ArrayTypeInfo &Array = D.getTypeObject(I).Arr; 865 if (Expr *NumElts = (Expr *)Array.NumElts) { 866 if (!NumElts->isTypeDependent() && !NumElts->isValueDependent() && 867 !NumElts->isIntegerConstantExpr(Context)) { 868 Diag(D.getTypeObject(I).Loc, diag::err_new_array_nonconst) 869 << NumElts->getSourceRange(); 870 return ExprError(); 871 } 872 } 873 } 874 } 875 876 TypeSourceInfo *TInfo = GetTypeForDeclarator(D, /*Scope=*/0); 877 QualType AllocType = TInfo->getType(); 878 if (D.isInvalidType()) 879 return ExprError(); 880 881 return BuildCXXNew(StartLoc, UseGlobal, 882 PlacementLParen, 883 move(PlacementArgs), 884 PlacementRParen, 885 TypeIdParens, 886 AllocType, 887 TInfo, 888 ArraySize, 889 ConstructorLParen, 890 move(ConstructorArgs), 891 ConstructorRParen, 892 TypeContainsAuto); 893} 894 895ExprResult 896Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal, 897 SourceLocation PlacementLParen, 898 MultiExprArg PlacementArgs, 899 SourceLocation PlacementRParen, 900 SourceRange TypeIdParens, 901 QualType AllocType, 902 TypeSourceInfo *AllocTypeInfo, 903 Expr *ArraySize, 904 SourceLocation ConstructorLParen, 905 MultiExprArg ConstructorArgs, 906 SourceLocation ConstructorRParen, 907 bool TypeMayContainAuto) { 908 SourceRange TypeRange = AllocTypeInfo->getTypeLoc().getSourceRange(); 909 910 // C++0x [decl.spec.auto]p6. Deduce the type which 'auto' stands in for. 911 if (TypeMayContainAuto && AllocType->getContainedAutoType()) { 912 if (ConstructorArgs.size() == 0) 913 return ExprError(Diag(StartLoc, diag::err_auto_new_requires_ctor_arg) 914 << AllocType << TypeRange); 915 if (ConstructorArgs.size() != 1) { 916 Expr *FirstBad = ConstructorArgs.get()[1]; 917 return ExprError(Diag(FirstBad->getSourceRange().getBegin(), 918 diag::err_auto_new_ctor_multiple_expressions) 919 << AllocType << TypeRange); 920 } 921 TypeSourceInfo *DeducedType = 0; 922 if (!DeduceAutoType(AllocTypeInfo, ConstructorArgs.get()[0], DeducedType)) 923 return ExprError(Diag(StartLoc, diag::err_auto_new_deduction_failure) 924 << AllocType 925 << ConstructorArgs.get()[0]->getType() 926 << TypeRange 927 << ConstructorArgs.get()[0]->getSourceRange()); 928 if (!DeducedType) 929 return ExprError(); 930 931 AllocTypeInfo = DeducedType; 932 AllocType = AllocTypeInfo->getType(); 933 } 934 935 // Per C++0x [expr.new]p5, the type being constructed may be a 936 // typedef of an array type. 937 if (!ArraySize) { 938 if (const ConstantArrayType *Array 939 = Context.getAsConstantArrayType(AllocType)) { 940 ArraySize = IntegerLiteral::Create(Context, Array->getSize(), 941 Context.getSizeType(), 942 TypeRange.getEnd()); 943 AllocType = Array->getElementType(); 944 } 945 } 946 947 if (CheckAllocatedType(AllocType, TypeRange.getBegin(), TypeRange)) 948 return ExprError(); 949 950 // In ARC, infer 'retaining' for the allocated 951 if (getLangOptions().ObjCAutoRefCount && 952 AllocType.getObjCLifetime() == Qualifiers::OCL_None && 953 AllocType->isObjCLifetimeType()) { 954 AllocType = Context.getLifetimeQualifiedType(AllocType, 955 AllocType->getObjCARCImplicitLifetime()); 956 } 957 958 QualType ResultType = Context.getPointerType(AllocType); 959 960 // C++ 5.3.4p6: "The expression in a direct-new-declarator shall have integral 961 // or enumeration type with a non-negative value." 962 if (ArraySize && !ArraySize->isTypeDependent()) { 963 964 QualType SizeType = ArraySize->getType(); 965 966 ExprResult ConvertedSize = ConvertToIntegralOrEnumerationType( 967 StartLoc, ArraySize, 968 PDiag(diag::err_array_size_not_integral), 969 PDiag(diag::err_array_size_incomplete_type) 970 << ArraySize->getSourceRange(), 971 PDiag(diag::err_array_size_explicit_conversion), 972 PDiag(diag::note_array_size_conversion), 973 PDiag(diag::err_array_size_ambiguous_conversion), 974 PDiag(diag::note_array_size_conversion), 975 PDiag(getLangOptions().CPlusPlus0x ? 976 diag::warn_cxx98_compat_array_size_conversion : 977 diag::ext_array_size_conversion)); 978 if (ConvertedSize.isInvalid()) 979 return ExprError(); 980 981 ArraySize = ConvertedSize.take(); 982 SizeType = ArraySize->getType(); 983 if (!SizeType->isIntegralOrUnscopedEnumerationType()) 984 return ExprError(); 985 986 // Let's see if this is a constant < 0. If so, we reject it out of hand. 987 // We don't care about special rules, so we tell the machinery it's not 988 // evaluated - it gives us a result in more cases. 989 if (!ArraySize->isValueDependent()) { 990 llvm::APSInt Value; 991 if (ArraySize->isIntegerConstantExpr(Value, Context, 0, false)) { 992 if (Value < llvm::APSInt( 993 llvm::APInt::getNullValue(Value.getBitWidth()), 994 Value.isUnsigned())) 995 return ExprError(Diag(ArraySize->getSourceRange().getBegin(), 996 diag::err_typecheck_negative_array_size) 997 << ArraySize->getSourceRange()); 998 999 if (!AllocType->isDependentType()) { 1000 unsigned ActiveSizeBits 1001 = ConstantArrayType::getNumAddressingBits(Context, AllocType, Value); 1002 if (ActiveSizeBits > ConstantArrayType::getMaxSizeBits(Context)) { 1003 Diag(ArraySize->getSourceRange().getBegin(), 1004 diag::err_array_too_large) 1005 << Value.toString(10) 1006 << ArraySize->getSourceRange(); 1007 return ExprError(); 1008 } 1009 } 1010 } else if (TypeIdParens.isValid()) { 1011 // Can't have dynamic array size when the type-id is in parentheses. 1012 Diag(ArraySize->getLocStart(), diag::ext_new_paren_array_nonconst) 1013 << ArraySize->getSourceRange() 1014 << FixItHint::CreateRemoval(TypeIdParens.getBegin()) 1015 << FixItHint::CreateRemoval(TypeIdParens.getEnd()); 1016 1017 TypeIdParens = SourceRange(); 1018 } 1019 } 1020 1021 // ARC: warn about ABI issues. 1022 if (getLangOptions().ObjCAutoRefCount) { 1023 QualType BaseAllocType = Context.getBaseElementType(AllocType); 1024 if (BaseAllocType.hasStrongOrWeakObjCLifetime()) 1025 Diag(StartLoc, diag::warn_err_new_delete_object_array) 1026 << 0 << BaseAllocType; 1027 } 1028 1029 // Note that we do *not* convert the argument in any way. It can 1030 // be signed, larger than size_t, whatever. 1031 } 1032 1033 FunctionDecl *OperatorNew = 0; 1034 FunctionDecl *OperatorDelete = 0; 1035 Expr **PlaceArgs = (Expr**)PlacementArgs.get(); 1036 unsigned NumPlaceArgs = PlacementArgs.size(); 1037 1038 if (!AllocType->isDependentType() && 1039 !Expr::hasAnyTypeDependentArguments(PlaceArgs, NumPlaceArgs) && 1040 FindAllocationFunctions(StartLoc, 1041 SourceRange(PlacementLParen, PlacementRParen), 1042 UseGlobal, AllocType, ArraySize, PlaceArgs, 1043 NumPlaceArgs, OperatorNew, OperatorDelete)) 1044 return ExprError(); 1045 1046 // If this is an array allocation, compute whether the usual array 1047 // deallocation function for the type has a size_t parameter. 1048 bool UsualArrayDeleteWantsSize = false; 1049 if (ArraySize && !AllocType->isDependentType()) 1050 UsualArrayDeleteWantsSize 1051 = doesUsualArrayDeleteWantSize(*this, StartLoc, AllocType); 1052 1053 SmallVector<Expr *, 8> AllPlaceArgs; 1054 if (OperatorNew) { 1055 // Add default arguments, if any. 1056 const FunctionProtoType *Proto = 1057 OperatorNew->getType()->getAs<FunctionProtoType>(); 1058 VariadicCallType CallType = 1059 Proto->isVariadic() ? VariadicFunction : VariadicDoesNotApply; 1060 1061 if (GatherArgumentsForCall(PlacementLParen, OperatorNew, 1062 Proto, 1, PlaceArgs, NumPlaceArgs, 1063 AllPlaceArgs, CallType)) 1064 return ExprError(); 1065 1066 NumPlaceArgs = AllPlaceArgs.size(); 1067 if (NumPlaceArgs > 0) 1068 PlaceArgs = &AllPlaceArgs[0]; 1069 } 1070 1071 bool Init = ConstructorLParen.isValid(); 1072 // --- Choosing a constructor --- 1073 CXXConstructorDecl *Constructor = 0; 1074 bool HadMultipleCandidates = false; 1075 Expr **ConsArgs = (Expr**)ConstructorArgs.get(); 1076 unsigned NumConsArgs = ConstructorArgs.size(); 1077 ASTOwningVector<Expr*> ConvertedConstructorArgs(*this); 1078 1079 // Array 'new' can't have any initializers. 1080 if (NumConsArgs && (ResultType->isArrayType() || ArraySize)) { 1081 SourceRange InitRange(ConsArgs[0]->getLocStart(), 1082 ConsArgs[NumConsArgs - 1]->getLocEnd()); 1083 1084 Diag(StartLoc, diag::err_new_array_init_args) << InitRange; 1085 return ExprError(); 1086 } 1087 1088 if (!AllocType->isDependentType() && 1089 !Expr::hasAnyTypeDependentArguments(ConsArgs, NumConsArgs)) { 1090 // C++0x [expr.new]p15: 1091 // A new-expression that creates an object of type T initializes that 1092 // object as follows: 1093 InitializationKind Kind 1094 // - If the new-initializer is omitted, the object is default- 1095 // initialized (8.5); if no initialization is performed, 1096 // the object has indeterminate value 1097 = !Init? InitializationKind::CreateDefault(TypeRange.getBegin()) 1098 // - Otherwise, the new-initializer is interpreted according to the 1099 // initialization rules of 8.5 for direct-initialization. 1100 : InitializationKind::CreateDirect(TypeRange.getBegin(), 1101 ConstructorLParen, 1102 ConstructorRParen); 1103 1104 InitializedEntity Entity 1105 = InitializedEntity::InitializeNew(StartLoc, AllocType); 1106 InitializationSequence InitSeq(*this, Entity, Kind, ConsArgs, NumConsArgs); 1107 ExprResult FullInit = InitSeq.Perform(*this, Entity, Kind, 1108 move(ConstructorArgs)); 1109 if (FullInit.isInvalid()) 1110 return ExprError(); 1111 1112 // FullInit is our initializer; walk through it to determine if it's a 1113 // constructor call, which CXXNewExpr handles directly. 1114 if (Expr *FullInitExpr = (Expr *)FullInit.get()) { 1115 if (CXXBindTemporaryExpr *Binder 1116 = dyn_cast<CXXBindTemporaryExpr>(FullInitExpr)) 1117 FullInitExpr = Binder->getSubExpr(); 1118 if (CXXConstructExpr *Construct 1119 = dyn_cast<CXXConstructExpr>(FullInitExpr)) { 1120 Constructor = Construct->getConstructor(); 1121 HadMultipleCandidates = Construct->hadMultipleCandidates(); 1122 for (CXXConstructExpr::arg_iterator A = Construct->arg_begin(), 1123 AEnd = Construct->arg_end(); 1124 A != AEnd; ++A) 1125 ConvertedConstructorArgs.push_back(*A); 1126 } else { 1127 // Take the converted initializer. 1128 ConvertedConstructorArgs.push_back(FullInit.release()); 1129 } 1130 } else { 1131 // No initialization required. 1132 } 1133 1134 // Take the converted arguments and use them for the new expression. 1135 NumConsArgs = ConvertedConstructorArgs.size(); 1136 ConsArgs = (Expr **)ConvertedConstructorArgs.take(); 1137 } 1138 1139 // Mark the new and delete operators as referenced. 1140 if (OperatorNew) 1141 MarkDeclarationReferenced(StartLoc, OperatorNew); 1142 if (OperatorDelete) 1143 MarkDeclarationReferenced(StartLoc, OperatorDelete); 1144 1145 // C++0x [expr.new]p17: 1146 // If the new expression creates an array of objects of class type, 1147 // access and ambiguity control are done for the destructor. 1148 if (ArraySize && Constructor) { 1149 if (CXXDestructorDecl *dtor = LookupDestructor(Constructor->getParent())) { 1150 MarkDeclarationReferenced(StartLoc, dtor); 1151 CheckDestructorAccess(StartLoc, dtor, 1152 PDiag(diag::err_access_dtor) 1153 << Context.getBaseElementType(AllocType)); 1154 } 1155 } 1156 1157 PlacementArgs.release(); 1158 ConstructorArgs.release(); 1159 1160 return Owned(new (Context) CXXNewExpr(Context, UseGlobal, OperatorNew, 1161 PlaceArgs, NumPlaceArgs, TypeIdParens, 1162 ArraySize, Constructor, Init, 1163 ConsArgs, NumConsArgs, 1164 HadMultipleCandidates, 1165 OperatorDelete, 1166 UsualArrayDeleteWantsSize, 1167 ResultType, AllocTypeInfo, 1168 StartLoc, 1169 Init ? ConstructorRParen : 1170 TypeRange.getEnd(), 1171 ConstructorLParen, ConstructorRParen)); 1172} 1173 1174/// CheckAllocatedType - Checks that a type is suitable as the allocated type 1175/// in a new-expression. 1176/// dimension off and stores the size expression in ArraySize. 1177bool Sema::CheckAllocatedType(QualType AllocType, SourceLocation Loc, 1178 SourceRange R) { 1179 // C++ 5.3.4p1: "[The] type shall be a complete object type, but not an 1180 // abstract class type or array thereof. 1181 if (AllocType->isFunctionType()) 1182 return Diag(Loc, diag::err_bad_new_type) 1183 << AllocType << 0 << R; 1184 else if (AllocType->isReferenceType()) 1185 return Diag(Loc, diag::err_bad_new_type) 1186 << AllocType << 1 << R; 1187 else if (!AllocType->isDependentType() && 1188 RequireCompleteType(Loc, AllocType, 1189 PDiag(diag::err_new_incomplete_type) 1190 << R)) 1191 return true; 1192 else if (RequireNonAbstractType(Loc, AllocType, 1193 diag::err_allocation_of_abstract_type)) 1194 return true; 1195 else if (AllocType->isVariablyModifiedType()) 1196 return Diag(Loc, diag::err_variably_modified_new_type) 1197 << AllocType; 1198 else if (unsigned AddressSpace = AllocType.getAddressSpace()) 1199 return Diag(Loc, diag::err_address_space_qualified_new) 1200 << AllocType.getUnqualifiedType() << AddressSpace; 1201 else if (getLangOptions().ObjCAutoRefCount) { 1202 if (const ArrayType *AT = Context.getAsArrayType(AllocType)) { 1203 QualType BaseAllocType = Context.getBaseElementType(AT); 1204 if (BaseAllocType.getObjCLifetime() == Qualifiers::OCL_None && 1205 BaseAllocType->isObjCLifetimeType()) 1206 return Diag(Loc, diag::err_arc_new_array_without_ownership) 1207 << BaseAllocType; 1208 } 1209 } 1210 1211 return false; 1212} 1213 1214/// \brief Determine whether the given function is a non-placement 1215/// deallocation function. 1216static bool isNonPlacementDeallocationFunction(FunctionDecl *FD) { 1217 if (FD->isInvalidDecl()) 1218 return false; 1219 1220 if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FD)) 1221 return Method->isUsualDeallocationFunction(); 1222 1223 return ((FD->getOverloadedOperator() == OO_Delete || 1224 FD->getOverloadedOperator() == OO_Array_Delete) && 1225 FD->getNumParams() == 1); 1226} 1227 1228/// FindAllocationFunctions - Finds the overloads of operator new and delete 1229/// that are appropriate for the allocation. 1230bool Sema::FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range, 1231 bool UseGlobal, QualType AllocType, 1232 bool IsArray, Expr **PlaceArgs, 1233 unsigned NumPlaceArgs, 1234 FunctionDecl *&OperatorNew, 1235 FunctionDecl *&OperatorDelete) { 1236 // --- Choosing an allocation function --- 1237 // C++ 5.3.4p8 - 14 & 18 1238 // 1) If UseGlobal is true, only look in the global scope. Else, also look 1239 // in the scope of the allocated class. 1240 // 2) If an array size is given, look for operator new[], else look for 1241 // operator new. 1242 // 3) The first argument is always size_t. Append the arguments from the 1243 // placement form. 1244 1245 SmallVector<Expr*, 8> AllocArgs(1 + NumPlaceArgs); 1246 // We don't care about the actual value of this argument. 1247 // FIXME: Should the Sema create the expression and embed it in the syntax 1248 // tree? Or should the consumer just recalculate the value? 1249 IntegerLiteral Size(Context, llvm::APInt::getNullValue( 1250 Context.getTargetInfo().getPointerWidth(0)), 1251 Context.getSizeType(), 1252 SourceLocation()); 1253 AllocArgs[0] = &Size; 1254 std::copy(PlaceArgs, PlaceArgs + NumPlaceArgs, AllocArgs.begin() + 1); 1255 1256 // C++ [expr.new]p8: 1257 // If the allocated type is a non-array type, the allocation 1258 // function's name is operator new and the deallocation function's 1259 // name is operator delete. If the allocated type is an array 1260 // type, the allocation function's name is operator new[] and the 1261 // deallocation function's name is operator delete[]. 1262 DeclarationName NewName = Context.DeclarationNames.getCXXOperatorName( 1263 IsArray ? OO_Array_New : OO_New); 1264 DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName( 1265 IsArray ? OO_Array_Delete : OO_Delete); 1266 1267 QualType AllocElemType = Context.getBaseElementType(AllocType); 1268 1269 if (AllocElemType->isRecordType() && !UseGlobal) { 1270 CXXRecordDecl *Record 1271 = cast<CXXRecordDecl>(AllocElemType->getAs<RecordType>()->getDecl()); 1272 if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0], 1273 AllocArgs.size(), Record, /*AllowMissing=*/true, 1274 OperatorNew)) 1275 return true; 1276 } 1277 if (!OperatorNew) { 1278 // Didn't find a member overload. Look for a global one. 1279 DeclareGlobalNewDelete(); 1280 DeclContext *TUDecl = Context.getTranslationUnitDecl(); 1281 if (FindAllocationOverload(StartLoc, Range, NewName, &AllocArgs[0], 1282 AllocArgs.size(), TUDecl, /*AllowMissing=*/false, 1283 OperatorNew)) 1284 return true; 1285 } 1286 1287 // We don't need an operator delete if we're running under 1288 // -fno-exceptions. 1289 if (!getLangOptions().Exceptions) { 1290 OperatorDelete = 0; 1291 return false; 1292 } 1293 1294 // FindAllocationOverload can change the passed in arguments, so we need to 1295 // copy them back. 1296 if (NumPlaceArgs > 0) 1297 std::copy(&AllocArgs[1], AllocArgs.end(), PlaceArgs); 1298 1299 // C++ [expr.new]p19: 1300 // 1301 // If the new-expression begins with a unary :: operator, the 1302 // deallocation function's name is looked up in the global 1303 // scope. Otherwise, if the allocated type is a class type T or an 1304 // array thereof, the deallocation function's name is looked up in 1305 // the scope of T. If this lookup fails to find the name, or if 1306 // the allocated type is not a class type or array thereof, the 1307 // deallocation function's name is looked up in the global scope. 1308 LookupResult FoundDelete(*this, DeleteName, StartLoc, LookupOrdinaryName); 1309 if (AllocElemType->isRecordType() && !UseGlobal) { 1310 CXXRecordDecl *RD 1311 = cast<CXXRecordDecl>(AllocElemType->getAs<RecordType>()->getDecl()); 1312 LookupQualifiedName(FoundDelete, RD); 1313 } 1314 if (FoundDelete.isAmbiguous()) 1315 return true; // FIXME: clean up expressions? 1316 1317 if (FoundDelete.empty()) { 1318 DeclareGlobalNewDelete(); 1319 LookupQualifiedName(FoundDelete, Context.getTranslationUnitDecl()); 1320 } 1321 1322 FoundDelete.suppressDiagnostics(); 1323 1324 SmallVector<std::pair<DeclAccessPair,FunctionDecl*>, 2> Matches; 1325 1326 // Whether we're looking for a placement operator delete is dictated 1327 // by whether we selected a placement operator new, not by whether 1328 // we had explicit placement arguments. This matters for things like 1329 // struct A { void *operator new(size_t, int = 0); ... }; 1330 // A *a = new A() 1331 bool isPlacementNew = (NumPlaceArgs > 0 || OperatorNew->param_size() != 1); 1332 1333 if (isPlacementNew) { 1334 // C++ [expr.new]p20: 1335 // A declaration of a placement deallocation function matches the 1336 // declaration of a placement allocation function if it has the 1337 // same number of parameters and, after parameter transformations 1338 // (8.3.5), all parameter types except the first are 1339 // identical. [...] 1340 // 1341 // To perform this comparison, we compute the function type that 1342 // the deallocation function should have, and use that type both 1343 // for template argument deduction and for comparison purposes. 1344 // 1345 // FIXME: this comparison should ignore CC and the like. 1346 QualType ExpectedFunctionType; 1347 { 1348 const FunctionProtoType *Proto 1349 = OperatorNew->getType()->getAs<FunctionProtoType>(); 1350 1351 SmallVector<QualType, 4> ArgTypes; 1352 ArgTypes.push_back(Context.VoidPtrTy); 1353 for (unsigned I = 1, N = Proto->getNumArgs(); I < N; ++I) 1354 ArgTypes.push_back(Proto->getArgType(I)); 1355 1356 FunctionProtoType::ExtProtoInfo EPI; 1357 EPI.Variadic = Proto->isVariadic(); 1358 1359 ExpectedFunctionType 1360 = Context.getFunctionType(Context.VoidTy, ArgTypes.data(), 1361 ArgTypes.size(), EPI); 1362 } 1363 1364 for (LookupResult::iterator D = FoundDelete.begin(), 1365 DEnd = FoundDelete.end(); 1366 D != DEnd; ++D) { 1367 FunctionDecl *Fn = 0; 1368 if (FunctionTemplateDecl *FnTmpl 1369 = dyn_cast<FunctionTemplateDecl>((*D)->getUnderlyingDecl())) { 1370 // Perform template argument deduction to try to match the 1371 // expected function type. 1372 TemplateDeductionInfo Info(Context, StartLoc); 1373 if (DeduceTemplateArguments(FnTmpl, 0, ExpectedFunctionType, Fn, Info)) 1374 continue; 1375 } else 1376 Fn = cast<FunctionDecl>((*D)->getUnderlyingDecl()); 1377 1378 if (Context.hasSameType(Fn->getType(), ExpectedFunctionType)) 1379 Matches.push_back(std::make_pair(D.getPair(), Fn)); 1380 } 1381 } else { 1382 // C++ [expr.new]p20: 1383 // [...] Any non-placement deallocation function matches a 1384 // non-placement allocation function. [...] 1385 for (LookupResult::iterator D = FoundDelete.begin(), 1386 DEnd = FoundDelete.end(); 1387 D != DEnd; ++D) { 1388 if (FunctionDecl *Fn = dyn_cast<FunctionDecl>((*D)->getUnderlyingDecl())) 1389 if (isNonPlacementDeallocationFunction(Fn)) 1390 Matches.push_back(std::make_pair(D.getPair(), Fn)); 1391 } 1392 } 1393 1394 // C++ [expr.new]p20: 1395 // [...] If the lookup finds a single matching deallocation 1396 // function, that function will be called; otherwise, no 1397 // deallocation function will be called. 1398 if (Matches.size() == 1) { 1399 OperatorDelete = Matches[0].second; 1400 1401 // C++0x [expr.new]p20: 1402 // If the lookup finds the two-parameter form of a usual 1403 // deallocation function (3.7.4.2) and that function, considered 1404 // as a placement deallocation function, would have been 1405 // selected as a match for the allocation function, the program 1406 // is ill-formed. 1407 if (NumPlaceArgs && getLangOptions().CPlusPlus0x && 1408 isNonPlacementDeallocationFunction(OperatorDelete)) { 1409 Diag(StartLoc, diag::err_placement_new_non_placement_delete) 1410 << SourceRange(PlaceArgs[0]->getLocStart(), 1411 PlaceArgs[NumPlaceArgs - 1]->getLocEnd()); 1412 Diag(OperatorDelete->getLocation(), diag::note_previous_decl) 1413 << DeleteName; 1414 } else { 1415 CheckAllocationAccess(StartLoc, Range, FoundDelete.getNamingClass(), 1416 Matches[0].first); 1417 } 1418 } 1419 1420 return false; 1421} 1422 1423/// FindAllocationOverload - Find an fitting overload for the allocation 1424/// function in the specified scope. 1425bool Sema::FindAllocationOverload(SourceLocation StartLoc, SourceRange Range, 1426 DeclarationName Name, Expr** Args, 1427 unsigned NumArgs, DeclContext *Ctx, 1428 bool AllowMissing, FunctionDecl *&Operator, 1429 bool Diagnose) { 1430 LookupResult R(*this, Name, StartLoc, LookupOrdinaryName); 1431 LookupQualifiedName(R, Ctx); 1432 if (R.empty()) { 1433 if (AllowMissing || !Diagnose) 1434 return false; 1435 return Diag(StartLoc, diag::err_ovl_no_viable_function_in_call) 1436 << Name << Range; 1437 } 1438 1439 if (R.isAmbiguous()) 1440 return true; 1441 1442 R.suppressDiagnostics(); 1443 1444 OverloadCandidateSet Candidates(StartLoc); 1445 for (LookupResult::iterator Alloc = R.begin(), AllocEnd = R.end(); 1446 Alloc != AllocEnd; ++Alloc) { 1447 // Even member operator new/delete are implicitly treated as 1448 // static, so don't use AddMemberCandidate. 1449 NamedDecl *D = (*Alloc)->getUnderlyingDecl(); 1450 1451 if (FunctionTemplateDecl *FnTemplate = dyn_cast<FunctionTemplateDecl>(D)) { 1452 AddTemplateOverloadCandidate(FnTemplate, Alloc.getPair(), 1453 /*ExplicitTemplateArgs=*/0, Args, NumArgs, 1454 Candidates, 1455 /*SuppressUserConversions=*/false); 1456 continue; 1457 } 1458 1459 FunctionDecl *Fn = cast<FunctionDecl>(D); 1460 AddOverloadCandidate(Fn, Alloc.getPair(), Args, NumArgs, Candidates, 1461 /*SuppressUserConversions=*/false); 1462 } 1463 1464 // Do the resolution. 1465 OverloadCandidateSet::iterator Best; 1466 switch (Candidates.BestViableFunction(*this, StartLoc, Best)) { 1467 case OR_Success: { 1468 // Got one! 1469 FunctionDecl *FnDecl = Best->Function; 1470 MarkDeclarationReferenced(StartLoc, FnDecl); 1471 // The first argument is size_t, and the first parameter must be size_t, 1472 // too. This is checked on declaration and can be assumed. (It can't be 1473 // asserted on, though, since invalid decls are left in there.) 1474 // Watch out for variadic allocator function. 1475 unsigned NumArgsInFnDecl = FnDecl->getNumParams(); 1476 for (unsigned i = 0; (i < NumArgs && i < NumArgsInFnDecl); ++i) { 1477 InitializedEntity Entity = InitializedEntity::InitializeParameter(Context, 1478 FnDecl->getParamDecl(i)); 1479 1480 if (!Diagnose && !CanPerformCopyInitialization(Entity, Owned(Args[i]))) 1481 return true; 1482 1483 ExprResult Result 1484 = PerformCopyInitialization(Entity, SourceLocation(), Owned(Args[i])); 1485 if (Result.isInvalid()) 1486 return true; 1487 1488 Args[i] = Result.takeAs<Expr>(); 1489 } 1490 Operator = FnDecl; 1491 CheckAllocationAccess(StartLoc, Range, R.getNamingClass(), Best->FoundDecl, 1492 Diagnose); 1493 return false; 1494 } 1495 1496 case OR_No_Viable_Function: 1497 if (Diagnose) { 1498 Diag(StartLoc, diag::err_ovl_no_viable_function_in_call) 1499 << Name << Range; 1500 Candidates.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 1501 } 1502 return true; 1503 1504 case OR_Ambiguous: 1505 if (Diagnose) { 1506 Diag(StartLoc, diag::err_ovl_ambiguous_call) 1507 << Name << Range; 1508 Candidates.NoteCandidates(*this, OCD_ViableCandidates, Args, NumArgs); 1509 } 1510 return true; 1511 1512 case OR_Deleted: { 1513 if (Diagnose) { 1514 Diag(StartLoc, diag::err_ovl_deleted_call) 1515 << Best->Function->isDeleted() 1516 << Name 1517 << getDeletedOrUnavailableSuffix(Best->Function) 1518 << Range; 1519 Candidates.NoteCandidates(*this, OCD_AllCandidates, Args, NumArgs); 1520 } 1521 return true; 1522 } 1523 } 1524 llvm_unreachable("Unreachable, bad result from BestViableFunction"); 1525} 1526 1527 1528/// DeclareGlobalNewDelete - Declare the global forms of operator new and 1529/// delete. These are: 1530/// @code 1531/// // C++03: 1532/// void* operator new(std::size_t) throw(std::bad_alloc); 1533/// void* operator new[](std::size_t) throw(std::bad_alloc); 1534/// void operator delete(void *) throw(); 1535/// void operator delete[](void *) throw(); 1536/// // C++0x: 1537/// void* operator new(std::size_t); 1538/// void* operator new[](std::size_t); 1539/// void operator delete(void *); 1540/// void operator delete[](void *); 1541/// @endcode 1542/// C++0x operator delete is implicitly noexcept. 1543/// Note that the placement and nothrow forms of new are *not* implicitly 1544/// declared. Their use requires including \<new\>. 1545void Sema::DeclareGlobalNewDelete() { 1546 if (GlobalNewDeleteDeclared) 1547 return; 1548 1549 // C++ [basic.std.dynamic]p2: 1550 // [...] The following allocation and deallocation functions (18.4) are 1551 // implicitly declared in global scope in each translation unit of a 1552 // program 1553 // 1554 // C++03: 1555 // void* operator new(std::size_t) throw(std::bad_alloc); 1556 // void* operator new[](std::size_t) throw(std::bad_alloc); 1557 // void operator delete(void*) throw(); 1558 // void operator delete[](void*) throw(); 1559 // C++0x: 1560 // void* operator new(std::size_t); 1561 // void* operator new[](std::size_t); 1562 // void operator delete(void*); 1563 // void operator delete[](void*); 1564 // 1565 // These implicit declarations introduce only the function names operator 1566 // new, operator new[], operator delete, operator delete[]. 1567 // 1568 // Here, we need to refer to std::bad_alloc, so we will implicitly declare 1569 // "std" or "bad_alloc" as necessary to form the exception specification. 1570 // However, we do not make these implicit declarations visible to name 1571 // lookup. 1572 // Note that the C++0x versions of operator delete are deallocation functions, 1573 // and thus are implicitly noexcept. 1574 if (!StdBadAlloc && !getLangOptions().CPlusPlus0x) { 1575 // The "std::bad_alloc" class has not yet been declared, so build it 1576 // implicitly. 1577 StdBadAlloc = CXXRecordDecl::Create(Context, TTK_Class, 1578 getOrCreateStdNamespace(), 1579 SourceLocation(), SourceLocation(), 1580 &PP.getIdentifierTable().get("bad_alloc"), 1581 0); 1582 getStdBadAlloc()->setImplicit(true); 1583 } 1584 1585 GlobalNewDeleteDeclared = true; 1586 1587 QualType VoidPtr = Context.getPointerType(Context.VoidTy); 1588 QualType SizeT = Context.getSizeType(); 1589 bool AssumeSaneOperatorNew = getLangOptions().AssumeSaneOperatorNew; 1590 1591 DeclareGlobalAllocationFunction( 1592 Context.DeclarationNames.getCXXOperatorName(OO_New), 1593 VoidPtr, SizeT, AssumeSaneOperatorNew); 1594 DeclareGlobalAllocationFunction( 1595 Context.DeclarationNames.getCXXOperatorName(OO_Array_New), 1596 VoidPtr, SizeT, AssumeSaneOperatorNew); 1597 DeclareGlobalAllocationFunction( 1598 Context.DeclarationNames.getCXXOperatorName(OO_Delete), 1599 Context.VoidTy, VoidPtr); 1600 DeclareGlobalAllocationFunction( 1601 Context.DeclarationNames.getCXXOperatorName(OO_Array_Delete), 1602 Context.VoidTy, VoidPtr); 1603} 1604 1605/// DeclareGlobalAllocationFunction - Declares a single implicit global 1606/// allocation function if it doesn't already exist. 1607void Sema::DeclareGlobalAllocationFunction(DeclarationName Name, 1608 QualType Return, QualType Argument, 1609 bool AddMallocAttr) { 1610 DeclContext *GlobalCtx = Context.getTranslationUnitDecl(); 1611 1612 // Check if this function is already declared. 1613 { 1614 DeclContext::lookup_iterator Alloc, AllocEnd; 1615 for (llvm::tie(Alloc, AllocEnd) = GlobalCtx->lookup(Name); 1616 Alloc != AllocEnd; ++Alloc) { 1617 // Only look at non-template functions, as it is the predefined, 1618 // non-templated allocation function we are trying to declare here. 1619 if (FunctionDecl *Func = dyn_cast<FunctionDecl>(*Alloc)) { 1620 QualType InitialParamType = 1621 Context.getCanonicalType( 1622 Func->getParamDecl(0)->getType().getUnqualifiedType()); 1623 // FIXME: Do we need to check for default arguments here? 1624 if (Func->getNumParams() == 1 && InitialParamType == Argument) { 1625 if(AddMallocAttr && !Func->hasAttr<MallocAttr>()) 1626 Func->addAttr(::new (Context) MallocAttr(SourceLocation(), Context)); 1627 return; 1628 } 1629 } 1630 } 1631 } 1632 1633 QualType BadAllocType; 1634 bool HasBadAllocExceptionSpec 1635 = (Name.getCXXOverloadedOperator() == OO_New || 1636 Name.getCXXOverloadedOperator() == OO_Array_New); 1637 if (HasBadAllocExceptionSpec && !getLangOptions().CPlusPlus0x) { 1638 assert(StdBadAlloc && "Must have std::bad_alloc declared"); 1639 BadAllocType = Context.getTypeDeclType(getStdBadAlloc()); 1640 } 1641 1642 FunctionProtoType::ExtProtoInfo EPI; 1643 if (HasBadAllocExceptionSpec) { 1644 if (!getLangOptions().CPlusPlus0x) { 1645 EPI.ExceptionSpecType = EST_Dynamic; 1646 EPI.NumExceptions = 1; 1647 EPI.Exceptions = &BadAllocType; 1648 } 1649 } else { 1650 EPI.ExceptionSpecType = getLangOptions().CPlusPlus0x ? 1651 EST_BasicNoexcept : EST_DynamicNone; 1652 } 1653 1654 QualType FnType = Context.getFunctionType(Return, &Argument, 1, EPI); 1655 FunctionDecl *Alloc = 1656 FunctionDecl::Create(Context, GlobalCtx, SourceLocation(), 1657 SourceLocation(), Name, 1658 FnType, /*TInfo=*/0, SC_None, 1659 SC_None, false, true); 1660 Alloc->setImplicit(); 1661 1662 if (AddMallocAttr) 1663 Alloc->addAttr(::new (Context) MallocAttr(SourceLocation(), Context)); 1664 1665 ParmVarDecl *Param = ParmVarDecl::Create(Context, Alloc, SourceLocation(), 1666 SourceLocation(), 0, 1667 Argument, /*TInfo=*/0, 1668 SC_None, SC_None, 0); 1669 Alloc->setParams(Param); 1670 1671 // FIXME: Also add this declaration to the IdentifierResolver, but 1672 // make sure it is at the end of the chain to coincide with the 1673 // global scope. 1674 Context.getTranslationUnitDecl()->addDecl(Alloc); 1675} 1676 1677bool Sema::FindDeallocationFunction(SourceLocation StartLoc, CXXRecordDecl *RD, 1678 DeclarationName Name, 1679 FunctionDecl* &Operator, bool Diagnose) { 1680 LookupResult Found(*this, Name, StartLoc, LookupOrdinaryName); 1681 // Try to find operator delete/operator delete[] in class scope. 1682 LookupQualifiedName(Found, RD); 1683 1684 if (Found.isAmbiguous()) 1685 return true; 1686 1687 Found.suppressDiagnostics(); 1688 1689 SmallVector<DeclAccessPair,4> Matches; 1690 for (LookupResult::iterator F = Found.begin(), FEnd = Found.end(); 1691 F != FEnd; ++F) { 1692 NamedDecl *ND = (*F)->getUnderlyingDecl(); 1693 1694 // Ignore template operator delete members from the check for a usual 1695 // deallocation function. 1696 if (isa<FunctionTemplateDecl>(ND)) 1697 continue; 1698 1699 if (cast<CXXMethodDecl>(ND)->isUsualDeallocationFunction()) 1700 Matches.push_back(F.getPair()); 1701 } 1702 1703 // There's exactly one suitable operator; pick it. 1704 if (Matches.size() == 1) { 1705 Operator = cast<CXXMethodDecl>(Matches[0]->getUnderlyingDecl()); 1706 1707 if (Operator->isDeleted()) { 1708 if (Diagnose) { 1709 Diag(StartLoc, diag::err_deleted_function_use); 1710 Diag(Operator->getLocation(), diag::note_unavailable_here) << true; 1711 } 1712 return true; 1713 } 1714 1715 CheckAllocationAccess(StartLoc, SourceRange(), Found.getNamingClass(), 1716 Matches[0], Diagnose); 1717 return false; 1718 1719 // We found multiple suitable operators; complain about the ambiguity. 1720 } else if (!Matches.empty()) { 1721 if (Diagnose) { 1722 Diag(StartLoc, diag::err_ambiguous_suitable_delete_member_function_found) 1723 << Name << RD; 1724 1725 for (SmallVectorImpl<DeclAccessPair>::iterator 1726 F = Matches.begin(), FEnd = Matches.end(); F != FEnd; ++F) 1727 Diag((*F)->getUnderlyingDecl()->getLocation(), 1728 diag::note_member_declared_here) << Name; 1729 } 1730 return true; 1731 } 1732 1733 // We did find operator delete/operator delete[] declarations, but 1734 // none of them were suitable. 1735 if (!Found.empty()) { 1736 if (Diagnose) { 1737 Diag(StartLoc, diag::err_no_suitable_delete_member_function_found) 1738 << Name << RD; 1739 1740 for (LookupResult::iterator F = Found.begin(), FEnd = Found.end(); 1741 F != FEnd; ++F) 1742 Diag((*F)->getUnderlyingDecl()->getLocation(), 1743 diag::note_member_declared_here) << Name; 1744 } 1745 return true; 1746 } 1747 1748 // Look for a global declaration. 1749 DeclareGlobalNewDelete(); 1750 DeclContext *TUDecl = Context.getTranslationUnitDecl(); 1751 1752 CXXNullPtrLiteralExpr Null(Context.VoidPtrTy, SourceLocation()); 1753 Expr* DeallocArgs[1]; 1754 DeallocArgs[0] = &Null; 1755 if (FindAllocationOverload(StartLoc, SourceRange(), Name, 1756 DeallocArgs, 1, TUDecl, !Diagnose, 1757 Operator, Diagnose)) 1758 return true; 1759 1760 assert(Operator && "Did not find a deallocation function!"); 1761 return false; 1762} 1763 1764/// ActOnCXXDelete - Parsed a C++ 'delete' expression (C++ 5.3.5), as in: 1765/// @code ::delete ptr; @endcode 1766/// or 1767/// @code delete [] ptr; @endcode 1768ExprResult 1769Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, 1770 bool ArrayForm, Expr *ExE) { 1771 // C++ [expr.delete]p1: 1772 // The operand shall have a pointer type, or a class type having a single 1773 // conversion function to a pointer type. The result has type void. 1774 // 1775 // DR599 amends "pointer type" to "pointer to object type" in both cases. 1776 1777 ExprResult Ex = Owned(ExE); 1778 FunctionDecl *OperatorDelete = 0; 1779 bool ArrayFormAsWritten = ArrayForm; 1780 bool UsualArrayDeleteWantsSize = false; 1781 1782 if (!Ex.get()->isTypeDependent()) { 1783 QualType Type = Ex.get()->getType(); 1784 1785 if (const RecordType *Record = Type->getAs<RecordType>()) { 1786 if (RequireCompleteType(StartLoc, Type, 1787 PDiag(diag::err_delete_incomplete_class_type))) 1788 return ExprError(); 1789 1790 SmallVector<CXXConversionDecl*, 4> ObjectPtrConversions; 1791 1792 CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl()); 1793 const UnresolvedSetImpl *Conversions = RD->getVisibleConversionFunctions(); 1794 for (UnresolvedSetImpl::iterator I = Conversions->begin(), 1795 E = Conversions->end(); I != E; ++I) { 1796 NamedDecl *D = I.getDecl(); 1797 if (isa<UsingShadowDecl>(D)) 1798 D = cast<UsingShadowDecl>(D)->getTargetDecl(); 1799 1800 // Skip over templated conversion functions; they aren't considered. 1801 if (isa<FunctionTemplateDecl>(D)) 1802 continue; 1803 1804 CXXConversionDecl *Conv = cast<CXXConversionDecl>(D); 1805 1806 QualType ConvType = Conv->getConversionType().getNonReferenceType(); 1807 if (const PointerType *ConvPtrType = ConvType->getAs<PointerType>()) 1808 if (ConvPtrType->getPointeeType()->isIncompleteOrObjectType()) 1809 ObjectPtrConversions.push_back(Conv); 1810 } 1811 if (ObjectPtrConversions.size() == 1) { 1812 // We have a single conversion to a pointer-to-object type. Perform 1813 // that conversion. 1814 // TODO: don't redo the conversion calculation. 1815 ExprResult Res = 1816 PerformImplicitConversion(Ex.get(), 1817 ObjectPtrConversions.front()->getConversionType(), 1818 AA_Converting); 1819 if (Res.isUsable()) { 1820 Ex = move(Res); 1821 Type = Ex.get()->getType(); 1822 } 1823 } 1824 else if (ObjectPtrConversions.size() > 1) { 1825 Diag(StartLoc, diag::err_ambiguous_delete_operand) 1826 << Type << Ex.get()->getSourceRange(); 1827 for (unsigned i= 0; i < ObjectPtrConversions.size(); i++) 1828 NoteOverloadCandidate(ObjectPtrConversions[i]); 1829 return ExprError(); 1830 } 1831 } 1832 1833 if (!Type->isPointerType()) 1834 return ExprError(Diag(StartLoc, diag::err_delete_operand) 1835 << Type << Ex.get()->getSourceRange()); 1836 1837 QualType Pointee = Type->getAs<PointerType>()->getPointeeType(); 1838 QualType PointeeElem = Context.getBaseElementType(Pointee); 1839 1840 if (unsigned AddressSpace = Pointee.getAddressSpace()) 1841 return Diag(Ex.get()->getLocStart(), 1842 diag::err_address_space_qualified_delete) 1843 << Pointee.getUnqualifiedType() << AddressSpace; 1844 1845 CXXRecordDecl *PointeeRD = 0; 1846 if (Pointee->isVoidType() && !isSFINAEContext()) { 1847 // The C++ standard bans deleting a pointer to a non-object type, which 1848 // effectively bans deletion of "void*". However, most compilers support 1849 // this, so we treat it as a warning unless we're in a SFINAE context. 1850 Diag(StartLoc, diag::ext_delete_void_ptr_operand) 1851 << Type << Ex.get()->getSourceRange(); 1852 } else if (Pointee->isFunctionType() || Pointee->isVoidType()) { 1853 return ExprError(Diag(StartLoc, diag::err_delete_operand) 1854 << Type << Ex.get()->getSourceRange()); 1855 } else if (!Pointee->isDependentType()) { 1856 if (!RequireCompleteType(StartLoc, Pointee, 1857 PDiag(diag::warn_delete_incomplete) 1858 << Ex.get()->getSourceRange())) { 1859 if (const RecordType *RT = PointeeElem->getAs<RecordType>()) 1860 PointeeRD = cast<CXXRecordDecl>(RT->getDecl()); 1861 } 1862 } 1863 1864 // C++ [expr.delete]p2: 1865 // [Note: a pointer to a const type can be the operand of a 1866 // delete-expression; it is not necessary to cast away the constness 1867 // (5.2.11) of the pointer expression before it is used as the operand 1868 // of the delete-expression. ] 1869 if (!Context.hasSameType(Ex.get()->getType(), Context.VoidPtrTy)) 1870 Ex = Owned(ImplicitCastExpr::Create(Context, Context.VoidPtrTy, CK_NoOp, 1871 Ex.take(), 0, VK_RValue)); 1872 1873 if (Pointee->isArrayType() && !ArrayForm) { 1874 Diag(StartLoc, diag::warn_delete_array_type) 1875 << Type << Ex.get()->getSourceRange() 1876 << FixItHint::CreateInsertion(PP.getLocForEndOfToken(StartLoc), "[]"); 1877 ArrayForm = true; 1878 } 1879 1880 DeclarationName DeleteName = Context.DeclarationNames.getCXXOperatorName( 1881 ArrayForm ? OO_Array_Delete : OO_Delete); 1882 1883 if (PointeeRD) { 1884 if (!UseGlobal && 1885 FindDeallocationFunction(StartLoc, PointeeRD, DeleteName, 1886 OperatorDelete)) 1887 return ExprError(); 1888 1889 // If we're allocating an array of records, check whether the 1890 // usual operator delete[] has a size_t parameter. 1891 if (ArrayForm) { 1892 // If the user specifically asked to use the global allocator, 1893 // we'll need to do the lookup into the class. 1894 if (UseGlobal) 1895 UsualArrayDeleteWantsSize = 1896 doesUsualArrayDeleteWantSize(*this, StartLoc, PointeeElem); 1897 1898 // Otherwise, the usual operator delete[] should be the 1899 // function we just found. 1900 else if (isa<CXXMethodDecl>(OperatorDelete)) 1901 UsualArrayDeleteWantsSize = (OperatorDelete->getNumParams() == 2); 1902 } 1903 1904 if (!PointeeRD->hasTrivialDestructor()) 1905 if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) { 1906 MarkDeclarationReferenced(StartLoc, 1907 const_cast<CXXDestructorDecl*>(Dtor)); 1908 DiagnoseUseOfDecl(Dtor, StartLoc); 1909 } 1910 1911 // C++ [expr.delete]p3: 1912 // In the first alternative (delete object), if the static type of the 1913 // object to be deleted is different from its dynamic type, the static 1914 // type shall be a base class of the dynamic type of the object to be 1915 // deleted and the static type shall have a virtual destructor or the 1916 // behavior is undefined. 1917 // 1918 // Note: a final class cannot be derived from, no issue there 1919 if (PointeeRD->isPolymorphic() && !PointeeRD->hasAttr<FinalAttr>()) { 1920 CXXDestructorDecl *dtor = PointeeRD->getDestructor(); 1921 if (dtor && !dtor->isVirtual()) { 1922 if (PointeeRD->isAbstract()) { 1923 // If the class is abstract, we warn by default, because we're 1924 // sure the code has undefined behavior. 1925 Diag(StartLoc, diag::warn_delete_abstract_non_virtual_dtor) 1926 << PointeeElem; 1927 } else if (!ArrayForm) { 1928 // Otherwise, if this is not an array delete, it's a bit suspect, 1929 // but not necessarily wrong. 1930 Diag(StartLoc, diag::warn_delete_non_virtual_dtor) << PointeeElem; 1931 } 1932 } 1933 } 1934 1935 } else if (getLangOptions().ObjCAutoRefCount && 1936 PointeeElem->isObjCLifetimeType() && 1937 (PointeeElem.getObjCLifetime() == Qualifiers::OCL_Strong || 1938 PointeeElem.getObjCLifetime() == Qualifiers::OCL_Weak) && 1939 ArrayForm) { 1940 Diag(StartLoc, diag::warn_err_new_delete_object_array) 1941 << 1 << PointeeElem; 1942 } 1943 1944 if (!OperatorDelete) { 1945 // Look for a global declaration. 1946 DeclareGlobalNewDelete(); 1947 DeclContext *TUDecl = Context.getTranslationUnitDecl(); 1948 Expr *Arg = Ex.get(); 1949 if (FindAllocationOverload(StartLoc, SourceRange(), DeleteName, 1950 &Arg, 1, TUDecl, /*AllowMissing=*/false, 1951 OperatorDelete)) 1952 return ExprError(); 1953 } 1954 1955 MarkDeclarationReferenced(StartLoc, OperatorDelete); 1956 1957 // Check access and ambiguity of operator delete and destructor. 1958 if (PointeeRD) { 1959 if (CXXDestructorDecl *Dtor = LookupDestructor(PointeeRD)) { 1960 CheckDestructorAccess(Ex.get()->getExprLoc(), Dtor, 1961 PDiag(diag::err_access_dtor) << PointeeElem); 1962 } 1963 } 1964 1965 } 1966 1967 return Owned(new (Context) CXXDeleteExpr(Context.VoidTy, UseGlobal, ArrayForm, 1968 ArrayFormAsWritten, 1969 UsualArrayDeleteWantsSize, 1970 OperatorDelete, Ex.take(), StartLoc)); 1971} 1972 1973/// \brief Check the use of the given variable as a C++ condition in an if, 1974/// while, do-while, or switch statement. 1975ExprResult Sema::CheckConditionVariable(VarDecl *ConditionVar, 1976 SourceLocation StmtLoc, 1977 bool ConvertToBoolean) { 1978 QualType T = ConditionVar->getType(); 1979 1980 // C++ [stmt.select]p2: 1981 // The declarator shall not specify a function or an array. 1982 if (T->isFunctionType()) 1983 return ExprError(Diag(ConditionVar->getLocation(), 1984 diag::err_invalid_use_of_function_type) 1985 << ConditionVar->getSourceRange()); 1986 else if (T->isArrayType()) 1987 return ExprError(Diag(ConditionVar->getLocation(), 1988 diag::err_invalid_use_of_array_type) 1989 << ConditionVar->getSourceRange()); 1990 1991 ExprResult Condition = 1992 Owned(DeclRefExpr::Create(Context, NestedNameSpecifierLoc(), 1993 ConditionVar, 1994 ConditionVar->getLocation(), 1995 ConditionVar->getType().getNonReferenceType(), 1996 VK_LValue)); 1997 if (ConvertToBoolean) { 1998 Condition = CheckBooleanCondition(Condition.take(), StmtLoc); 1999 if (Condition.isInvalid()) 2000 return ExprError(); 2001 } 2002 2003 return move(Condition); 2004} 2005 2006/// CheckCXXBooleanCondition - Returns true if a conversion to bool is invalid. 2007ExprResult Sema::CheckCXXBooleanCondition(Expr *CondExpr) { 2008 // C++ 6.4p4: 2009 // The value of a condition that is an initialized declaration in a statement 2010 // other than a switch statement is the value of the declared variable 2011 // implicitly converted to type bool. If that conversion is ill-formed, the 2012 // program is ill-formed. 2013 // The value of a condition that is an expression is the value of the 2014 // expression, implicitly converted to bool. 2015 // 2016 return PerformContextuallyConvertToBool(CondExpr); 2017} 2018 2019/// Helper function to determine whether this is the (deprecated) C++ 2020/// conversion from a string literal to a pointer to non-const char or 2021/// non-const wchar_t (for narrow and wide string literals, 2022/// respectively). 2023bool 2024Sema::IsStringLiteralToNonConstPointerConversion(Expr *From, QualType ToType) { 2025 // Look inside the implicit cast, if it exists. 2026 if (ImplicitCastExpr *Cast = dyn_cast<ImplicitCastExpr>(From)) 2027 From = Cast->getSubExpr(); 2028 2029 // A string literal (2.13.4) that is not a wide string literal can 2030 // be converted to an rvalue of type "pointer to char"; a wide 2031 // string literal can be converted to an rvalue of type "pointer 2032 // to wchar_t" (C++ 4.2p2). 2033 if (StringLiteral *StrLit = dyn_cast<StringLiteral>(From->IgnoreParens())) 2034 if (const PointerType *ToPtrType = ToType->getAs<PointerType>()) 2035 if (const BuiltinType *ToPointeeType 2036 = ToPtrType->getPointeeType()->getAs<BuiltinType>()) { 2037 // This conversion is considered only when there is an 2038 // explicit appropriate pointer target type (C++ 4.2p2). 2039 if (!ToPtrType->getPointeeType().hasQualifiers()) { 2040 switch (StrLit->getKind()) { 2041 case StringLiteral::UTF8: 2042 case StringLiteral::UTF16: 2043 case StringLiteral::UTF32: 2044 // We don't allow UTF literals to be implicitly converted 2045 break; 2046 case StringLiteral::Ascii: 2047 return (ToPointeeType->getKind() == BuiltinType::Char_U || 2048 ToPointeeType->getKind() == BuiltinType::Char_S); 2049 case StringLiteral::Wide: 2050 return ToPointeeType->isWideCharType(); 2051 } 2052 } 2053 } 2054 2055 return false; 2056} 2057 2058static ExprResult BuildCXXCastArgument(Sema &S, 2059 SourceLocation CastLoc, 2060 QualType Ty, 2061 CastKind Kind, 2062 CXXMethodDecl *Method, 2063 DeclAccessPair FoundDecl, 2064 bool HadMultipleCandidates, 2065 Expr *From) { 2066 switch (Kind) { 2067 default: llvm_unreachable("Unhandled cast kind!"); 2068 case CK_ConstructorConversion: { 2069 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(Method); 2070 ASTOwningVector<Expr*> ConstructorArgs(S); 2071 2072 if (S.CompleteConstructorCall(Constructor, 2073 MultiExprArg(&From, 1), 2074 CastLoc, ConstructorArgs)) 2075 return ExprError(); 2076 2077 S.CheckConstructorAccess(CastLoc, Constructor, Constructor->getAccess(), 2078 S.PDiag(diag::err_access_ctor)); 2079 2080 ExprResult Result 2081 = S.BuildCXXConstructExpr(CastLoc, Ty, cast<CXXConstructorDecl>(Method), 2082 move_arg(ConstructorArgs), 2083 HadMultipleCandidates, /*ZeroInit*/ false, 2084 CXXConstructExpr::CK_Complete, SourceRange()); 2085 if (Result.isInvalid()) 2086 return ExprError(); 2087 2088 return S.MaybeBindToTemporary(Result.takeAs<Expr>()); 2089 } 2090 2091 case CK_UserDefinedConversion: { 2092 assert(!From->getType()->isPointerType() && "Arg can't have pointer type!"); 2093 2094 // Create an implicit call expr that calls it. 2095 ExprResult Result = S.BuildCXXMemberCallExpr(From, FoundDecl, Method, 2096 HadMultipleCandidates); 2097 if (Result.isInvalid()) 2098 return ExprError(); 2099 2100 S.CheckMemberOperatorAccess(CastLoc, From, /*arg*/ 0, FoundDecl); 2101 2102 return S.MaybeBindToTemporary(Result.get()); 2103 } 2104 } 2105} 2106 2107/// PerformImplicitConversion - Perform an implicit conversion of the 2108/// expression From to the type ToType using the pre-computed implicit 2109/// conversion sequence ICS. Returns the converted 2110/// expression. Action is the kind of conversion we're performing, 2111/// used in the error message. 2112ExprResult 2113Sema::PerformImplicitConversion(Expr *From, QualType ToType, 2114 const ImplicitConversionSequence &ICS, 2115 AssignmentAction Action, 2116 CheckedConversionKind CCK) { 2117 switch (ICS.getKind()) { 2118 case ImplicitConversionSequence::StandardConversion: { 2119 ExprResult Res = PerformImplicitConversion(From, ToType, ICS.Standard, 2120 Action, CCK); 2121 if (Res.isInvalid()) 2122 return ExprError(); 2123 From = Res.take(); 2124 break; 2125 } 2126 2127 case ImplicitConversionSequence::UserDefinedConversion: { 2128 2129 FunctionDecl *FD = ICS.UserDefined.ConversionFunction; 2130 CastKind CastKind; 2131 QualType BeforeToType; 2132 if (const CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(FD)) { 2133 CastKind = CK_UserDefinedConversion; 2134 2135 // If the user-defined conversion is specified by a conversion function, 2136 // the initial standard conversion sequence converts the source type to 2137 // the implicit object parameter of the conversion function. 2138 BeforeToType = Context.getTagDeclType(Conv->getParent()); 2139 } else { 2140 const CXXConstructorDecl *Ctor = cast<CXXConstructorDecl>(FD); 2141 CastKind = CK_ConstructorConversion; 2142 // Do no conversion if dealing with ... for the first conversion. 2143 if (!ICS.UserDefined.EllipsisConversion) { 2144 // If the user-defined conversion is specified by a constructor, the 2145 // initial standard conversion sequence converts the source type to the 2146 // type required by the argument of the constructor 2147 BeforeToType = Ctor->getParamDecl(0)->getType().getNonReferenceType(); 2148 } 2149 } 2150 // Watch out for elipsis conversion. 2151 if (!ICS.UserDefined.EllipsisConversion) { 2152 ExprResult Res = 2153 PerformImplicitConversion(From, BeforeToType, 2154 ICS.UserDefined.Before, AA_Converting, 2155 CCK); 2156 if (Res.isInvalid()) 2157 return ExprError(); 2158 From = Res.take(); 2159 } 2160 2161 ExprResult CastArg 2162 = BuildCXXCastArgument(*this, 2163 From->getLocStart(), 2164 ToType.getNonReferenceType(), 2165 CastKind, cast<CXXMethodDecl>(FD), 2166 ICS.UserDefined.FoundConversionFunction, 2167 ICS.UserDefined.HadMultipleCandidates, 2168 From); 2169 2170 if (CastArg.isInvalid()) 2171 return ExprError(); 2172 2173 From = CastArg.take(); 2174 2175 return PerformImplicitConversion(From, ToType, ICS.UserDefined.After, 2176 AA_Converting, CCK); 2177 } 2178 2179 case ImplicitConversionSequence::AmbiguousConversion: 2180 ICS.DiagnoseAmbiguousConversion(*this, From->getExprLoc(), 2181 PDiag(diag::err_typecheck_ambiguous_condition) 2182 << From->getSourceRange()); 2183 return ExprError(); 2184 2185 case ImplicitConversionSequence::EllipsisConversion: 2186 llvm_unreachable("Cannot perform an ellipsis conversion"); 2187 2188 case ImplicitConversionSequence::BadConversion: 2189 return ExprError(); 2190 } 2191 2192 // Everything went well. 2193 return Owned(From); 2194} 2195 2196/// PerformImplicitConversion - Perform an implicit conversion of the 2197/// expression From to the type ToType by following the standard 2198/// conversion sequence SCS. Returns the converted 2199/// expression. Flavor is the context in which we're performing this 2200/// conversion, for use in error messages. 2201ExprResult 2202Sema::PerformImplicitConversion(Expr *From, QualType ToType, 2203 const StandardConversionSequence& SCS, 2204 AssignmentAction Action, 2205 CheckedConversionKind CCK) { 2206 bool CStyle = (CCK == CCK_CStyleCast || CCK == CCK_FunctionalCast); 2207 2208 // Overall FIXME: we are recomputing too many types here and doing far too 2209 // much extra work. What this means is that we need to keep track of more 2210 // information that is computed when we try the implicit conversion initially, 2211 // so that we don't need to recompute anything here. 2212 QualType FromType = From->getType(); 2213 2214 if (SCS.CopyConstructor) { 2215 // FIXME: When can ToType be a reference type? 2216 assert(!ToType->isReferenceType()); 2217 if (SCS.Second == ICK_Derived_To_Base) { 2218 ASTOwningVector<Expr*> ConstructorArgs(*this); 2219 if (CompleteConstructorCall(cast<CXXConstructorDecl>(SCS.CopyConstructor), 2220 MultiExprArg(*this, &From, 1), 2221 /*FIXME:ConstructLoc*/SourceLocation(), 2222 ConstructorArgs)) 2223 return ExprError(); 2224 return BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(), 2225 ToType, SCS.CopyConstructor, 2226 move_arg(ConstructorArgs), 2227 /*HadMultipleCandidates*/ false, 2228 /*ZeroInit*/ false, 2229 CXXConstructExpr::CK_Complete, 2230 SourceRange()); 2231 } 2232 return BuildCXXConstructExpr(/*FIXME:ConstructLoc*/SourceLocation(), 2233 ToType, SCS.CopyConstructor, 2234 MultiExprArg(*this, &From, 1), 2235 /*HadMultipleCandidates*/ false, 2236 /*ZeroInit*/ false, 2237 CXXConstructExpr::CK_Complete, 2238 SourceRange()); 2239 } 2240 2241 // Resolve overloaded function references. 2242 if (Context.hasSameType(FromType, Context.OverloadTy)) { 2243 DeclAccessPair Found; 2244 FunctionDecl *Fn = ResolveAddressOfOverloadedFunction(From, ToType, 2245 true, Found); 2246 if (!Fn) 2247 return ExprError(); 2248 2249 if (DiagnoseUseOfDecl(Fn, From->getSourceRange().getBegin())) 2250 return ExprError(); 2251 2252 From = FixOverloadedFunctionReference(From, Found, Fn); 2253 FromType = From->getType(); 2254 } 2255 2256 // Perform the first implicit conversion. 2257 switch (SCS.First) { 2258 case ICK_Identity: 2259 // Nothing to do. 2260 break; 2261 2262 case ICK_Lvalue_To_Rvalue: 2263 // Should this get its own ICK? 2264 if (From->getObjectKind() == OK_ObjCProperty) { 2265 ExprResult FromRes = ConvertPropertyForRValue(From); 2266 if (FromRes.isInvalid()) 2267 return ExprError(); 2268 From = FromRes.take(); 2269 if (!From->isGLValue()) break; 2270 } 2271 2272 FromType = FromType.getUnqualifiedType(); 2273 From = ImplicitCastExpr::Create(Context, FromType, CK_LValueToRValue, 2274 From, 0, VK_RValue); 2275 break; 2276 2277 case ICK_Array_To_Pointer: 2278 FromType = Context.getArrayDecayedType(FromType); 2279 From = ImpCastExprToType(From, FromType, CK_ArrayToPointerDecay, 2280 VK_RValue, /*BasePath=*/0, CCK).take(); 2281 break; 2282 2283 case ICK_Function_To_Pointer: 2284 FromType = Context.getPointerType(FromType); 2285 From = ImpCastExprToType(From, FromType, CK_FunctionToPointerDecay, 2286 VK_RValue, /*BasePath=*/0, CCK).take(); 2287 break; 2288 2289 default: 2290 llvm_unreachable("Improper first standard conversion"); 2291 } 2292 2293 // Perform the second implicit conversion 2294 switch (SCS.Second) { 2295 case ICK_Identity: 2296 // If both sides are functions (or pointers/references to them), there could 2297 // be incompatible exception declarations. 2298 if (CheckExceptionSpecCompatibility(From, ToType)) 2299 return ExprError(); 2300 // Nothing else to do. 2301 break; 2302 2303 case ICK_NoReturn_Adjustment: 2304 // If both sides are functions (or pointers/references to them), there could 2305 // be incompatible exception declarations. 2306 if (CheckExceptionSpecCompatibility(From, ToType)) 2307 return ExprError(); 2308 2309 From = ImpCastExprToType(From, ToType, CK_NoOp, 2310 VK_RValue, /*BasePath=*/0, CCK).take(); 2311 break; 2312 2313 case ICK_Integral_Promotion: 2314 case ICK_Integral_Conversion: 2315 From = ImpCastExprToType(From, ToType, CK_IntegralCast, 2316 VK_RValue, /*BasePath=*/0, CCK).take(); 2317 break; 2318 2319 case ICK_Floating_Promotion: 2320 case ICK_Floating_Conversion: 2321 From = ImpCastExprToType(From, ToType, CK_FloatingCast, 2322 VK_RValue, /*BasePath=*/0, CCK).take(); 2323 break; 2324 2325 case ICK_Complex_Promotion: 2326 case ICK_Complex_Conversion: { 2327 QualType FromEl = From->getType()->getAs<ComplexType>()->getElementType(); 2328 QualType ToEl = ToType->getAs<ComplexType>()->getElementType(); 2329 CastKind CK; 2330 if (FromEl->isRealFloatingType()) { 2331 if (ToEl->isRealFloatingType()) 2332 CK = CK_FloatingComplexCast; 2333 else 2334 CK = CK_FloatingComplexToIntegralComplex; 2335 } else if (ToEl->isRealFloatingType()) { 2336 CK = CK_IntegralComplexToFloatingComplex; 2337 } else { 2338 CK = CK_IntegralComplexCast; 2339 } 2340 From = ImpCastExprToType(From, ToType, CK, 2341 VK_RValue, /*BasePath=*/0, CCK).take(); 2342 break; 2343 } 2344 2345 case ICK_Floating_Integral: 2346 if (ToType->isRealFloatingType()) 2347 From = ImpCastExprToType(From, ToType, CK_IntegralToFloating, 2348 VK_RValue, /*BasePath=*/0, CCK).take(); 2349 else 2350 From = ImpCastExprToType(From, ToType, CK_FloatingToIntegral, 2351 VK_RValue, /*BasePath=*/0, CCK).take(); 2352 break; 2353 2354 case ICK_Compatible_Conversion: 2355 From = ImpCastExprToType(From, ToType, CK_NoOp, 2356 VK_RValue, /*BasePath=*/0, CCK).take(); 2357 break; 2358 2359 case ICK_Writeback_Conversion: 2360 case ICK_Pointer_Conversion: { 2361 if (SCS.IncompatibleObjC && Action != AA_Casting) { 2362 // Diagnose incompatible Objective-C conversions 2363 if (Action == AA_Initializing || Action == AA_Assigning) 2364 Diag(From->getSourceRange().getBegin(), 2365 diag::ext_typecheck_convert_incompatible_pointer) 2366 << ToType << From->getType() << Action 2367 << From->getSourceRange() << 0; 2368 else 2369 Diag(From->getSourceRange().getBegin(), 2370 diag::ext_typecheck_convert_incompatible_pointer) 2371 << From->getType() << ToType << Action 2372 << From->getSourceRange() << 0; 2373 2374 if (From->getType()->isObjCObjectPointerType() && 2375 ToType->isObjCObjectPointerType()) 2376 EmitRelatedResultTypeNote(From); 2377 } 2378 else if (getLangOptions().ObjCAutoRefCount && 2379 !CheckObjCARCUnavailableWeakConversion(ToType, 2380 From->getType())) { 2381 if (Action == AA_Initializing) 2382 Diag(From->getSourceRange().getBegin(), 2383 diag::err_arc_weak_unavailable_assign); 2384 else 2385 Diag(From->getSourceRange().getBegin(), 2386 diag::err_arc_convesion_of_weak_unavailable) 2387 << (Action == AA_Casting) << From->getType() << ToType 2388 << From->getSourceRange(); 2389 } 2390 2391 CastKind Kind = CK_Invalid; 2392 CXXCastPath BasePath; 2393 if (CheckPointerConversion(From, ToType, Kind, BasePath, CStyle)) 2394 return ExprError(); 2395 2396 // Make sure we extend blocks if necessary. 2397 // FIXME: doing this here is really ugly. 2398 if (Kind == CK_BlockPointerToObjCPointerCast) { 2399 ExprResult E = From; 2400 (void) PrepareCastToObjCObjectPointer(E); 2401 From = E.take(); 2402 } 2403 2404 From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK) 2405 .take(); 2406 break; 2407 } 2408 2409 case ICK_Pointer_Member: { 2410 CastKind Kind = CK_Invalid; 2411 CXXCastPath BasePath; 2412 if (CheckMemberPointerConversion(From, ToType, Kind, BasePath, CStyle)) 2413 return ExprError(); 2414 if (CheckExceptionSpecCompatibility(From, ToType)) 2415 return ExprError(); 2416 From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK) 2417 .take(); 2418 break; 2419 } 2420 2421 case ICK_Boolean_Conversion: 2422 // Perform half-to-boolean conversion via float. 2423 if (From->getType()->isHalfType()) { 2424 From = ImpCastExprToType(From, Context.FloatTy, CK_FloatingCast).take(); 2425 FromType = Context.FloatTy; 2426 } 2427 2428 From = ImpCastExprToType(From, Context.BoolTy, 2429 ScalarTypeToBooleanCastKind(FromType), 2430 VK_RValue, /*BasePath=*/0, CCK).take(); 2431 break; 2432 2433 case ICK_Derived_To_Base: { 2434 CXXCastPath BasePath; 2435 if (CheckDerivedToBaseConversion(From->getType(), 2436 ToType.getNonReferenceType(), 2437 From->getLocStart(), 2438 From->getSourceRange(), 2439 &BasePath, 2440 CStyle)) 2441 return ExprError(); 2442 2443 From = ImpCastExprToType(From, ToType.getNonReferenceType(), 2444 CK_DerivedToBase, From->getValueKind(), 2445 &BasePath, CCK).take(); 2446 break; 2447 } 2448 2449 case ICK_Vector_Conversion: 2450 From = ImpCastExprToType(From, ToType, CK_BitCast, 2451 VK_RValue, /*BasePath=*/0, CCK).take(); 2452 break; 2453 2454 case ICK_Vector_Splat: 2455 From = ImpCastExprToType(From, ToType, CK_VectorSplat, 2456 VK_RValue, /*BasePath=*/0, CCK).take(); 2457 break; 2458 2459 case ICK_Complex_Real: 2460 // Case 1. x -> _Complex y 2461 if (const ComplexType *ToComplex = ToType->getAs<ComplexType>()) { 2462 QualType ElType = ToComplex->getElementType(); 2463 bool isFloatingComplex = ElType->isRealFloatingType(); 2464 2465 // x -> y 2466 if (Context.hasSameUnqualifiedType(ElType, From->getType())) { 2467 // do nothing 2468 } else if (From->getType()->isRealFloatingType()) { 2469 From = ImpCastExprToType(From, ElType, 2470 isFloatingComplex ? CK_FloatingCast : CK_FloatingToIntegral).take(); 2471 } else { 2472 assert(From->getType()->isIntegerType()); 2473 From = ImpCastExprToType(From, ElType, 2474 isFloatingComplex ? CK_IntegralToFloating : CK_IntegralCast).take(); 2475 } 2476 // y -> _Complex y 2477 From = ImpCastExprToType(From, ToType, 2478 isFloatingComplex ? CK_FloatingRealToComplex 2479 : CK_IntegralRealToComplex).take(); 2480 2481 // Case 2. _Complex x -> y 2482 } else { 2483 const ComplexType *FromComplex = From->getType()->getAs<ComplexType>(); 2484 assert(FromComplex); 2485 2486 QualType ElType = FromComplex->getElementType(); 2487 bool isFloatingComplex = ElType->isRealFloatingType(); 2488 2489 // _Complex x -> x 2490 From = ImpCastExprToType(From, ElType, 2491 isFloatingComplex ? CK_FloatingComplexToReal 2492 : CK_IntegralComplexToReal, 2493 VK_RValue, /*BasePath=*/0, CCK).take(); 2494 2495 // x -> y 2496 if (Context.hasSameUnqualifiedType(ElType, ToType)) { 2497 // do nothing 2498 } else if (ToType->isRealFloatingType()) { 2499 From = ImpCastExprToType(From, ToType, 2500 isFloatingComplex ? CK_FloatingCast : CK_IntegralToFloating, 2501 VK_RValue, /*BasePath=*/0, CCK).take(); 2502 } else { 2503 assert(ToType->isIntegerType()); 2504 From = ImpCastExprToType(From, ToType, 2505 isFloatingComplex ? CK_FloatingToIntegral : CK_IntegralCast, 2506 VK_RValue, /*BasePath=*/0, CCK).take(); 2507 } 2508 } 2509 break; 2510 2511 case ICK_Block_Pointer_Conversion: { 2512 From = ImpCastExprToType(From, ToType.getUnqualifiedType(), CK_BitCast, 2513 VK_RValue, /*BasePath=*/0, CCK).take(); 2514 break; 2515 } 2516 2517 case ICK_TransparentUnionConversion: { 2518 ExprResult FromRes = Owned(From); 2519 Sema::AssignConvertType ConvTy = 2520 CheckTransparentUnionArgumentConstraints(ToType, FromRes); 2521 if (FromRes.isInvalid()) 2522 return ExprError(); 2523 From = FromRes.take(); 2524 assert ((ConvTy == Sema::Compatible) && 2525 "Improper transparent union conversion"); 2526 (void)ConvTy; 2527 break; 2528 } 2529 2530 case ICK_Lvalue_To_Rvalue: 2531 case ICK_Array_To_Pointer: 2532 case ICK_Function_To_Pointer: 2533 case ICK_Qualification: 2534 case ICK_Num_Conversion_Kinds: 2535 llvm_unreachable("Improper second standard conversion"); 2536 } 2537 2538 switch (SCS.Third) { 2539 case ICK_Identity: 2540 // Nothing to do. 2541 break; 2542 2543 case ICK_Qualification: { 2544 // The qualification keeps the category of the inner expression, unless the 2545 // target type isn't a reference. 2546 ExprValueKind VK = ToType->isReferenceType() ? 2547 From->getValueKind() : VK_RValue; 2548 From = ImpCastExprToType(From, ToType.getNonLValueExprType(Context), 2549 CK_NoOp, VK, /*BasePath=*/0, CCK).take(); 2550 2551 if (SCS.DeprecatedStringLiteralToCharPtr && 2552 !getLangOptions().WritableStrings) 2553 Diag(From->getLocStart(), diag::warn_deprecated_string_literal_conversion) 2554 << ToType.getNonReferenceType(); 2555 2556 break; 2557 } 2558 2559 default: 2560 llvm_unreachable("Improper third standard conversion"); 2561 } 2562 2563 return Owned(From); 2564} 2565 2566ExprResult Sema::ActOnUnaryTypeTrait(UnaryTypeTrait UTT, 2567 SourceLocation KWLoc, 2568 ParsedType Ty, 2569 SourceLocation RParen) { 2570 TypeSourceInfo *TSInfo; 2571 QualType T = GetTypeFromParser(Ty, &TSInfo); 2572 2573 if (!TSInfo) 2574 TSInfo = Context.getTrivialTypeSourceInfo(T); 2575 return BuildUnaryTypeTrait(UTT, KWLoc, TSInfo, RParen); 2576} 2577 2578/// \brief Check the completeness of a type in a unary type trait. 2579/// 2580/// If the particular type trait requires a complete type, tries to complete 2581/// it. If completing the type fails, a diagnostic is emitted and false 2582/// returned. If completing the type succeeds or no completion was required, 2583/// returns true. 2584static bool CheckUnaryTypeTraitTypeCompleteness(Sema &S, 2585 UnaryTypeTrait UTT, 2586 SourceLocation Loc, 2587 QualType ArgTy) { 2588 // C++0x [meta.unary.prop]p3: 2589 // For all of the class templates X declared in this Clause, instantiating 2590 // that template with a template argument that is a class template 2591 // specialization may result in the implicit instantiation of the template 2592 // argument if and only if the semantics of X require that the argument 2593 // must be a complete type. 2594 // We apply this rule to all the type trait expressions used to implement 2595 // these class templates. We also try to follow any GCC documented behavior 2596 // in these expressions to ensure portability of standard libraries. 2597 switch (UTT) { 2598 // is_complete_type somewhat obviously cannot require a complete type. 2599 case UTT_IsCompleteType: 2600 // Fall-through 2601 2602 // These traits are modeled on the type predicates in C++0x 2603 // [meta.unary.cat] and [meta.unary.comp]. They are not specified as 2604 // requiring a complete type, as whether or not they return true cannot be 2605 // impacted by the completeness of the type. 2606 case UTT_IsVoid: 2607 case UTT_IsIntegral: 2608 case UTT_IsFloatingPoint: 2609 case UTT_IsArray: 2610 case UTT_IsPointer: 2611 case UTT_IsLvalueReference: 2612 case UTT_IsRvalueReference: 2613 case UTT_IsMemberFunctionPointer: 2614 case UTT_IsMemberObjectPointer: 2615 case UTT_IsEnum: 2616 case UTT_IsUnion: 2617 case UTT_IsClass: 2618 case UTT_IsFunction: 2619 case UTT_IsReference: 2620 case UTT_IsArithmetic: 2621 case UTT_IsFundamental: 2622 case UTT_IsObject: 2623 case UTT_IsScalar: 2624 case UTT_IsCompound: 2625 case UTT_IsMemberPointer: 2626 // Fall-through 2627 2628 // These traits are modeled on type predicates in C++0x [meta.unary.prop] 2629 // which requires some of its traits to have the complete type. However, 2630 // the completeness of the type cannot impact these traits' semantics, and 2631 // so they don't require it. This matches the comments on these traits in 2632 // Table 49. 2633 case UTT_IsConst: 2634 case UTT_IsVolatile: 2635 case UTT_IsSigned: 2636 case UTT_IsUnsigned: 2637 return true; 2638 2639 // C++0x [meta.unary.prop] Table 49 requires the following traits to be 2640 // applied to a complete type. 2641 case UTT_IsTrivial: 2642 case UTT_IsTriviallyCopyable: 2643 case UTT_IsStandardLayout: 2644 case UTT_IsPOD: 2645 case UTT_IsLiteral: 2646 case UTT_IsEmpty: 2647 case UTT_IsPolymorphic: 2648 case UTT_IsAbstract: 2649 // Fall-through 2650 2651 // These trait expressions are designed to help implement predicates in 2652 // [meta.unary.prop] despite not being named the same. They are specified 2653 // by both GCC and the Embarcadero C++ compiler, and require the complete 2654 // type due to the overarching C++0x type predicates being implemented 2655 // requiring the complete type. 2656 case UTT_HasNothrowAssign: 2657 case UTT_HasNothrowConstructor: 2658 case UTT_HasNothrowCopy: 2659 case UTT_HasTrivialAssign: 2660 case UTT_HasTrivialDefaultConstructor: 2661 case UTT_HasTrivialCopy: 2662 case UTT_HasTrivialDestructor: 2663 case UTT_HasVirtualDestructor: 2664 // Arrays of unknown bound are expressly allowed. 2665 QualType ElTy = ArgTy; 2666 if (ArgTy->isIncompleteArrayType()) 2667 ElTy = S.Context.getAsArrayType(ArgTy)->getElementType(); 2668 2669 // The void type is expressly allowed. 2670 if (ElTy->isVoidType()) 2671 return true; 2672 2673 return !S.RequireCompleteType( 2674 Loc, ElTy, diag::err_incomplete_type_used_in_type_trait_expr); 2675 } 2676 llvm_unreachable("Type trait not handled by switch"); 2677} 2678 2679static bool EvaluateUnaryTypeTrait(Sema &Self, UnaryTypeTrait UTT, 2680 SourceLocation KeyLoc, QualType T) { 2681 assert(!T->isDependentType() && "Cannot evaluate traits of dependent type"); 2682 2683 ASTContext &C = Self.Context; 2684 switch(UTT) { 2685 // Type trait expressions corresponding to the primary type category 2686 // predicates in C++0x [meta.unary.cat]. 2687 case UTT_IsVoid: 2688 return T->isVoidType(); 2689 case UTT_IsIntegral: 2690 return T->isIntegralType(C); 2691 case UTT_IsFloatingPoint: 2692 return T->isFloatingType(); 2693 case UTT_IsArray: 2694 return T->isArrayType(); 2695 case UTT_IsPointer: 2696 return T->isPointerType(); 2697 case UTT_IsLvalueReference: 2698 return T->isLValueReferenceType(); 2699 case UTT_IsRvalueReference: 2700 return T->isRValueReferenceType(); 2701 case UTT_IsMemberFunctionPointer: 2702 return T->isMemberFunctionPointerType(); 2703 case UTT_IsMemberObjectPointer: 2704 return T->isMemberDataPointerType(); 2705 case UTT_IsEnum: 2706 return T->isEnumeralType(); 2707 case UTT_IsUnion: 2708 return T->isUnionType(); 2709 case UTT_IsClass: 2710 return T->isClassType() || T->isStructureType(); 2711 case UTT_IsFunction: 2712 return T->isFunctionType(); 2713 2714 // Type trait expressions which correspond to the convenient composition 2715 // predicates in C++0x [meta.unary.comp]. 2716 case UTT_IsReference: 2717 return T->isReferenceType(); 2718 case UTT_IsArithmetic: 2719 return T->isArithmeticType() && !T->isEnumeralType(); 2720 case UTT_IsFundamental: 2721 return T->isFundamentalType(); 2722 case UTT_IsObject: 2723 return T->isObjectType(); 2724 case UTT_IsScalar: 2725 // Note: semantic analysis depends on Objective-C lifetime types to be 2726 // considered scalar types. However, such types do not actually behave 2727 // like scalar types at run time (since they may require retain/release 2728 // operations), so we report them as non-scalar. 2729 if (T->isObjCLifetimeType()) { 2730 switch (T.getObjCLifetime()) { 2731 case Qualifiers::OCL_None: 2732 case Qualifiers::OCL_ExplicitNone: 2733 return true; 2734 2735 case Qualifiers::OCL_Strong: 2736 case Qualifiers::OCL_Weak: 2737 case Qualifiers::OCL_Autoreleasing: 2738 return false; 2739 } 2740 } 2741 2742 return T->isScalarType(); 2743 case UTT_IsCompound: 2744 return T->isCompoundType(); 2745 case UTT_IsMemberPointer: 2746 return T->isMemberPointerType(); 2747 2748 // Type trait expressions which correspond to the type property predicates 2749 // in C++0x [meta.unary.prop]. 2750 case UTT_IsConst: 2751 return T.isConstQualified(); 2752 case UTT_IsVolatile: 2753 return T.isVolatileQualified(); 2754 case UTT_IsTrivial: 2755 return T.isTrivialType(Self.Context); 2756 case UTT_IsTriviallyCopyable: 2757 return T.isTriviallyCopyableType(Self.Context); 2758 case UTT_IsStandardLayout: 2759 return T->isStandardLayoutType(); 2760 case UTT_IsPOD: 2761 return T.isPODType(Self.Context); 2762 case UTT_IsLiteral: 2763 return T->isLiteralType(); 2764 case UTT_IsEmpty: 2765 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 2766 return !RD->isUnion() && RD->isEmpty(); 2767 return false; 2768 case UTT_IsPolymorphic: 2769 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 2770 return RD->isPolymorphic(); 2771 return false; 2772 case UTT_IsAbstract: 2773 if (const CXXRecordDecl *RD = T->getAsCXXRecordDecl()) 2774 return RD->isAbstract(); 2775 return false; 2776 case UTT_IsSigned: 2777 return T->isSignedIntegerType(); 2778 case UTT_IsUnsigned: 2779 return T->isUnsignedIntegerType(); 2780 2781 // Type trait expressions which query classes regarding their construction, 2782 // destruction, and copying. Rather than being based directly on the 2783 // related type predicates in the standard, they are specified by both 2784 // GCC[1] and the Embarcadero C++ compiler[2], and Clang implements those 2785 // specifications. 2786 // 2787 // 1: http://gcc.gnu/.org/onlinedocs/gcc/Type-Traits.html 2788 // 2: http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index 2789 case UTT_HasTrivialDefaultConstructor: 2790 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2791 // If __is_pod (type) is true then the trait is true, else if type is 2792 // a cv class or union type (or array thereof) with a trivial default 2793 // constructor ([class.ctor]) then the trait is true, else it is false. 2794 if (T.isPODType(Self.Context)) 2795 return true; 2796 if (const RecordType *RT = 2797 C.getBaseElementType(T)->getAs<RecordType>()) 2798 return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDefaultConstructor(); 2799 return false; 2800 case UTT_HasTrivialCopy: 2801 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2802 // If __is_pod (type) is true or type is a reference type then 2803 // the trait is true, else if type is a cv class or union type 2804 // with a trivial copy constructor ([class.copy]) then the trait 2805 // is true, else it is false. 2806 if (T.isPODType(Self.Context) || T->isReferenceType()) 2807 return true; 2808 if (const RecordType *RT = T->getAs<RecordType>()) 2809 return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialCopyConstructor(); 2810 return false; 2811 case UTT_HasTrivialAssign: 2812 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2813 // If type is const qualified or is a reference type then the 2814 // trait is false. Otherwise if __is_pod (type) is true then the 2815 // trait is true, else if type is a cv class or union type with 2816 // a trivial copy assignment ([class.copy]) then the trait is 2817 // true, else it is false. 2818 // Note: the const and reference restrictions are interesting, 2819 // given that const and reference members don't prevent a class 2820 // from having a trivial copy assignment operator (but do cause 2821 // errors if the copy assignment operator is actually used, q.v. 2822 // [class.copy]p12). 2823 2824 if (C.getBaseElementType(T).isConstQualified()) 2825 return false; 2826 if (T.isPODType(Self.Context)) 2827 return true; 2828 if (const RecordType *RT = T->getAs<RecordType>()) 2829 return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialCopyAssignment(); 2830 return false; 2831 case UTT_HasTrivialDestructor: 2832 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2833 // If __is_pod (type) is true or type is a reference type 2834 // then the trait is true, else if type is a cv class or union 2835 // type (or array thereof) with a trivial destructor 2836 // ([class.dtor]) then the trait is true, else it is 2837 // false. 2838 if (T.isPODType(Self.Context) || T->isReferenceType()) 2839 return true; 2840 2841 // Objective-C++ ARC: autorelease types don't require destruction. 2842 if (T->isObjCLifetimeType() && 2843 T.getObjCLifetime() == Qualifiers::OCL_Autoreleasing) 2844 return true; 2845 2846 if (const RecordType *RT = 2847 C.getBaseElementType(T)->getAs<RecordType>()) 2848 return cast<CXXRecordDecl>(RT->getDecl())->hasTrivialDestructor(); 2849 return false; 2850 // TODO: Propagate nothrowness for implicitly declared special members. 2851 case UTT_HasNothrowAssign: 2852 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2853 // If type is const qualified or is a reference type then the 2854 // trait is false. Otherwise if __has_trivial_assign (type) 2855 // is true then the trait is true, else if type is a cv class 2856 // or union type with copy assignment operators that are known 2857 // not to throw an exception then the trait is true, else it is 2858 // false. 2859 if (C.getBaseElementType(T).isConstQualified()) 2860 return false; 2861 if (T->isReferenceType()) 2862 return false; 2863 if (T.isPODType(Self.Context) || T->isObjCLifetimeType()) 2864 return true; 2865 if (const RecordType *RT = T->getAs<RecordType>()) { 2866 CXXRecordDecl* RD = cast<CXXRecordDecl>(RT->getDecl()); 2867 if (RD->hasTrivialCopyAssignment()) 2868 return true; 2869 2870 bool FoundAssign = false; 2871 DeclarationName Name = C.DeclarationNames.getCXXOperatorName(OO_Equal); 2872 LookupResult Res(Self, DeclarationNameInfo(Name, KeyLoc), 2873 Sema::LookupOrdinaryName); 2874 if (Self.LookupQualifiedName(Res, RD)) { 2875 Res.suppressDiagnostics(); 2876 for (LookupResult::iterator Op = Res.begin(), OpEnd = Res.end(); 2877 Op != OpEnd; ++Op) { 2878 if (isa<FunctionTemplateDecl>(*Op)) 2879 continue; 2880 2881 CXXMethodDecl *Operator = cast<CXXMethodDecl>(*Op); 2882 if (Operator->isCopyAssignmentOperator()) { 2883 FoundAssign = true; 2884 const FunctionProtoType *CPT 2885 = Operator->getType()->getAs<FunctionProtoType>(); 2886 if (CPT->getExceptionSpecType() == EST_Delayed) 2887 return false; 2888 if (!CPT->isNothrow(Self.Context)) 2889 return false; 2890 } 2891 } 2892 } 2893 2894 return FoundAssign; 2895 } 2896 return false; 2897 case UTT_HasNothrowCopy: 2898 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2899 // If __has_trivial_copy (type) is true then the trait is true, else 2900 // if type is a cv class or union type with copy constructors that are 2901 // known not to throw an exception then the trait is true, else it is 2902 // false. 2903 if (T.isPODType(C) || T->isReferenceType() || T->isObjCLifetimeType()) 2904 return true; 2905 if (const RecordType *RT = T->getAs<RecordType>()) { 2906 CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); 2907 if (RD->hasTrivialCopyConstructor()) 2908 return true; 2909 2910 bool FoundConstructor = false; 2911 unsigned FoundTQs; 2912 DeclContext::lookup_const_iterator Con, ConEnd; 2913 for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD); 2914 Con != ConEnd; ++Con) { 2915 // A template constructor is never a copy constructor. 2916 // FIXME: However, it may actually be selected at the actual overload 2917 // resolution point. 2918 if (isa<FunctionTemplateDecl>(*Con)) 2919 continue; 2920 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con); 2921 if (Constructor->isCopyConstructor(FoundTQs)) { 2922 FoundConstructor = true; 2923 const FunctionProtoType *CPT 2924 = Constructor->getType()->getAs<FunctionProtoType>(); 2925 if (CPT->getExceptionSpecType() == EST_Delayed) 2926 return false; 2927 // FIXME: check whether evaluating default arguments can throw. 2928 // For now, we'll be conservative and assume that they can throw. 2929 if (!CPT->isNothrow(Self.Context) || CPT->getNumArgs() > 1) 2930 return false; 2931 } 2932 } 2933 2934 return FoundConstructor; 2935 } 2936 return false; 2937 case UTT_HasNothrowConstructor: 2938 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2939 // If __has_trivial_constructor (type) is true then the trait is 2940 // true, else if type is a cv class or union type (or array 2941 // thereof) with a default constructor that is known not to 2942 // throw an exception then the trait is true, else it is false. 2943 if (T.isPODType(C) || T->isObjCLifetimeType()) 2944 return true; 2945 if (const RecordType *RT = C.getBaseElementType(T)->getAs<RecordType>()) { 2946 CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); 2947 if (RD->hasTrivialDefaultConstructor()) 2948 return true; 2949 2950 DeclContext::lookup_const_iterator Con, ConEnd; 2951 for (llvm::tie(Con, ConEnd) = Self.LookupConstructors(RD); 2952 Con != ConEnd; ++Con) { 2953 // FIXME: In C++0x, a constructor template can be a default constructor. 2954 if (isa<FunctionTemplateDecl>(*Con)) 2955 continue; 2956 CXXConstructorDecl *Constructor = cast<CXXConstructorDecl>(*Con); 2957 if (Constructor->isDefaultConstructor()) { 2958 const FunctionProtoType *CPT 2959 = Constructor->getType()->getAs<FunctionProtoType>(); 2960 if (CPT->getExceptionSpecType() == EST_Delayed) 2961 return false; 2962 // TODO: check whether evaluating default arguments can throw. 2963 // For now, we'll be conservative and assume that they can throw. 2964 return CPT->isNothrow(Self.Context) && CPT->getNumArgs() == 0; 2965 } 2966 } 2967 } 2968 return false; 2969 case UTT_HasVirtualDestructor: 2970 // http://gcc.gnu.org/onlinedocs/gcc/Type-Traits.html: 2971 // If type is a class type with a virtual destructor ([class.dtor]) 2972 // then the trait is true, else it is false. 2973 if (const RecordType *Record = T->getAs<RecordType>()) { 2974 CXXRecordDecl *RD = cast<CXXRecordDecl>(Record->getDecl()); 2975 if (CXXDestructorDecl *Destructor = Self.LookupDestructor(RD)) 2976 return Destructor->isVirtual(); 2977 } 2978 return false; 2979 2980 // These type trait expressions are modeled on the specifications for the 2981 // Embarcadero C++0x type trait functions: 2982 // http://docwiki.embarcadero.com/RADStudio/XE/en/Type_Trait_Functions_(C%2B%2B0x)_Index 2983 case UTT_IsCompleteType: 2984 // http://docwiki.embarcadero.com/RADStudio/XE/en/Is_complete_type_(typename_T_): 2985 // Returns True if and only if T is a complete type at the point of the 2986 // function call. 2987 return !T->isIncompleteType(); 2988 } 2989 llvm_unreachable("Type trait not covered by switch"); 2990} 2991 2992ExprResult Sema::BuildUnaryTypeTrait(UnaryTypeTrait UTT, 2993 SourceLocation KWLoc, 2994 TypeSourceInfo *TSInfo, 2995 SourceLocation RParen) { 2996 QualType T = TSInfo->getType(); 2997 if (!CheckUnaryTypeTraitTypeCompleteness(*this, UTT, KWLoc, T)) 2998 return ExprError(); 2999 3000 bool Value = false; 3001 if (!T->isDependentType()) 3002 Value = EvaluateUnaryTypeTrait(*this, UTT, KWLoc, T); 3003 3004 return Owned(new (Context) UnaryTypeTraitExpr(KWLoc, UTT, TSInfo, Value, 3005 RParen, Context.BoolTy)); 3006} 3007 3008ExprResult Sema::ActOnBinaryTypeTrait(BinaryTypeTrait BTT, 3009 SourceLocation KWLoc, 3010 ParsedType LhsTy, 3011 ParsedType RhsTy, 3012 SourceLocation RParen) { 3013 TypeSourceInfo *LhsTSInfo; 3014 QualType LhsT = GetTypeFromParser(LhsTy, &LhsTSInfo); 3015 if (!LhsTSInfo) 3016 LhsTSInfo = Context.getTrivialTypeSourceInfo(LhsT); 3017 3018 TypeSourceInfo *RhsTSInfo; 3019 QualType RhsT = GetTypeFromParser(RhsTy, &RhsTSInfo); 3020 if (!RhsTSInfo) 3021 RhsTSInfo = Context.getTrivialTypeSourceInfo(RhsT); 3022 3023 return BuildBinaryTypeTrait(BTT, KWLoc, LhsTSInfo, RhsTSInfo, RParen); 3024} 3025 3026static bool EvaluateBinaryTypeTrait(Sema &Self, BinaryTypeTrait BTT, 3027 QualType LhsT, QualType RhsT, 3028 SourceLocation KeyLoc) { 3029 assert(!LhsT->isDependentType() && !RhsT->isDependentType() && 3030 "Cannot evaluate traits of dependent types"); 3031 3032 switch(BTT) { 3033 case BTT_IsBaseOf: { 3034 // C++0x [meta.rel]p2 3035 // Base is a base class of Derived without regard to cv-qualifiers or 3036 // Base and Derived are not unions and name the same class type without 3037 // regard to cv-qualifiers. 3038 3039 const RecordType *lhsRecord = LhsT->getAs<RecordType>(); 3040 if (!lhsRecord) return false; 3041 3042 const RecordType *rhsRecord = RhsT->getAs<RecordType>(); 3043 if (!rhsRecord) return false; 3044 3045 assert(Self.Context.hasSameUnqualifiedType(LhsT, RhsT) 3046 == (lhsRecord == rhsRecord)); 3047 3048 if (lhsRecord == rhsRecord) 3049 return !lhsRecord->getDecl()->isUnion(); 3050 3051 // C++0x [meta.rel]p2: 3052 // If Base and Derived are class types and are different types 3053 // (ignoring possible cv-qualifiers) then Derived shall be a 3054 // complete type. 3055 if (Self.RequireCompleteType(KeyLoc, RhsT, 3056 diag::err_incomplete_type_used_in_type_trait_expr)) 3057 return false; 3058 3059 return cast<CXXRecordDecl>(rhsRecord->getDecl()) 3060 ->isDerivedFrom(cast<CXXRecordDecl>(lhsRecord->getDecl())); 3061 } 3062 case BTT_IsSame: 3063 return Self.Context.hasSameType(LhsT, RhsT); 3064 case BTT_TypeCompatible: 3065 return Self.Context.typesAreCompatible(LhsT.getUnqualifiedType(), 3066 RhsT.getUnqualifiedType()); 3067 case BTT_IsConvertible: 3068 case BTT_IsConvertibleTo: { 3069 // C++0x [meta.rel]p4: 3070 // Given the following function prototype: 3071 // 3072 // template <class T> 3073 // typename add_rvalue_reference<T>::type create(); 3074 // 3075 // the predicate condition for a template specialization 3076 // is_convertible<From, To> shall be satisfied if and only if 3077 // the return expression in the following code would be 3078 // well-formed, including any implicit conversions to the return 3079 // type of the function: 3080 // 3081 // To test() { 3082 // return create<From>(); 3083 // } 3084 // 3085 // Access checking is performed as if in a context unrelated to To and 3086 // From. Only the validity of the immediate context of the expression 3087 // of the return-statement (including conversions to the return type) 3088 // is considered. 3089 // 3090 // We model the initialization as a copy-initialization of a temporary 3091 // of the appropriate type, which for this expression is identical to the 3092 // return statement (since NRVO doesn't apply). 3093 if (LhsT->isObjectType() || LhsT->isFunctionType()) 3094 LhsT = Self.Context.getRValueReferenceType(LhsT); 3095 3096 InitializedEntity To(InitializedEntity::InitializeTemporary(RhsT)); 3097 OpaqueValueExpr From(KeyLoc, LhsT.getNonLValueExprType(Self.Context), 3098 Expr::getValueKindForType(LhsT)); 3099 Expr *FromPtr = &From; 3100 InitializationKind Kind(InitializationKind::CreateCopy(KeyLoc, 3101 SourceLocation())); 3102 3103 // Perform the initialization within a SFINAE trap at translation unit 3104 // scope. 3105 Sema::SFINAETrap SFINAE(Self, /*AccessCheckingSFINAE=*/true); 3106 Sema::ContextRAII TUContext(Self, Self.Context.getTranslationUnitDecl()); 3107 InitializationSequence Init(Self, To, Kind, &FromPtr, 1); 3108 if (Init.Failed()) 3109 return false; 3110 3111 ExprResult Result = Init.Perform(Self, To, Kind, MultiExprArg(&FromPtr, 1)); 3112 return !Result.isInvalid() && !SFINAE.hasErrorOccurred(); 3113 } 3114 } 3115 llvm_unreachable("Unknown type trait or not implemented"); 3116} 3117 3118ExprResult Sema::BuildBinaryTypeTrait(BinaryTypeTrait BTT, 3119 SourceLocation KWLoc, 3120 TypeSourceInfo *LhsTSInfo, 3121 TypeSourceInfo *RhsTSInfo, 3122 SourceLocation RParen) { 3123 QualType LhsT = LhsTSInfo->getType(); 3124 QualType RhsT = RhsTSInfo->getType(); 3125 3126 if (BTT == BTT_TypeCompatible) { 3127 if (getLangOptions().CPlusPlus) { 3128 Diag(KWLoc, diag::err_types_compatible_p_in_cplusplus) 3129 << SourceRange(KWLoc, RParen); 3130 return ExprError(); 3131 } 3132 } 3133 3134 bool Value = false; 3135 if (!LhsT->isDependentType() && !RhsT->isDependentType()) 3136 Value = EvaluateBinaryTypeTrait(*this, BTT, LhsT, RhsT, KWLoc); 3137 3138 // Select trait result type. 3139 QualType ResultType; 3140 switch (BTT) { 3141 case BTT_IsBaseOf: ResultType = Context.BoolTy; break; 3142 case BTT_IsConvertible: ResultType = Context.BoolTy; break; 3143 case BTT_IsSame: ResultType = Context.BoolTy; break; 3144 case BTT_TypeCompatible: ResultType = Context.IntTy; break; 3145 case BTT_IsConvertibleTo: ResultType = Context.BoolTy; break; 3146 } 3147 3148 return Owned(new (Context) BinaryTypeTraitExpr(KWLoc, BTT, LhsTSInfo, 3149 RhsTSInfo, Value, RParen, 3150 ResultType)); 3151} 3152 3153ExprResult Sema::ActOnArrayTypeTrait(ArrayTypeTrait ATT, 3154 SourceLocation KWLoc, 3155 ParsedType Ty, 3156 Expr* DimExpr, 3157 SourceLocation RParen) { 3158 TypeSourceInfo *TSInfo; 3159 QualType T = GetTypeFromParser(Ty, &TSInfo); 3160 if (!TSInfo) 3161 TSInfo = Context.getTrivialTypeSourceInfo(T); 3162 3163 return BuildArrayTypeTrait(ATT, KWLoc, TSInfo, DimExpr, RParen); 3164} 3165 3166static uint64_t EvaluateArrayTypeTrait(Sema &Self, ArrayTypeTrait ATT, 3167 QualType T, Expr *DimExpr, 3168 SourceLocation KeyLoc) { 3169 assert(!T->isDependentType() && "Cannot evaluate traits of dependent type"); 3170 3171 switch(ATT) { 3172 case ATT_ArrayRank: 3173 if (T->isArrayType()) { 3174 unsigned Dim = 0; 3175 while (const ArrayType *AT = Self.Context.getAsArrayType(T)) { 3176 ++Dim; 3177 T = AT->getElementType(); 3178 } 3179 return Dim; 3180 } 3181 return 0; 3182 3183 case ATT_ArrayExtent: { 3184 llvm::APSInt Value; 3185 uint64_t Dim; 3186 if (DimExpr->isIntegerConstantExpr(Value, Self.Context, 0, false)) { 3187 if (Value < llvm::APSInt(Value.getBitWidth(), Value.isUnsigned())) { 3188 Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer) << 3189 DimExpr->getSourceRange(); 3190 return false; 3191 } 3192 Dim = Value.getLimitedValue(); 3193 } else { 3194 Self.Diag(KeyLoc, diag::err_dimension_expr_not_constant_integer) << 3195 DimExpr->getSourceRange(); 3196 return false; 3197 } 3198 3199 if (T->isArrayType()) { 3200 unsigned D = 0; 3201 bool Matched = false; 3202 while (const ArrayType *AT = Self.Context.getAsArrayType(T)) { 3203 if (Dim == D) { 3204 Matched = true; 3205 break; 3206 } 3207 ++D; 3208 T = AT->getElementType(); 3209 } 3210 3211 if (Matched && T->isArrayType()) { 3212 if (const ConstantArrayType *CAT = Self.Context.getAsConstantArrayType(T)) 3213 return CAT->getSize().getLimitedValue(); 3214 } 3215 } 3216 return 0; 3217 } 3218 } 3219 llvm_unreachable("Unknown type trait or not implemented"); 3220} 3221 3222ExprResult Sema::BuildArrayTypeTrait(ArrayTypeTrait ATT, 3223 SourceLocation KWLoc, 3224 TypeSourceInfo *TSInfo, 3225 Expr* DimExpr, 3226 SourceLocation RParen) { 3227 QualType T = TSInfo->getType(); 3228 3229 // FIXME: This should likely be tracked as an APInt to remove any host 3230 // assumptions about the width of size_t on the target. 3231 uint64_t Value = 0; 3232 if (!T->isDependentType()) 3233 Value = EvaluateArrayTypeTrait(*this, ATT, T, DimExpr, KWLoc); 3234 3235 // While the specification for these traits from the Embarcadero C++ 3236 // compiler's documentation says the return type is 'unsigned int', Clang 3237 // returns 'size_t'. On Windows, the primary platform for the Embarcadero 3238 // compiler, there is no difference. On several other platforms this is an 3239 // important distinction. 3240 return Owned(new (Context) ArrayTypeTraitExpr(KWLoc, ATT, TSInfo, Value, 3241 DimExpr, RParen, 3242 Context.getSizeType())); 3243} 3244 3245ExprResult Sema::ActOnExpressionTrait(ExpressionTrait ET, 3246 SourceLocation KWLoc, 3247 Expr *Queried, 3248 SourceLocation RParen) { 3249 // If error parsing the expression, ignore. 3250 if (!Queried) 3251 return ExprError(); 3252 3253 ExprResult Result = BuildExpressionTrait(ET, KWLoc, Queried, RParen); 3254 3255 return move(Result); 3256} 3257 3258static bool EvaluateExpressionTrait(ExpressionTrait ET, Expr *E) { 3259 switch (ET) { 3260 case ET_IsLValueExpr: return E->isLValue(); 3261 case ET_IsRValueExpr: return E->isRValue(); 3262 } 3263 llvm_unreachable("Expression trait not covered by switch"); 3264} 3265 3266ExprResult Sema::BuildExpressionTrait(ExpressionTrait ET, 3267 SourceLocation KWLoc, 3268 Expr *Queried, 3269 SourceLocation RParen) { 3270 if (Queried->isTypeDependent()) { 3271 // Delay type-checking for type-dependent expressions. 3272 } else if (Queried->getType()->isPlaceholderType()) { 3273 ExprResult PE = CheckPlaceholderExpr(Queried); 3274 if (PE.isInvalid()) return ExprError(); 3275 return BuildExpressionTrait(ET, KWLoc, PE.take(), RParen); 3276 } 3277 3278 bool Value = EvaluateExpressionTrait(ET, Queried); 3279 3280 return Owned(new (Context) ExpressionTraitExpr(KWLoc, ET, Queried, Value, 3281 RParen, Context.BoolTy)); 3282} 3283 3284QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS, 3285 ExprValueKind &VK, 3286 SourceLocation Loc, 3287 bool isIndirect) { 3288 assert(!LHS.get()->getType()->isPlaceholderType() && 3289 !RHS.get()->getType()->isPlaceholderType() && 3290 "placeholders should have been weeded out by now"); 3291 3292 // The LHS undergoes lvalue conversions if this is ->*. 3293 if (isIndirect) { 3294 LHS = DefaultLvalueConversion(LHS.take()); 3295 if (LHS.isInvalid()) return QualType(); 3296 } 3297 3298 // The RHS always undergoes lvalue conversions. 3299 RHS = DefaultLvalueConversion(RHS.take()); 3300 if (RHS.isInvalid()) return QualType(); 3301 3302 const char *OpSpelling = isIndirect ? "->*" : ".*"; 3303 // C++ 5.5p2 3304 // The binary operator .* [p3: ->*] binds its second operand, which shall 3305 // be of type "pointer to member of T" (where T is a completely-defined 3306 // class type) [...] 3307 QualType RHSType = RHS.get()->getType(); 3308 const MemberPointerType *MemPtr = RHSType->getAs<MemberPointerType>(); 3309 if (!MemPtr) { 3310 Diag(Loc, diag::err_bad_memptr_rhs) 3311 << OpSpelling << RHSType << RHS.get()->getSourceRange(); 3312 return QualType(); 3313 } 3314 3315 QualType Class(MemPtr->getClass(), 0); 3316 3317 // Note: C++ [expr.mptr.oper]p2-3 says that the class type into which the 3318 // member pointer points must be completely-defined. However, there is no 3319 // reason for this semantic distinction, and the rule is not enforced by 3320 // other compilers. Therefore, we do not check this property, as it is 3321 // likely to be considered a defect. 3322 3323 // C++ 5.5p2 3324 // [...] to its first operand, which shall be of class T or of a class of 3325 // which T is an unambiguous and accessible base class. [p3: a pointer to 3326 // such a class] 3327 QualType LHSType = LHS.get()->getType(); 3328 if (isIndirect) { 3329 if (const PointerType *Ptr = LHSType->getAs<PointerType>()) 3330 LHSType = Ptr->getPointeeType(); 3331 else { 3332 Diag(Loc, diag::err_bad_memptr_lhs) 3333 << OpSpelling << 1 << LHSType 3334 << FixItHint::CreateReplacement(SourceRange(Loc), ".*"); 3335 return QualType(); 3336 } 3337 } 3338 3339 if (!Context.hasSameUnqualifiedType(Class, LHSType)) { 3340 // If we want to check the hierarchy, we need a complete type. 3341 if (RequireCompleteType(Loc, LHSType, PDiag(diag::err_bad_memptr_lhs) 3342 << OpSpelling << (int)isIndirect)) { 3343 return QualType(); 3344 } 3345 CXXBasePaths Paths(/*FindAmbiguities=*/true, /*RecordPaths=*/true, 3346 /*DetectVirtual=*/false); 3347 // FIXME: Would it be useful to print full ambiguity paths, or is that 3348 // overkill? 3349 if (!IsDerivedFrom(LHSType, Class, Paths) || 3350 Paths.isAmbiguous(Context.getCanonicalType(Class))) { 3351 Diag(Loc, diag::err_bad_memptr_lhs) << OpSpelling 3352 << (int)isIndirect << LHS.get()->getType(); 3353 return QualType(); 3354 } 3355 // Cast LHS to type of use. 3356 QualType UseType = isIndirect ? Context.getPointerType(Class) : Class; 3357 ExprValueKind VK = isIndirect ? VK_RValue : LHS.get()->getValueKind(); 3358 3359 CXXCastPath BasePath; 3360 BuildBasePathArray(Paths, BasePath); 3361 LHS = ImpCastExprToType(LHS.take(), UseType, CK_DerivedToBase, VK, 3362 &BasePath); 3363 } 3364 3365 if (isa<CXXScalarValueInitExpr>(RHS.get()->IgnoreParens())) { 3366 // Diagnose use of pointer-to-member type which when used as 3367 // the functional cast in a pointer-to-member expression. 3368 Diag(Loc, diag::err_pointer_to_member_type) << isIndirect; 3369 return QualType(); 3370 } 3371 3372 // C++ 5.5p2 3373 // The result is an object or a function of the type specified by the 3374 // second operand. 3375 // The cv qualifiers are the union of those in the pointer and the left side, 3376 // in accordance with 5.5p5 and 5.2.5. 3377 QualType Result = MemPtr->getPointeeType(); 3378 Result = Context.getCVRQualifiedType(Result, LHSType.getCVRQualifiers()); 3379 3380 // C++0x [expr.mptr.oper]p6: 3381 // In a .* expression whose object expression is an rvalue, the program is 3382 // ill-formed if the second operand is a pointer to member function with 3383 // ref-qualifier &. In a ->* expression or in a .* expression whose object 3384 // expression is an lvalue, the program is ill-formed if the second operand 3385 // is a pointer to member function with ref-qualifier &&. 3386 if (const FunctionProtoType *Proto = Result->getAs<FunctionProtoType>()) { 3387 switch (Proto->getRefQualifier()) { 3388 case RQ_None: 3389 // Do nothing 3390 break; 3391 3392 case RQ_LValue: 3393 if (!isIndirect && !LHS.get()->Classify(Context).isLValue()) 3394 Diag(Loc, diag::err_pointer_to_member_oper_value_classify) 3395 << RHSType << 1 << LHS.get()->getSourceRange(); 3396 break; 3397 3398 case RQ_RValue: 3399 if (isIndirect || !LHS.get()->Classify(Context).isRValue()) 3400 Diag(Loc, diag::err_pointer_to_member_oper_value_classify) 3401 << RHSType << 0 << LHS.get()->getSourceRange(); 3402 break; 3403 } 3404 } 3405 3406 // C++ [expr.mptr.oper]p6: 3407 // The result of a .* expression whose second operand is a pointer 3408 // to a data member is of the same value category as its 3409 // first operand. The result of a .* expression whose second 3410 // operand is a pointer to a member function is a prvalue. The 3411 // result of an ->* expression is an lvalue if its second operand 3412 // is a pointer to data member and a prvalue otherwise. 3413 if (Result->isFunctionType()) { 3414 VK = VK_RValue; 3415 return Context.BoundMemberTy; 3416 } else if (isIndirect) { 3417 VK = VK_LValue; 3418 } else { 3419 VK = LHS.get()->getValueKind(); 3420 } 3421 3422 return Result; 3423} 3424 3425/// \brief Try to convert a type to another according to C++0x 5.16p3. 3426/// 3427/// This is part of the parameter validation for the ? operator. If either 3428/// value operand is a class type, the two operands are attempted to be 3429/// converted to each other. This function does the conversion in one direction. 3430/// It returns true if the program is ill-formed and has already been diagnosed 3431/// as such. 3432static bool TryClassUnification(Sema &Self, Expr *From, Expr *To, 3433 SourceLocation QuestionLoc, 3434 bool &HaveConversion, 3435 QualType &ToType) { 3436 HaveConversion = false; 3437 ToType = To->getType(); 3438 3439 InitializationKind Kind = InitializationKind::CreateCopy(To->getLocStart(), 3440 SourceLocation()); 3441 // C++0x 5.16p3 3442 // The process for determining whether an operand expression E1 of type T1 3443 // can be converted to match an operand expression E2 of type T2 is defined 3444 // as follows: 3445 // -- If E2 is an lvalue: 3446 bool ToIsLvalue = To->isLValue(); 3447 if (ToIsLvalue) { 3448 // E1 can be converted to match E2 if E1 can be implicitly converted to 3449 // type "lvalue reference to T2", subject to the constraint that in the 3450 // conversion the reference must bind directly to E1. 3451 QualType T = Self.Context.getLValueReferenceType(ToType); 3452 InitializedEntity Entity = InitializedEntity::InitializeTemporary(T); 3453 3454 InitializationSequence InitSeq(Self, Entity, Kind, &From, 1); 3455 if (InitSeq.isDirectReferenceBinding()) { 3456 ToType = T; 3457 HaveConversion = true; 3458 return false; 3459 } 3460 3461 if (InitSeq.isAmbiguous()) 3462 return InitSeq.Diagnose(Self, Entity, Kind, &From, 1); 3463 } 3464 3465 // -- If E2 is an rvalue, or if the conversion above cannot be done: 3466 // -- if E1 and E2 have class type, and the underlying class types are 3467 // the same or one is a base class of the other: 3468 QualType FTy = From->getType(); 3469 QualType TTy = To->getType(); 3470 const RecordType *FRec = FTy->getAs<RecordType>(); 3471 const RecordType *TRec = TTy->getAs<RecordType>(); 3472 bool FDerivedFromT = FRec && TRec && FRec != TRec && 3473 Self.IsDerivedFrom(FTy, TTy); 3474 if (FRec && TRec && 3475 (FRec == TRec || FDerivedFromT || Self.IsDerivedFrom(TTy, FTy))) { 3476 // E1 can be converted to match E2 if the class of T2 is the 3477 // same type as, or a base class of, the class of T1, and 3478 // [cv2 > cv1]. 3479 if (FRec == TRec || FDerivedFromT) { 3480 if (TTy.isAtLeastAsQualifiedAs(FTy)) { 3481 InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy); 3482 InitializationSequence InitSeq(Self, Entity, Kind, &From, 1); 3483 if (InitSeq) { 3484 HaveConversion = true; 3485 return false; 3486 } 3487 3488 if (InitSeq.isAmbiguous()) 3489 return InitSeq.Diagnose(Self, Entity, Kind, &From, 1); 3490 } 3491 } 3492 3493 return false; 3494 } 3495 3496 // -- Otherwise: E1 can be converted to match E2 if E1 can be 3497 // implicitly converted to the type that expression E2 would have 3498 // if E2 were converted to an rvalue (or the type it has, if E2 is 3499 // an rvalue). 3500 // 3501 // This actually refers very narrowly to the lvalue-to-rvalue conversion, not 3502 // to the array-to-pointer or function-to-pointer conversions. 3503 if (!TTy->getAs<TagType>()) 3504 TTy = TTy.getUnqualifiedType(); 3505 3506 InitializedEntity Entity = InitializedEntity::InitializeTemporary(TTy); 3507 InitializationSequence InitSeq(Self, Entity, Kind, &From, 1); 3508 HaveConversion = !InitSeq.Failed(); 3509 ToType = TTy; 3510 if (InitSeq.isAmbiguous()) 3511 return InitSeq.Diagnose(Self, Entity, Kind, &From, 1); 3512 3513 return false; 3514} 3515 3516/// \brief Try to find a common type for two according to C++0x 5.16p5. 3517/// 3518/// This is part of the parameter validation for the ? operator. If either 3519/// value operand is a class type, overload resolution is used to find a 3520/// conversion to a common type. 3521static bool FindConditionalOverload(Sema &Self, ExprResult &LHS, ExprResult &RHS, 3522 SourceLocation QuestionLoc) { 3523 Expr *Args[2] = { LHS.get(), RHS.get() }; 3524 OverloadCandidateSet CandidateSet(QuestionLoc); 3525 Self.AddBuiltinOperatorCandidates(OO_Conditional, QuestionLoc, Args, 2, 3526 CandidateSet); 3527 3528 OverloadCandidateSet::iterator Best; 3529 switch (CandidateSet.BestViableFunction(Self, QuestionLoc, Best)) { 3530 case OR_Success: { 3531 // We found a match. Perform the conversions on the arguments and move on. 3532 ExprResult LHSRes = 3533 Self.PerformImplicitConversion(LHS.get(), Best->BuiltinTypes.ParamTypes[0], 3534 Best->Conversions[0], Sema::AA_Converting); 3535 if (LHSRes.isInvalid()) 3536 break; 3537 LHS = move(LHSRes); 3538 3539 ExprResult RHSRes = 3540 Self.PerformImplicitConversion(RHS.get(), Best->BuiltinTypes.ParamTypes[1], 3541 Best->Conversions[1], Sema::AA_Converting); 3542 if (RHSRes.isInvalid()) 3543 break; 3544 RHS = move(RHSRes); 3545 if (Best->Function) 3546 Self.MarkDeclarationReferenced(QuestionLoc, Best->Function); 3547 return false; 3548 } 3549 3550 case OR_No_Viable_Function: 3551 3552 // Emit a better diagnostic if one of the expressions is a null pointer 3553 // constant and the other is a pointer type. In this case, the user most 3554 // likely forgot to take the address of the other expression. 3555 if (Self.DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc)) 3556 return true; 3557 3558 Self.Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) 3559 << LHS.get()->getType() << RHS.get()->getType() 3560 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 3561 return true; 3562 3563 case OR_Ambiguous: 3564 Self.Diag(QuestionLoc, diag::err_conditional_ambiguous_ovl) 3565 << LHS.get()->getType() << RHS.get()->getType() 3566 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 3567 // FIXME: Print the possible common types by printing the return types of 3568 // the viable candidates. 3569 break; 3570 3571 case OR_Deleted: 3572 llvm_unreachable("Conditional operator has only built-in overloads"); 3573 } 3574 return true; 3575} 3576 3577/// \brief Perform an "extended" implicit conversion as returned by 3578/// TryClassUnification. 3579static bool ConvertForConditional(Sema &Self, ExprResult &E, QualType T) { 3580 InitializedEntity Entity = InitializedEntity::InitializeTemporary(T); 3581 InitializationKind Kind = InitializationKind::CreateCopy(E.get()->getLocStart(), 3582 SourceLocation()); 3583 Expr *Arg = E.take(); 3584 InitializationSequence InitSeq(Self, Entity, Kind, &Arg, 1); 3585 ExprResult Result = InitSeq.Perform(Self, Entity, Kind, MultiExprArg(&Arg, 1)); 3586 if (Result.isInvalid()) 3587 return true; 3588 3589 E = Result; 3590 return false; 3591} 3592 3593/// \brief Check the operands of ?: under C++ semantics. 3594/// 3595/// See C++ [expr.cond]. Note that LHS is never null, even for the GNU x ?: y 3596/// extension. In this case, LHS == Cond. (But they're not aliases.) 3597QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, 3598 ExprValueKind &VK, ExprObjectKind &OK, 3599 SourceLocation QuestionLoc) { 3600 // FIXME: Handle C99's complex types, vector types, block pointers and Obj-C++ 3601 // interface pointers. 3602 3603 // C++0x 5.16p1 3604 // The first expression is contextually converted to bool. 3605 if (!Cond.get()->isTypeDependent()) { 3606 ExprResult CondRes = CheckCXXBooleanCondition(Cond.take()); 3607 if (CondRes.isInvalid()) 3608 return QualType(); 3609 Cond = move(CondRes); 3610 } 3611 3612 // Assume r-value. 3613 VK = VK_RValue; 3614 OK = OK_Ordinary; 3615 3616 // Either of the arguments dependent? 3617 if (LHS.get()->isTypeDependent() || RHS.get()->isTypeDependent()) 3618 return Context.DependentTy; 3619 3620 // C++0x 5.16p2 3621 // If either the second or the third operand has type (cv) void, ... 3622 QualType LTy = LHS.get()->getType(); 3623 QualType RTy = RHS.get()->getType(); 3624 bool LVoid = LTy->isVoidType(); 3625 bool RVoid = RTy->isVoidType(); 3626 if (LVoid || RVoid) { 3627 // ... then the [l2r] conversions are performed on the second and third 3628 // operands ... 3629 LHS = DefaultFunctionArrayLvalueConversion(LHS.take()); 3630 RHS = DefaultFunctionArrayLvalueConversion(RHS.take()); 3631 if (LHS.isInvalid() || RHS.isInvalid()) 3632 return QualType(); 3633 LTy = LHS.get()->getType(); 3634 RTy = RHS.get()->getType(); 3635 3636 // ... and one of the following shall hold: 3637 // -- The second or the third operand (but not both) is a throw- 3638 // expression; the result is of the type of the other and is an rvalue. 3639 bool LThrow = isa<CXXThrowExpr>(LHS.get()); 3640 bool RThrow = isa<CXXThrowExpr>(RHS.get()); 3641 if (LThrow && !RThrow) 3642 return RTy; 3643 if (RThrow && !LThrow) 3644 return LTy; 3645 3646 // -- Both the second and third operands have type void; the result is of 3647 // type void and is an rvalue. 3648 if (LVoid && RVoid) 3649 return Context.VoidTy; 3650 3651 // Neither holds, error. 3652 Diag(QuestionLoc, diag::err_conditional_void_nonvoid) 3653 << (LVoid ? RTy : LTy) << (LVoid ? 0 : 1) 3654 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 3655 return QualType(); 3656 } 3657 3658 // Neither is void. 3659 3660 // C++0x 5.16p3 3661 // Otherwise, if the second and third operand have different types, and 3662 // either has (cv) class type, and attempt is made to convert each of those 3663 // operands to the other. 3664 if (!Context.hasSameType(LTy, RTy) && 3665 (LTy->isRecordType() || RTy->isRecordType())) { 3666 ImplicitConversionSequence ICSLeftToRight, ICSRightToLeft; 3667 // These return true if a single direction is already ambiguous. 3668 QualType L2RType, R2LType; 3669 bool HaveL2R, HaveR2L; 3670 if (TryClassUnification(*this, LHS.get(), RHS.get(), QuestionLoc, HaveL2R, L2RType)) 3671 return QualType(); 3672 if (TryClassUnification(*this, RHS.get(), LHS.get(), QuestionLoc, HaveR2L, R2LType)) 3673 return QualType(); 3674 3675 // If both can be converted, [...] the program is ill-formed. 3676 if (HaveL2R && HaveR2L) { 3677 Diag(QuestionLoc, diag::err_conditional_ambiguous) 3678 << LTy << RTy << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 3679 return QualType(); 3680 } 3681 3682 // If exactly one conversion is possible, that conversion is applied to 3683 // the chosen operand and the converted operands are used in place of the 3684 // original operands for the remainder of this section. 3685 if (HaveL2R) { 3686 if (ConvertForConditional(*this, LHS, L2RType) || LHS.isInvalid()) 3687 return QualType(); 3688 LTy = LHS.get()->getType(); 3689 } else if (HaveR2L) { 3690 if (ConvertForConditional(*this, RHS, R2LType) || RHS.isInvalid()) 3691 return QualType(); 3692 RTy = RHS.get()->getType(); 3693 } 3694 } 3695 3696 // C++0x 5.16p4 3697 // If the second and third operands are glvalues of the same value 3698 // category and have the same type, the result is of that type and 3699 // value category and it is a bit-field if the second or the third 3700 // operand is a bit-field, or if both are bit-fields. 3701 // We only extend this to bitfields, not to the crazy other kinds of 3702 // l-values. 3703 bool Same = Context.hasSameType(LTy, RTy); 3704 if (Same && 3705 LHS.get()->isGLValue() && 3706 LHS.get()->getValueKind() == RHS.get()->getValueKind() && 3707 LHS.get()->isOrdinaryOrBitFieldObject() && 3708 RHS.get()->isOrdinaryOrBitFieldObject()) { 3709 VK = LHS.get()->getValueKind(); 3710 if (LHS.get()->getObjectKind() == OK_BitField || 3711 RHS.get()->getObjectKind() == OK_BitField) 3712 OK = OK_BitField; 3713 return LTy; 3714 } 3715 3716 // C++0x 5.16p5 3717 // Otherwise, the result is an rvalue. If the second and third operands 3718 // do not have the same type, and either has (cv) class type, ... 3719 if (!Same && (LTy->isRecordType() || RTy->isRecordType())) { 3720 // ... overload resolution is used to determine the conversions (if any) 3721 // to be applied to the operands. If the overload resolution fails, the 3722 // program is ill-formed. 3723 if (FindConditionalOverload(*this, LHS, RHS, QuestionLoc)) 3724 return QualType(); 3725 } 3726 3727 // C++0x 5.16p6 3728 // LValue-to-rvalue, array-to-pointer, and function-to-pointer standard 3729 // conversions are performed on the second and third operands. 3730 LHS = DefaultFunctionArrayLvalueConversion(LHS.take()); 3731 RHS = DefaultFunctionArrayLvalueConversion(RHS.take()); 3732 if (LHS.isInvalid() || RHS.isInvalid()) 3733 return QualType(); 3734 LTy = LHS.get()->getType(); 3735 RTy = RHS.get()->getType(); 3736 3737 // After those conversions, one of the following shall hold: 3738 // -- The second and third operands have the same type; the result 3739 // is of that type. If the operands have class type, the result 3740 // is a prvalue temporary of the result type, which is 3741 // copy-initialized from either the second operand or the third 3742 // operand depending on the value of the first operand. 3743 if (Context.getCanonicalType(LTy) == Context.getCanonicalType(RTy)) { 3744 if (LTy->isRecordType()) { 3745 // The operands have class type. Make a temporary copy. 3746 InitializedEntity Entity = InitializedEntity::InitializeTemporary(LTy); 3747 ExprResult LHSCopy = PerformCopyInitialization(Entity, 3748 SourceLocation(), 3749 LHS); 3750 if (LHSCopy.isInvalid()) 3751 return QualType(); 3752 3753 ExprResult RHSCopy = PerformCopyInitialization(Entity, 3754 SourceLocation(), 3755 RHS); 3756 if (RHSCopy.isInvalid()) 3757 return QualType(); 3758 3759 LHS = LHSCopy; 3760 RHS = RHSCopy; 3761 } 3762 3763 return LTy; 3764 } 3765 3766 // Extension: conditional operator involving vector types. 3767 if (LTy->isVectorType() || RTy->isVectorType()) 3768 return CheckVectorOperands(LHS, RHS, QuestionLoc, /*isCompAssign*/false); 3769 3770 // -- The second and third operands have arithmetic or enumeration type; 3771 // the usual arithmetic conversions are performed to bring them to a 3772 // common type, and the result is of that type. 3773 if (LTy->isArithmeticType() && RTy->isArithmeticType()) { 3774 UsualArithmeticConversions(LHS, RHS); 3775 if (LHS.isInvalid() || RHS.isInvalid()) 3776 return QualType(); 3777 return LHS.get()->getType(); 3778 } 3779 3780 // -- The second and third operands have pointer type, or one has pointer 3781 // type and the other is a null pointer constant; pointer conversions 3782 // and qualification conversions are performed to bring them to their 3783 // composite pointer type. The result is of the composite pointer type. 3784 // -- The second and third operands have pointer to member type, or one has 3785 // pointer to member type and the other is a null pointer constant; 3786 // pointer to member conversions and qualification conversions are 3787 // performed to bring them to a common type, whose cv-qualification 3788 // shall match the cv-qualification of either the second or the third 3789 // operand. The result is of the common type. 3790 bool NonStandardCompositeType = false; 3791 QualType Composite = FindCompositePointerType(QuestionLoc, LHS, RHS, 3792 isSFINAEContext()? 0 : &NonStandardCompositeType); 3793 if (!Composite.isNull()) { 3794 if (NonStandardCompositeType) 3795 Diag(QuestionLoc, 3796 diag::ext_typecheck_cond_incompatible_operands_nonstandard) 3797 << LTy << RTy << Composite 3798 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 3799 3800 return Composite; 3801 } 3802 3803 // Similarly, attempt to find composite type of two objective-c pointers. 3804 Composite = FindCompositeObjCPointerType(LHS, RHS, QuestionLoc); 3805 if (!Composite.isNull()) 3806 return Composite; 3807 3808 // Check if we are using a null with a non-pointer type. 3809 if (DiagnoseConditionalForNull(LHS.get(), RHS.get(), QuestionLoc)) 3810 return QualType(); 3811 3812 Diag(QuestionLoc, diag::err_typecheck_cond_incompatible_operands) 3813 << LHS.get()->getType() << RHS.get()->getType() 3814 << LHS.get()->getSourceRange() << RHS.get()->getSourceRange(); 3815 return QualType(); 3816} 3817 3818/// \brief Find a merged pointer type and convert the two expressions to it. 3819/// 3820/// This finds the composite pointer type (or member pointer type) for @p E1 3821/// and @p E2 according to C++0x 5.9p2. It converts both expressions to this 3822/// type and returns it. 3823/// It does not emit diagnostics. 3824/// 3825/// \param Loc The location of the operator requiring these two expressions to 3826/// be converted to the composite pointer type. 3827/// 3828/// If \p NonStandardCompositeType is non-NULL, then we are permitted to find 3829/// a non-standard (but still sane) composite type to which both expressions 3830/// can be converted. When such a type is chosen, \c *NonStandardCompositeType 3831/// will be set true. 3832QualType Sema::FindCompositePointerType(SourceLocation Loc, 3833 Expr *&E1, Expr *&E2, 3834 bool *NonStandardCompositeType) { 3835 if (NonStandardCompositeType) 3836 *NonStandardCompositeType = false; 3837 3838 assert(getLangOptions().CPlusPlus && "This function assumes C++"); 3839 QualType T1 = E1->getType(), T2 = E2->getType(); 3840 3841 if (!T1->isAnyPointerType() && !T1->isMemberPointerType() && 3842 !T2->isAnyPointerType() && !T2->isMemberPointerType()) 3843 return QualType(); 3844 3845 // C++0x 5.9p2 3846 // Pointer conversions and qualification conversions are performed on 3847 // pointer operands to bring them to their composite pointer type. If 3848 // one operand is a null pointer constant, the composite pointer type is 3849 // the type of the other operand. 3850 if (E1->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) { 3851 if (T2->isMemberPointerType()) 3852 E1 = ImpCastExprToType(E1, T2, CK_NullToMemberPointer).take(); 3853 else 3854 E1 = ImpCastExprToType(E1, T2, CK_NullToPointer).take(); 3855 return T2; 3856 } 3857 if (E2->isNullPointerConstant(Context, Expr::NPC_ValueDependentIsNull)) { 3858 if (T1->isMemberPointerType()) 3859 E2 = ImpCastExprToType(E2, T1, CK_NullToMemberPointer).take(); 3860 else 3861 E2 = ImpCastExprToType(E2, T1, CK_NullToPointer).take(); 3862 return T1; 3863 } 3864 3865 // Now both have to be pointers or member pointers. 3866 if ((!T1->isPointerType() && !T1->isMemberPointerType()) || 3867 (!T2->isPointerType() && !T2->isMemberPointerType())) 3868 return QualType(); 3869 3870 // Otherwise, of one of the operands has type "pointer to cv1 void," then 3871 // the other has type "pointer to cv2 T" and the composite pointer type is 3872 // "pointer to cv12 void," where cv12 is the union of cv1 and cv2. 3873 // Otherwise, the composite pointer type is a pointer type similar to the 3874 // type of one of the operands, with a cv-qualification signature that is 3875 // the union of the cv-qualification signatures of the operand types. 3876 // In practice, the first part here is redundant; it's subsumed by the second. 3877 // What we do here is, we build the two possible composite types, and try the 3878 // conversions in both directions. If only one works, or if the two composite 3879 // types are the same, we have succeeded. 3880 // FIXME: extended qualifiers? 3881 typedef SmallVector<unsigned, 4> QualifierVector; 3882 QualifierVector QualifierUnion; 3883 typedef SmallVector<std::pair<const Type *, const Type *>, 4> 3884 ContainingClassVector; 3885 ContainingClassVector MemberOfClass; 3886 QualType Composite1 = Context.getCanonicalType(T1), 3887 Composite2 = Context.getCanonicalType(T2); 3888 unsigned NeedConstBefore = 0; 3889 do { 3890 const PointerType *Ptr1, *Ptr2; 3891 if ((Ptr1 = Composite1->getAs<PointerType>()) && 3892 (Ptr2 = Composite2->getAs<PointerType>())) { 3893 Composite1 = Ptr1->getPointeeType(); 3894 Composite2 = Ptr2->getPointeeType(); 3895 3896 // If we're allowed to create a non-standard composite type, keep track 3897 // of where we need to fill in additional 'const' qualifiers. 3898 if (NonStandardCompositeType && 3899 Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers()) 3900 NeedConstBefore = QualifierUnion.size(); 3901 3902 QualifierUnion.push_back( 3903 Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers()); 3904 MemberOfClass.push_back(std::make_pair((const Type *)0, (const Type *)0)); 3905 continue; 3906 } 3907 3908 const MemberPointerType *MemPtr1, *MemPtr2; 3909 if ((MemPtr1 = Composite1->getAs<MemberPointerType>()) && 3910 (MemPtr2 = Composite2->getAs<MemberPointerType>())) { 3911 Composite1 = MemPtr1->getPointeeType(); 3912 Composite2 = MemPtr2->getPointeeType(); 3913 3914 // If we're allowed to create a non-standard composite type, keep track 3915 // of where we need to fill in additional 'const' qualifiers. 3916 if (NonStandardCompositeType && 3917 Composite1.getCVRQualifiers() != Composite2.getCVRQualifiers()) 3918 NeedConstBefore = QualifierUnion.size(); 3919 3920 QualifierUnion.push_back( 3921 Composite1.getCVRQualifiers() | Composite2.getCVRQualifiers()); 3922 MemberOfClass.push_back(std::make_pair(MemPtr1->getClass(), 3923 MemPtr2->getClass())); 3924 continue; 3925 } 3926 3927 // FIXME: block pointer types? 3928 3929 // Cannot unwrap any more types. 3930 break; 3931 } while (true); 3932 3933 if (NeedConstBefore && NonStandardCompositeType) { 3934 // Extension: Add 'const' to qualifiers that come before the first qualifier 3935 // mismatch, so that our (non-standard!) composite type meets the 3936 // requirements of C++ [conv.qual]p4 bullet 3. 3937 for (unsigned I = 0; I != NeedConstBefore; ++I) { 3938 if ((QualifierUnion[I] & Qualifiers::Const) == 0) { 3939 QualifierUnion[I] = QualifierUnion[I] | Qualifiers::Const; 3940 *NonStandardCompositeType = true; 3941 } 3942 } 3943 } 3944 3945 // Rewrap the composites as pointers or member pointers with the union CVRs. 3946 ContainingClassVector::reverse_iterator MOC 3947 = MemberOfClass.rbegin(); 3948 for (QualifierVector::reverse_iterator 3949 I = QualifierUnion.rbegin(), 3950 E = QualifierUnion.rend(); 3951 I != E; (void)++I, ++MOC) { 3952 Qualifiers Quals = Qualifiers::fromCVRMask(*I); 3953 if (MOC->first && MOC->second) { 3954 // Rebuild member pointer type 3955 Composite1 = Context.getMemberPointerType( 3956 Context.getQualifiedType(Composite1, Quals), 3957 MOC->first); 3958 Composite2 = Context.getMemberPointerType( 3959 Context.getQualifiedType(Composite2, Quals), 3960 MOC->second); 3961 } else { 3962 // Rebuild pointer type 3963 Composite1 3964 = Context.getPointerType(Context.getQualifiedType(Composite1, Quals)); 3965 Composite2 3966 = Context.getPointerType(Context.getQualifiedType(Composite2, Quals)); 3967 } 3968 } 3969 3970 // Try to convert to the first composite pointer type. 3971 InitializedEntity Entity1 3972 = InitializedEntity::InitializeTemporary(Composite1); 3973 InitializationKind Kind 3974 = InitializationKind::CreateCopy(Loc, SourceLocation()); 3975 InitializationSequence E1ToC1(*this, Entity1, Kind, &E1, 1); 3976 InitializationSequence E2ToC1(*this, Entity1, Kind, &E2, 1); 3977 3978 if (E1ToC1 && E2ToC1) { 3979 // Conversion to Composite1 is viable. 3980 if (!Context.hasSameType(Composite1, Composite2)) { 3981 // Composite2 is a different type from Composite1. Check whether 3982 // Composite2 is also viable. 3983 InitializedEntity Entity2 3984 = InitializedEntity::InitializeTemporary(Composite2); 3985 InitializationSequence E1ToC2(*this, Entity2, Kind, &E1, 1); 3986 InitializationSequence E2ToC2(*this, Entity2, Kind, &E2, 1); 3987 if (E1ToC2 && E2ToC2) { 3988 // Both Composite1 and Composite2 are viable and are different; 3989 // this is an ambiguity. 3990 return QualType(); 3991 } 3992 } 3993 3994 // Convert E1 to Composite1 3995 ExprResult E1Result 3996 = E1ToC1.Perform(*this, Entity1, Kind, MultiExprArg(*this,&E1,1)); 3997 if (E1Result.isInvalid()) 3998 return QualType(); 3999 E1 = E1Result.takeAs<Expr>(); 4000 4001 // Convert E2 to Composite1 4002 ExprResult E2Result 4003 = E2ToC1.Perform(*this, Entity1, Kind, MultiExprArg(*this,&E2,1)); 4004 if (E2Result.isInvalid()) 4005 return QualType(); 4006 E2 = E2Result.takeAs<Expr>(); 4007 4008 return Composite1; 4009 } 4010 4011 // Check whether Composite2 is viable. 4012 InitializedEntity Entity2 4013 = InitializedEntity::InitializeTemporary(Composite2); 4014 InitializationSequence E1ToC2(*this, Entity2, Kind, &E1, 1); 4015 InitializationSequence E2ToC2(*this, Entity2, Kind, &E2, 1); 4016 if (!E1ToC2 || !E2ToC2) 4017 return QualType(); 4018 4019 // Convert E1 to Composite2 4020 ExprResult E1Result 4021 = E1ToC2.Perform(*this, Entity2, Kind, MultiExprArg(*this, &E1, 1)); 4022 if (E1Result.isInvalid()) 4023 return QualType(); 4024 E1 = E1Result.takeAs<Expr>(); 4025 4026 // Convert E2 to Composite2 4027 ExprResult E2Result 4028 = E2ToC2.Perform(*this, Entity2, Kind, MultiExprArg(*this, &E2, 1)); 4029 if (E2Result.isInvalid()) 4030 return QualType(); 4031 E2 = E2Result.takeAs<Expr>(); 4032 4033 return Composite2; 4034} 4035 4036ExprResult Sema::MaybeBindToTemporary(Expr *E) { 4037 if (!E) 4038 return ExprError(); 4039 4040 assert(!isa<CXXBindTemporaryExpr>(E) && "Double-bound temporary?"); 4041 4042 // If the result is a glvalue, we shouldn't bind it. 4043 if (!E->isRValue()) 4044 return Owned(E); 4045 4046 // In ARC, calls that return a retainable type can return retained, 4047 // in which case we have to insert a consuming cast. 4048 if (getLangOptions().ObjCAutoRefCount && 4049 E->getType()->isObjCRetainableType()) { 4050 4051 bool ReturnsRetained; 4052 4053 // For actual calls, we compute this by examining the type of the 4054 // called value. 4055 if (CallExpr *Call = dyn_cast<CallExpr>(E)) { 4056 Expr *Callee = Call->getCallee()->IgnoreParens(); 4057 QualType T = Callee->getType(); 4058 4059 if (T == Context.BoundMemberTy) { 4060 // Handle pointer-to-members. 4061 if (BinaryOperator *BinOp = dyn_cast<BinaryOperator>(Callee)) 4062 T = BinOp->getRHS()->getType(); 4063 else if (MemberExpr *Mem = dyn_cast<MemberExpr>(Callee)) 4064 T = Mem->getMemberDecl()->getType(); 4065 } 4066 4067 if (const PointerType *Ptr = T->getAs<PointerType>()) 4068 T = Ptr->getPointeeType(); 4069 else if (const BlockPointerType *Ptr = T->getAs<BlockPointerType>()) 4070 T = Ptr->getPointeeType(); 4071 else if (const MemberPointerType *MemPtr = T->getAs<MemberPointerType>()) 4072 T = MemPtr->getPointeeType(); 4073 4074 const FunctionType *FTy = T->getAs<FunctionType>(); 4075 assert(FTy && "call to value not of function type?"); 4076 ReturnsRetained = FTy->getExtInfo().getProducesResult(); 4077 4078 // ActOnStmtExpr arranges things so that StmtExprs of retainable 4079 // type always produce a +1 object. 4080 } else if (isa<StmtExpr>(E)) { 4081 ReturnsRetained = true; 4082 4083 // For message sends and property references, we try to find an 4084 // actual method. FIXME: we should infer retention by selector in 4085 // cases where we don't have an actual method. 4086 } else { 4087 ObjCMethodDecl *D = 0; 4088 if (ObjCMessageExpr *Send = dyn_cast<ObjCMessageExpr>(E)) { 4089 D = Send->getMethodDecl(); 4090 } else { 4091 CastExpr *CE = cast<CastExpr>(E); 4092 assert(CE->getCastKind() == CK_GetObjCProperty); 4093 const ObjCPropertyRefExpr *PRE = CE->getSubExpr()->getObjCProperty(); 4094 D = (PRE->isImplicitProperty() ? PRE->getImplicitPropertyGetter() : 0); 4095 } 4096 4097 ReturnsRetained = (D && D->hasAttr<NSReturnsRetainedAttr>()); 4098 4099 // Don't do reclaims on performSelector calls; despite their 4100 // return type, the invoked method doesn't necessarily actually 4101 // return an object. 4102 if (!ReturnsRetained && 4103 D && D->getMethodFamily() == OMF_performSelector) 4104 return Owned(E); 4105 } 4106 4107 ExprNeedsCleanups = true; 4108 4109 CastKind ck = (ReturnsRetained ? CK_ARCConsumeObject 4110 : CK_ARCReclaimReturnedObject); 4111 return Owned(ImplicitCastExpr::Create(Context, E->getType(), ck, E, 0, 4112 VK_RValue)); 4113 } 4114 4115 if (!getLangOptions().CPlusPlus) 4116 return Owned(E); 4117 4118 const RecordType *RT = E->getType()->getAs<RecordType>(); 4119 if (!RT) 4120 return Owned(E); 4121 4122 // That should be enough to guarantee that this type is complete. 4123 // If it has a trivial destructor, we can avoid the extra copy. 4124 CXXRecordDecl *RD = cast<CXXRecordDecl>(RT->getDecl()); 4125 if (RD->isInvalidDecl() || RD->hasTrivialDestructor()) 4126 return Owned(E); 4127 4128 CXXDestructorDecl *Destructor = LookupDestructor(RD); 4129 4130 CXXTemporary *Temp = CXXTemporary::Create(Context, Destructor); 4131 if (Destructor) { 4132 MarkDeclarationReferenced(E->getExprLoc(), Destructor); 4133 CheckDestructorAccess(E->getExprLoc(), Destructor, 4134 PDiag(diag::err_access_dtor_temp) 4135 << E->getType()); 4136 4137 ExprTemporaries.push_back(Temp); 4138 ExprNeedsCleanups = true; 4139 } 4140 return Owned(CXXBindTemporaryExpr::Create(Context, Temp, E)); 4141} 4142 4143Expr *Sema::MaybeCreateExprWithCleanups(Expr *SubExpr) { 4144 assert(SubExpr && "sub expression can't be null!"); 4145 4146 unsigned FirstTemporary = ExprEvalContexts.back().NumTemporaries; 4147 assert(ExprTemporaries.size() >= FirstTemporary); 4148 assert(ExprNeedsCleanups || ExprTemporaries.size() == FirstTemporary); 4149 if (!ExprNeedsCleanups) 4150 return SubExpr; 4151 4152 Expr *E = ExprWithCleanups::Create(Context, SubExpr, 4153 ExprTemporaries.begin() + FirstTemporary, 4154 ExprTemporaries.size() - FirstTemporary); 4155 ExprTemporaries.erase(ExprTemporaries.begin() + FirstTemporary, 4156 ExprTemporaries.end()); 4157 ExprNeedsCleanups = false; 4158 4159 return E; 4160} 4161 4162ExprResult 4163Sema::MaybeCreateExprWithCleanups(ExprResult SubExpr) { 4164 if (SubExpr.isInvalid()) 4165 return ExprError(); 4166 4167 return Owned(MaybeCreateExprWithCleanups(SubExpr.take())); 4168} 4169 4170Stmt *Sema::MaybeCreateStmtWithCleanups(Stmt *SubStmt) { 4171 assert(SubStmt && "sub statement can't be null!"); 4172 4173 if (!ExprNeedsCleanups) 4174 return SubStmt; 4175 4176 // FIXME: In order to attach the temporaries, wrap the statement into 4177 // a StmtExpr; currently this is only used for asm statements. 4178 // This is hacky, either create a new CXXStmtWithTemporaries statement or 4179 // a new AsmStmtWithTemporaries. 4180 CompoundStmt *CompStmt = new (Context) CompoundStmt(Context, &SubStmt, 1, 4181 SourceLocation(), 4182 SourceLocation()); 4183 Expr *E = new (Context) StmtExpr(CompStmt, Context.VoidTy, SourceLocation(), 4184 SourceLocation()); 4185 return MaybeCreateExprWithCleanups(E); 4186} 4187 4188ExprResult 4189Sema::ActOnStartCXXMemberReference(Scope *S, Expr *Base, SourceLocation OpLoc, 4190 tok::TokenKind OpKind, ParsedType &ObjectType, 4191 bool &MayBePseudoDestructor) { 4192 // Since this might be a postfix expression, get rid of ParenListExprs. 4193 ExprResult Result = MaybeConvertParenListExprToParenExpr(S, Base); 4194 if (Result.isInvalid()) return ExprError(); 4195 Base = Result.get(); 4196 4197 QualType BaseType = Base->getType(); 4198 MayBePseudoDestructor = false; 4199 if (BaseType->isDependentType()) { 4200 // If we have a pointer to a dependent type and are using the -> operator, 4201 // the object type is the type that the pointer points to. We might still 4202 // have enough information about that type to do something useful. 4203 if (OpKind == tok::arrow) 4204 if (const PointerType *Ptr = BaseType->getAs<PointerType>()) 4205 BaseType = Ptr->getPointeeType(); 4206 4207 ObjectType = ParsedType::make(BaseType); 4208 MayBePseudoDestructor = true; 4209 return Owned(Base); 4210 } 4211 4212 // C++ [over.match.oper]p8: 4213 // [...] When operator->returns, the operator-> is applied to the value 4214 // returned, with the original second operand. 4215 if (OpKind == tok::arrow) { 4216 // The set of types we've considered so far. 4217 llvm::SmallPtrSet<CanQualType,8> CTypes; 4218 SmallVector<SourceLocation, 8> Locations; 4219 CTypes.insert(Context.getCanonicalType(BaseType)); 4220 4221 while (BaseType->isRecordType()) { 4222 Result = BuildOverloadedArrowExpr(S, Base, OpLoc); 4223 if (Result.isInvalid()) 4224 return ExprError(); 4225 Base = Result.get(); 4226 if (CXXOperatorCallExpr *OpCall = dyn_cast<CXXOperatorCallExpr>(Base)) 4227 Locations.push_back(OpCall->getDirectCallee()->getLocation()); 4228 BaseType = Base->getType(); 4229 CanQualType CBaseType = Context.getCanonicalType(BaseType); 4230 if (!CTypes.insert(CBaseType)) { 4231 Diag(OpLoc, diag::err_operator_arrow_circular); 4232 for (unsigned i = 0; i < Locations.size(); i++) 4233 Diag(Locations[i], diag::note_declared_at); 4234 return ExprError(); 4235 } 4236 } 4237 4238 if (BaseType->isPointerType()) 4239 BaseType = BaseType->getPointeeType(); 4240 } 4241 4242 // We could end up with various non-record types here, such as extended 4243 // vector types or Objective-C interfaces. Just return early and let 4244 // ActOnMemberReferenceExpr do the work. 4245 if (!BaseType->isRecordType()) { 4246 // C++ [basic.lookup.classref]p2: 4247 // [...] If the type of the object expression is of pointer to scalar 4248 // type, the unqualified-id is looked up in the context of the complete 4249 // postfix-expression. 4250 // 4251 // This also indicates that we should be parsing a 4252 // pseudo-destructor-name. 4253 ObjectType = ParsedType(); 4254 MayBePseudoDestructor = true; 4255 return Owned(Base); 4256 } 4257 4258 // The object type must be complete (or dependent). 4259 if (!BaseType->isDependentType() && 4260 RequireCompleteType(OpLoc, BaseType, 4261 PDiag(diag::err_incomplete_member_access))) 4262 return ExprError(); 4263 4264 // C++ [basic.lookup.classref]p2: 4265 // If the id-expression in a class member access (5.2.5) is an 4266 // unqualified-id, and the type of the object expression is of a class 4267 // type C (or of pointer to a class type C), the unqualified-id is looked 4268 // up in the scope of class C. [...] 4269 ObjectType = ParsedType::make(BaseType); 4270 return move(Base); 4271} 4272 4273ExprResult Sema::DiagnoseDtorReference(SourceLocation NameLoc, 4274 Expr *MemExpr) { 4275 SourceLocation ExpectedLParenLoc = PP.getLocForEndOfToken(NameLoc); 4276 Diag(MemExpr->getLocStart(), diag::err_dtor_expr_without_call) 4277 << isa<CXXPseudoDestructorExpr>(MemExpr) 4278 << FixItHint::CreateInsertion(ExpectedLParenLoc, "()"); 4279 4280 return ActOnCallExpr(/*Scope*/ 0, 4281 MemExpr, 4282 /*LPLoc*/ ExpectedLParenLoc, 4283 MultiExprArg(), 4284 /*RPLoc*/ ExpectedLParenLoc); 4285} 4286 4287ExprResult Sema::BuildPseudoDestructorExpr(Expr *Base, 4288 SourceLocation OpLoc, 4289 tok::TokenKind OpKind, 4290 const CXXScopeSpec &SS, 4291 TypeSourceInfo *ScopeTypeInfo, 4292 SourceLocation CCLoc, 4293 SourceLocation TildeLoc, 4294 PseudoDestructorTypeStorage Destructed, 4295 bool HasTrailingLParen) { 4296 TypeSourceInfo *DestructedTypeInfo = Destructed.getTypeSourceInfo(); 4297 4298 // C++ [expr.pseudo]p2: 4299 // The left-hand side of the dot operator shall be of scalar type. The 4300 // left-hand side of the arrow operator shall be of pointer to scalar type. 4301 // This scalar type is the object type. 4302 QualType ObjectType = Base->getType(); 4303 if (OpKind == tok::arrow) { 4304 if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) { 4305 ObjectType = Ptr->getPointeeType(); 4306 } else if (!Base->isTypeDependent()) { 4307 // The user wrote "p->" when she probably meant "p."; fix it. 4308 Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) 4309 << ObjectType << true 4310 << FixItHint::CreateReplacement(OpLoc, "."); 4311 if (isSFINAEContext()) 4312 return ExprError(); 4313 4314 OpKind = tok::period; 4315 } 4316 } 4317 4318 if (!ObjectType->isDependentType() && !ObjectType->isScalarType()) { 4319 Diag(OpLoc, diag::err_pseudo_dtor_base_not_scalar) 4320 << ObjectType << Base->getSourceRange(); 4321 return ExprError(); 4322 } 4323 4324 // C++ [expr.pseudo]p2: 4325 // [...] The cv-unqualified versions of the object type and of the type 4326 // designated by the pseudo-destructor-name shall be the same type. 4327 if (DestructedTypeInfo) { 4328 QualType DestructedType = DestructedTypeInfo->getType(); 4329 SourceLocation DestructedTypeStart 4330 = DestructedTypeInfo->getTypeLoc().getLocalSourceRange().getBegin(); 4331 if (!DestructedType->isDependentType() && !ObjectType->isDependentType()) { 4332 if (!Context.hasSameUnqualifiedType(DestructedType, ObjectType)) { 4333 Diag(DestructedTypeStart, diag::err_pseudo_dtor_type_mismatch) 4334 << ObjectType << DestructedType << Base->getSourceRange() 4335 << DestructedTypeInfo->getTypeLoc().getLocalSourceRange(); 4336 4337 // Recover by setting the destructed type to the object type. 4338 DestructedType = ObjectType; 4339 DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType, 4340 DestructedTypeStart); 4341 Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo); 4342 } else if (DestructedType.getObjCLifetime() != 4343 ObjectType.getObjCLifetime()) { 4344 4345 if (DestructedType.getObjCLifetime() == Qualifiers::OCL_None) { 4346 // Okay: just pretend that the user provided the correctly-qualified 4347 // type. 4348 } else { 4349 Diag(DestructedTypeStart, diag::err_arc_pseudo_dtor_inconstant_quals) 4350 << ObjectType << DestructedType << Base->getSourceRange() 4351 << DestructedTypeInfo->getTypeLoc().getLocalSourceRange(); 4352 } 4353 4354 // Recover by setting the destructed type to the object type. 4355 DestructedType = ObjectType; 4356 DestructedTypeInfo = Context.getTrivialTypeSourceInfo(ObjectType, 4357 DestructedTypeStart); 4358 Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo); 4359 } 4360 } 4361 } 4362 4363 // C++ [expr.pseudo]p2: 4364 // [...] Furthermore, the two type-names in a pseudo-destructor-name of the 4365 // form 4366 // 4367 // ::[opt] nested-name-specifier[opt] type-name :: ~ type-name 4368 // 4369 // shall designate the same scalar type. 4370 if (ScopeTypeInfo) { 4371 QualType ScopeType = ScopeTypeInfo->getType(); 4372 if (!ScopeType->isDependentType() && !ObjectType->isDependentType() && 4373 !Context.hasSameUnqualifiedType(ScopeType, ObjectType)) { 4374 4375 Diag(ScopeTypeInfo->getTypeLoc().getLocalSourceRange().getBegin(), 4376 diag::err_pseudo_dtor_type_mismatch) 4377 << ObjectType << ScopeType << Base->getSourceRange() 4378 << ScopeTypeInfo->getTypeLoc().getLocalSourceRange(); 4379 4380 ScopeType = QualType(); 4381 ScopeTypeInfo = 0; 4382 } 4383 } 4384 4385 Expr *Result 4386 = new (Context) CXXPseudoDestructorExpr(Context, Base, 4387 OpKind == tok::arrow, OpLoc, 4388 SS.getWithLocInContext(Context), 4389 ScopeTypeInfo, 4390 CCLoc, 4391 TildeLoc, 4392 Destructed); 4393 4394 if (HasTrailingLParen) 4395 return Owned(Result); 4396 4397 return DiagnoseDtorReference(Destructed.getLocation(), Result); 4398} 4399 4400ExprResult Sema::ActOnPseudoDestructorExpr(Scope *S, Expr *Base, 4401 SourceLocation OpLoc, 4402 tok::TokenKind OpKind, 4403 CXXScopeSpec &SS, 4404 UnqualifiedId &FirstTypeName, 4405 SourceLocation CCLoc, 4406 SourceLocation TildeLoc, 4407 UnqualifiedId &SecondTypeName, 4408 bool HasTrailingLParen) { 4409 assert((FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId || 4410 FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) && 4411 "Invalid first type name in pseudo-destructor"); 4412 assert((SecondTypeName.getKind() == UnqualifiedId::IK_TemplateId || 4413 SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) && 4414 "Invalid second type name in pseudo-destructor"); 4415 4416 // C++ [expr.pseudo]p2: 4417 // The left-hand side of the dot operator shall be of scalar type. The 4418 // left-hand side of the arrow operator shall be of pointer to scalar type. 4419 // This scalar type is the object type. 4420 QualType ObjectType = Base->getType(); 4421 if (OpKind == tok::arrow) { 4422 if (const PointerType *Ptr = ObjectType->getAs<PointerType>()) { 4423 ObjectType = Ptr->getPointeeType(); 4424 } else if (!ObjectType->isDependentType()) { 4425 // The user wrote "p->" when she probably meant "p."; fix it. 4426 Diag(OpLoc, diag::err_typecheck_member_reference_suggestion) 4427 << ObjectType << true 4428 << FixItHint::CreateReplacement(OpLoc, "."); 4429 if (isSFINAEContext()) 4430 return ExprError(); 4431 4432 OpKind = tok::period; 4433 } 4434 } 4435 4436 // Compute the object type that we should use for name lookup purposes. Only 4437 // record types and dependent types matter. 4438 ParsedType ObjectTypePtrForLookup; 4439 if (!SS.isSet()) { 4440 if (ObjectType->isRecordType()) 4441 ObjectTypePtrForLookup = ParsedType::make(ObjectType); 4442 else if (ObjectType->isDependentType()) 4443 ObjectTypePtrForLookup = ParsedType::make(Context.DependentTy); 4444 } 4445 4446 // Convert the name of the type being destructed (following the ~) into a 4447 // type (with source-location information). 4448 QualType DestructedType; 4449 TypeSourceInfo *DestructedTypeInfo = 0; 4450 PseudoDestructorTypeStorage Destructed; 4451 if (SecondTypeName.getKind() == UnqualifiedId::IK_Identifier) { 4452 ParsedType T = getTypeName(*SecondTypeName.Identifier, 4453 SecondTypeName.StartLocation, 4454 S, &SS, true, false, ObjectTypePtrForLookup); 4455 if (!T && 4456 ((SS.isSet() && !computeDeclContext(SS, false)) || 4457 (!SS.isSet() && ObjectType->isDependentType()))) { 4458 // The name of the type being destroyed is a dependent name, and we 4459 // couldn't find anything useful in scope. Just store the identifier and 4460 // it's location, and we'll perform (qualified) name lookup again at 4461 // template instantiation time. 4462 Destructed = PseudoDestructorTypeStorage(SecondTypeName.Identifier, 4463 SecondTypeName.StartLocation); 4464 } else if (!T) { 4465 Diag(SecondTypeName.StartLocation, 4466 diag::err_pseudo_dtor_destructor_non_type) 4467 << SecondTypeName.Identifier << ObjectType; 4468 if (isSFINAEContext()) 4469 return ExprError(); 4470 4471 // Recover by assuming we had the right type all along. 4472 DestructedType = ObjectType; 4473 } else 4474 DestructedType = GetTypeFromParser(T, &DestructedTypeInfo); 4475 } else { 4476 // Resolve the template-id to a type. 4477 TemplateIdAnnotation *TemplateId = SecondTypeName.TemplateId; 4478 ASTTemplateArgsPtr TemplateArgsPtr(*this, 4479 TemplateId->getTemplateArgs(), 4480 TemplateId->NumArgs); 4481 TypeResult T = ActOnTemplateIdType(TemplateId->SS, 4482 TemplateId->Template, 4483 TemplateId->TemplateNameLoc, 4484 TemplateId->LAngleLoc, 4485 TemplateArgsPtr, 4486 TemplateId->RAngleLoc); 4487 if (T.isInvalid() || !T.get()) { 4488 // Recover by assuming we had the right type all along. 4489 DestructedType = ObjectType; 4490 } else 4491 DestructedType = GetTypeFromParser(T.get(), &DestructedTypeInfo); 4492 } 4493 4494 // If we've performed some kind of recovery, (re-)build the type source 4495 // information. 4496 if (!DestructedType.isNull()) { 4497 if (!DestructedTypeInfo) 4498 DestructedTypeInfo = Context.getTrivialTypeSourceInfo(DestructedType, 4499 SecondTypeName.StartLocation); 4500 Destructed = PseudoDestructorTypeStorage(DestructedTypeInfo); 4501 } 4502 4503 // Convert the name of the scope type (the type prior to '::') into a type. 4504 TypeSourceInfo *ScopeTypeInfo = 0; 4505 QualType ScopeType; 4506 if (FirstTypeName.getKind() == UnqualifiedId::IK_TemplateId || 4507 FirstTypeName.Identifier) { 4508 if (FirstTypeName.getKind() == UnqualifiedId::IK_Identifier) { 4509 ParsedType T = getTypeName(*FirstTypeName.Identifier, 4510 FirstTypeName.StartLocation, 4511 S, &SS, true, false, ObjectTypePtrForLookup); 4512 if (!T) { 4513 Diag(FirstTypeName.StartLocation, 4514 diag::err_pseudo_dtor_destructor_non_type) 4515 << FirstTypeName.Identifier << ObjectType; 4516 4517 if (isSFINAEContext()) 4518 return ExprError(); 4519 4520 // Just drop this type. It's unnecessary anyway. 4521 ScopeType = QualType(); 4522 } else 4523 ScopeType = GetTypeFromParser(T, &ScopeTypeInfo); 4524 } else { 4525 // Resolve the template-id to a type. 4526 TemplateIdAnnotation *TemplateId = FirstTypeName.TemplateId; 4527 ASTTemplateArgsPtr TemplateArgsPtr(*this, 4528 TemplateId->getTemplateArgs(), 4529 TemplateId->NumArgs); 4530 TypeResult T = ActOnTemplateIdType(TemplateId->SS, 4531 TemplateId->Template, 4532 TemplateId->TemplateNameLoc, 4533 TemplateId->LAngleLoc, 4534 TemplateArgsPtr, 4535 TemplateId->RAngleLoc); 4536 if (T.isInvalid() || !T.get()) { 4537 // Recover by dropping this type. 4538 ScopeType = QualType(); 4539 } else 4540 ScopeType = GetTypeFromParser(T.get(), &ScopeTypeInfo); 4541 } 4542 } 4543 4544 if (!ScopeType.isNull() && !ScopeTypeInfo) 4545 ScopeTypeInfo = Context.getTrivialTypeSourceInfo(ScopeType, 4546 FirstTypeName.StartLocation); 4547 4548 4549 return BuildPseudoDestructorExpr(Base, OpLoc, OpKind, SS, 4550 ScopeTypeInfo, CCLoc, TildeLoc, 4551 Destructed, HasTrailingLParen); 4552} 4553 4554ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl, 4555 CXXMethodDecl *Method, 4556 bool HadMultipleCandidates) { 4557 ExprResult Exp = PerformObjectArgumentInitialization(E, /*Qualifier=*/0, 4558 FoundDecl, Method); 4559 if (Exp.isInvalid()) 4560 return true; 4561 4562 MemberExpr *ME = 4563 new (Context) MemberExpr(Exp.take(), /*IsArrow=*/false, Method, 4564 SourceLocation(), Method->getType(), 4565 VK_RValue, OK_Ordinary); 4566 if (HadMultipleCandidates) 4567 ME->setHadMultipleCandidates(true); 4568 4569 QualType ResultType = Method->getResultType(); 4570 ExprValueKind VK = Expr::getValueKindForType(ResultType); 4571 ResultType = ResultType.getNonLValueExprType(Context); 4572 4573 MarkDeclarationReferenced(Exp.get()->getLocStart(), Method); 4574 CXXMemberCallExpr *CE = 4575 new (Context) CXXMemberCallExpr(Context, ME, 0, 0, ResultType, VK, 4576 Exp.get()->getLocEnd()); 4577 return CE; 4578} 4579 4580ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand, 4581 SourceLocation RParen) { 4582 return Owned(new (Context) CXXNoexceptExpr(Context.BoolTy, Operand, 4583 Operand->CanThrow(Context), 4584 KeyLoc, RParen)); 4585} 4586 4587ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation, 4588 Expr *Operand, SourceLocation RParen) { 4589 return BuildCXXNoexceptExpr(KeyLoc, Operand, RParen); 4590} 4591 4592/// Perform the conversions required for an expression used in a 4593/// context that ignores the result. 4594ExprResult Sema::IgnoredValueConversions(Expr *E) { 4595 // C99 6.3.2.1: 4596 // [Except in specific positions,] an lvalue that does not have 4597 // array type is converted to the value stored in the 4598 // designated object (and is no longer an lvalue). 4599 if (E->isRValue()) { 4600 // In C, function designators (i.e. expressions of function type) 4601 // are r-values, but we still want to do function-to-pointer decay 4602 // on them. This is both technically correct and convenient for 4603 // some clients. 4604 if (!getLangOptions().CPlusPlus && E->getType()->isFunctionType()) 4605 return DefaultFunctionArrayConversion(E); 4606 4607 return Owned(E); 4608 } 4609 4610 // We always want to do this on ObjC property references. 4611 if (E->getObjectKind() == OK_ObjCProperty) { 4612 ExprResult Res = ConvertPropertyForRValue(E); 4613 if (Res.isInvalid()) return Owned(E); 4614 E = Res.take(); 4615 if (E->isRValue()) return Owned(E); 4616 } 4617 4618 // Otherwise, this rule does not apply in C++, at least not for the moment. 4619 if (getLangOptions().CPlusPlus) return Owned(E); 4620 4621 // GCC seems to also exclude expressions of incomplete enum type. 4622 if (const EnumType *T = E->getType()->getAs<EnumType>()) { 4623 if (!T->getDecl()->isComplete()) { 4624 // FIXME: stupid workaround for a codegen bug! 4625 E = ImpCastExprToType(E, Context.VoidTy, CK_ToVoid).take(); 4626 return Owned(E); 4627 } 4628 } 4629 4630 ExprResult Res = DefaultFunctionArrayLvalueConversion(E); 4631 if (Res.isInvalid()) 4632 return Owned(E); 4633 E = Res.take(); 4634 4635 if (!E->getType()->isVoidType()) 4636 RequireCompleteType(E->getExprLoc(), E->getType(), 4637 diag::err_incomplete_type); 4638 return Owned(E); 4639} 4640 4641ExprResult Sema::ActOnFinishFullExpr(Expr *FE) { 4642 ExprResult FullExpr = Owned(FE); 4643 4644 if (!FullExpr.get()) 4645 return ExprError(); 4646 4647 if (DiagnoseUnexpandedParameterPack(FullExpr.get())) 4648 return ExprError(); 4649 4650 FullExpr = CheckPlaceholderExpr(FullExpr.take()); 4651 if (FullExpr.isInvalid()) 4652 return ExprError(); 4653 4654 FullExpr = IgnoredValueConversions(FullExpr.take()); 4655 if (FullExpr.isInvalid()) 4656 return ExprError(); 4657 4658 CheckImplicitConversions(FullExpr.get(), FullExpr.get()->getExprLoc()); 4659 return MaybeCreateExprWithCleanups(FullExpr); 4660} 4661 4662StmtResult Sema::ActOnFinishFullStmt(Stmt *FullStmt) { 4663 if (!FullStmt) return StmtError(); 4664 4665 return MaybeCreateStmtWithCleanups(FullStmt); 4666} 4667 4668bool Sema::CheckMicrosoftIfExistsSymbol(CXXScopeSpec &SS, 4669 UnqualifiedId &Name) { 4670 DeclarationNameInfo TargetNameInfo = GetNameFromUnqualifiedId(Name); 4671 DeclarationName TargetName = TargetNameInfo.getName(); 4672 if (!TargetName) 4673 return false; 4674 4675 // Do the redeclaration lookup in the current scope. 4676 LookupResult R(*this, TargetNameInfo, Sema::LookupAnyName, 4677 Sema::NotForRedeclaration); 4678 R.suppressDiagnostics(); 4679 LookupParsedName(R, getCurScope(), &SS); 4680 return !R.empty(); 4681} 4682