diff options
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 212 |
1 files changed, 102 insertions, 110 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index b961eba1989..a7753c51ef2 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -94,17 +94,17 @@ namespace { // evaluated. Parameters of a function declared before a default // argument expression are in scope and can hide namespace and // class member names. - return S->Diag(DRE->getLocStart(), + return S->Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_param) - << Param->getDeclName() << DefaultArg->getSourceRange(); + << Param->getDeclName() << DefaultArg->getSourceRange(); } else if (VarDecl *VDecl = dyn_cast<VarDecl>(Decl)) { // C++ [dcl.fct.default]p7 // Local variables shall not be used in default argument // expressions. if (VDecl->isLocalVarDecl()) - return S->Diag(DRE->getLocStart(), + return S->Diag(DRE->getBeginLoc(), diag::err_param_default_argument_references_local) - << VDecl->getDeclName() << DefaultArg->getSourceRange(); + << VDecl->getDeclName() << DefaultArg->getSourceRange(); } return false; @@ -115,9 +115,9 @@ namespace { // C++ [dcl.fct.default]p8: // The keyword this shall not be used in a default argument of a // member function. - return S->Diag(ThisE->getLocStart(), + return S->Diag(ThisE->getBeginLoc(), diag::err_param_default_argument_references_this) - << ThisE->getSourceRange(); + << ThisE->getSourceRange(); } bool CheckDefaultArgumentVisitor::VisitPseudoObjectExpr(PseudoObjectExpr *POE) { @@ -144,8 +144,7 @@ namespace { if (Lambda->capture_begin() == Lambda->capture_end()) return false; - return S->Diag(Lambda->getLocStart(), - diag::err_lambda_capture_default_arg); + return S->Diag(Lambda->getBeginLoc(), diag::err_lambda_capture_default_arg); } } @@ -1283,9 +1282,9 @@ static const CXXRecordDecl *findDecomposableBaseClass(Sema &S, << RD << BaseType; for (auto &BS : *BestPath) { if (BS.Base->getAccessSpecifier() != AS_public) { - S.Diag(BS.Base->getLocStart(), diag::note_access_constrained_by_path) - << (BS.Base->getAccessSpecifier() == AS_protected) - << (BS.Base->getAccessSpecifierAsWritten() == AS_none); + S.Diag(BS.Base->getBeginLoc(), diag::note_access_constrained_by_path) + << (BS.Base->getAccessSpecifier() == AS_protected) + << (BS.Base->getAccessSpecifierAsWritten() == AS_none); break; } } @@ -1619,8 +1618,8 @@ bool Sema::CheckConstexprFunctionDecl(const FunctionDecl *NewFD) { << isa<CXXConstructorDecl>(NewFD) << getRecordDiagFromTagKind(RD->getTagKind()) << RD->getNumVBases(); for (const auto &I : RD->vbases()) - Diag(I.getLocStart(), - diag::note_constexpr_virtual_base_here) << I.getSourceRange(); + Diag(I.getBeginLoc(), diag::note_constexpr_virtual_base_here) + << I.getSourceRange(); return false; } } @@ -1704,11 +1703,11 @@ static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, case Decl::CXXRecord: // C++1y allows types to be defined, not just declared. if (cast<TagDecl>(DclIt)->isThisDeclarationADefinition()) - SemaRef.Diag(DS->getLocStart(), + SemaRef.Diag(DS->getBeginLoc(), SemaRef.getLangOpts().CPlusPlus14 - ? diag::warn_cxx11_compat_constexpr_type_definition - : diag::ext_constexpr_type_definition) - << isa<CXXConstructorDecl>(Dcl); + ? diag::warn_cxx11_compat_constexpr_type_definition + : diag::ext_constexpr_type_definition) + << isa<CXXConstructorDecl>(Dcl); continue; case Decl::EnumConstant: @@ -1759,12 +1758,12 @@ static bool CheckConstexprDeclStmt(Sema &SemaRef, const FunctionDecl *Dcl, // These are disallowed in C++11 and permitted in C++1y. Allow them // everywhere as an extension. if (!Cxx1yLoc.isValid()) - Cxx1yLoc = DS->getLocStart(); + Cxx1yLoc = DS->getBeginLoc(); continue; default: - SemaRef.Diag(DS->getLocStart(), diag::err_constexpr_body_invalid_stmt) - << isa<CXXConstructorDecl>(Dcl); + SemaRef.Diag(DS->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) + << isa<CXXConstructorDecl>(Dcl); return false; } } @@ -1843,17 +1842,17 @@ CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, if (isa<CXXConstructorDecl>(Dcl)) { // C++1y allows return statements in constexpr constructors. if (!Cxx1yLoc.isValid()) - Cxx1yLoc = S->getLocStart(); + Cxx1yLoc = S->getBeginLoc(); return true; } - ReturnStmts.push_back(S->getLocStart()); + ReturnStmts.push_back(S->getBeginLoc()); return true; case Stmt::CompoundStmtClass: { // C++1y allows compound-statements. if (!Cxx1yLoc.isValid()) - Cxx1yLoc = S->getLocStart(); + Cxx1yLoc = S->getBeginLoc(); CompoundStmt *CompStmt = cast<CompoundStmt>(S); for (auto *BodyIt : CompStmt->body()) { @@ -1866,13 +1865,13 @@ CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, case Stmt::AttributedStmtClass: if (!Cxx1yLoc.isValid()) - Cxx1yLoc = S->getLocStart(); + Cxx1yLoc = S->getBeginLoc(); return true; case Stmt::IfStmtClass: { // C++1y allows if-statements. if (!Cxx1yLoc.isValid()) - Cxx1yLoc = S->getLocStart(); + Cxx1yLoc = S->getBeginLoc(); IfStmt *If = cast<IfStmt>(S); if (!CheckConstexprFunctionStmt(SemaRef, Dcl, If->getThen(), ReturnStmts, @@ -1895,7 +1894,7 @@ CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, if (!SemaRef.getLangOpts().CPlusPlus14) break; if (!Cxx1yLoc.isValid()) - Cxx1yLoc = S->getLocStart(); + Cxx1yLoc = S->getBeginLoc(); for (Stmt *SubStmt : S->children()) if (SubStmt && !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts, @@ -1910,7 +1909,7 @@ CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, // C++1y allows switch-statements, and since they don't need variable // mutation, we can reasonably allow them in C++11 as an extension. if (!Cxx1yLoc.isValid()) - Cxx1yLoc = S->getLocStart(); + Cxx1yLoc = S->getBeginLoc(); for (Stmt *SubStmt : S->children()) if (SubStmt && !CheckConstexprFunctionStmt(SemaRef, Dcl, SubStmt, ReturnStmts, @@ -1924,12 +1923,12 @@ CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, // C++1y allows expression-statements. if (!Cxx1yLoc.isValid()) - Cxx1yLoc = S->getLocStart(); + Cxx1yLoc = S->getBeginLoc(); return true; } - SemaRef.Diag(S->getLocStart(), diag::err_constexpr_body_invalid_stmt) - << isa<CXXConstructorDecl>(Dcl); + SemaRef.Diag(S->getBeginLoc(), diag::err_constexpr_body_invalid_stmt) + << isa<CXXConstructorDecl>(Dcl); return false; } @@ -1948,8 +1947,8 @@ bool Sema::CheckConstexprFunctionBody(const FunctionDecl *Dcl, Stmt *Body) { // C++11 [dcl.constexpr]p4: // In the definition of a constexpr constructor, [...] // - its function-body shall not be a function-try-block; - Diag(Body->getLocStart(), diag::err_constexpr_function_try_block) - << isa<CXXConstructorDecl>(Dcl); + Diag(Body->getBeginLoc(), diag::err_constexpr_function_try_block) + << isa<CXXConstructorDecl>(Dcl); return false; } @@ -2408,10 +2407,8 @@ bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, // C++ [class.mi]p3: // A class shall not be specified as a direct base class of a // derived class more than once. - Diag(Bases[idx]->getLocStart(), - diag::err_duplicate_base_class) - << KnownBase->getType() - << Bases[idx]->getSourceRange(); + Diag(Bases[idx]->getBeginLoc(), diag::err_duplicate_base_class) + << KnownBase->getType() << Bases[idx]->getSourceRange(); // Delete the duplicate base class specifier; we're going to // overwrite its pointer later. @@ -2434,9 +2431,9 @@ bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, KnownBase->getAccessSpecifier() != AS_public)) { // The Microsoft extension __interface does not permit bases that // are not themselves public interfaces. - Diag(KnownBase->getLocStart(), diag::err_invalid_base_in_interface) - << getRecordDiagFromTagKind(RD->getTagKind()) << RD - << RD->getSourceRange(); + Diag(KnownBase->getBeginLoc(), diag::err_invalid_base_in_interface) + << getRecordDiagFromTagKind(RD->getTagKind()) << RD + << RD->getSourceRange(); Invalid = true; } if (RD->hasAttr<WeakAttr>()) @@ -2470,9 +2467,9 @@ bool Sema::AttachBaseSpecifiers(CXXRecordDecl *Class, (void)found; if (Paths.isAmbiguous(CanonicalBase)) - Diag(Bases[idx]->getLocStart (), diag::warn_inaccessible_base_class) - << BaseType << getAmbiguousPathsDisplayString(Paths) - << Bases[idx]->getSourceRange(); + Diag(Bases[idx]->getBeginLoc(), diag::warn_inaccessible_base_class) + << BaseType << getAmbiguousPathsDisplayString(Paths) + << Bases[idx]->getSourceRange(); else assert(Bases[idx]->isVirtual()); } @@ -2919,7 +2916,7 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, // For anonymous bitfields, the location should point to the type. if (Loc.isInvalid()) - Loc = D.getLocStart(); + Loc = D.getBeginLoc(); Expr *BitWidth = static_cast<Expr*>(BW); @@ -3157,17 +3154,17 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D, if (auto *DG = dyn_cast<CXXDeductionGuideDecl>(NonTemplateMember)) { auto *TD = DG->getDeducedTemplate(); if (AS != TD->getAccess()) { - Diag(DG->getLocStart(), diag::err_deduction_guide_wrong_access); - Diag(TD->getLocStart(), diag::note_deduction_guide_template_access) - << TD->getAccess(); + Diag(DG->getBeginLoc(), diag::err_deduction_guide_wrong_access); + Diag(TD->getBeginLoc(), diag::note_deduction_guide_template_access) + << TD->getAccess(); const AccessSpecDecl *LastAccessSpec = nullptr; for (const auto *D : cast<CXXRecordDecl>(CurContext)->decls()) { if (const auto *AccessSpec = dyn_cast<AccessSpecDecl>(D)) LastAccessSpec = AccessSpec; } assert(LastAccessSpec && "differing access with no access specifier"); - Diag(LastAccessSpec->getLocStart(), diag::note_deduction_guide_access) - << AS; + Diag(LastAccessSpec->getBeginLoc(), diag::note_deduction_guide_access) + << AS; } } } @@ -3651,10 +3648,10 @@ void Sema::ActOnFinishCXXInClassMemberInitializer(Decl *D, InitializedEntity::InitializeMemberFromDefaultMemberInitializer(FD); InitializationKind Kind = FD->getInClassInitStyle() == ICIS_ListInit - ? InitializationKind::CreateDirectList(InitExpr->getLocStart(), - InitExpr->getLocStart(), + ? InitializationKind::CreateDirectList(InitExpr->getBeginLoc(), + InitExpr->getBeginLoc(), InitExpr->getLocEnd()) - : InitializationKind::CreateCopy(InitExpr->getLocStart(), InitLoc); + : InitializationKind::CreateCopy(InitExpr->getBeginLoc(), InitLoc); InitializationSequence Seq(*this, Entity, Kind, InitExpr); Init = Seq.Perform(*this, Entity, Kind, InitExpr); if (Init.isInvalid()) { @@ -3921,10 +3918,8 @@ Sema::BuildMemInitializer(Decl *ConstructorD, const CXXBaseSpecifier *BaseSpec = DirectBaseSpec ? DirectBaseSpec : VirtualBaseSpec; - Diag(BaseSpec->getLocStart(), - diag::note_base_class_specified_here) - << BaseSpec->getType() - << BaseSpec->getSourceRange(); + Diag(BaseSpec->getBeginLoc(), diag::note_base_class_specified_here) + << BaseSpec->getType() << BaseSpec->getSourceRange(); TyD = Type; } @@ -4003,7 +3998,7 @@ Sema::BuildMemberInitializer(ValueDecl *Member, Expr *Init, nullptr); InitializationKind Kind = InitList ? InitializationKind::CreateDirectList( - IdLoc, Init->getLocStart(), Init->getLocEnd()) + IdLoc, Init->getBeginLoc(), Init->getLocEnd()) : InitializationKind::CreateDirect(IdLoc, InitRange.getBegin(), InitRange.getEnd()); @@ -4056,7 +4051,7 @@ Sema::BuildDelegatingInitializer(TypeSourceInfo *TInfo, Expr *Init, QualType(ClassDecl->getTypeForDecl(), 0)); InitializationKind Kind = InitList ? InitializationKind::CreateDirectList( - NameLoc, Init->getLocStart(), Init->getLocEnd()) + NameLoc, Init->getBeginLoc(), Init->getLocEnd()) : InitializationKind::CreateDirect(NameLoc, InitRange.getBegin(), InitRange.getEnd()); InitializationSequence InitSeq(*this, DelegationEntity, Kind, Args); @@ -4227,7 +4222,7 @@ static Expr *CastForMoving(Sema &SemaRef, Expr *E, QualType T = QualType()) { if (T.isNull()) T = E->getType(); QualType TargetType = SemaRef.BuildReferenceType( T, /*SpelledAsLValue*/false, SourceLocation(), DeclarationName()); - SourceLocation ExprLoc = E->getLocStart(); + SourceLocation ExprLoc = E->getBeginLoc(); TypeSourceInfo *TargetLoc = SemaRef.Context.getTrivialTypeSourceInfo( TargetType, ExprLoc); @@ -5184,10 +5179,9 @@ Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location, assert(Dtor && "No dtor found for BaseClassDecl!"); // FIXME: caret should be on the start of the class name - CheckDestructorAccess(Base.getLocStart(), Dtor, + CheckDestructorAccess(Base.getBeginLoc(), Dtor, PDiag(diag::err_access_dtor_base) - << Base.getType() - << Base.getSourceRange(), + << Base.getType() << Base.getSourceRange(), Context.getTypeDeclType(ClassDecl)); MarkFunctionReferenced(Location, Dtor); @@ -6555,7 +6549,7 @@ void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) { : isa<CXXConstructorDecl>(MD)) && MD->isConstexpr() && !Constexpr && MD->getTemplatedKind() == FunctionDecl::TK_NonTemplate) { - Diag(MD->getLocStart(), diag::err_incorrect_defaulted_constexpr) << CSM; + Diag(MD->getBeginLoc(), diag::err_incorrect_defaulted_constexpr) << CSM; // FIXME: Explain why the special member can't be constexpr. HadError = true; } @@ -6569,7 +6563,7 @@ void Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD) { // If the exception specification needs to be instantiated, do so now, // before we clobber it with an EST_Unevaluated specification below. if (Type->getExceptionSpecType() == EST_Uninstantiated) { - InstantiateExceptionSpec(MD->getLocStart(), MD); + InstantiateExceptionSpec(MD->getBeginLoc(), MD); Type = MD->getType()->getAs<FunctionProtoType>(); } DelayedDefaultedMemberExceptionSpecs.push_back(std::make_pair(MD, Type)); @@ -6871,10 +6865,10 @@ bool SpecialMemberDeletionInfo::shouldDeleteForSubobjectCall( << Field << DiagKind << IsDtorCallInCtor; } else { CXXBaseSpecifier *Base = Subobj.get<CXXBaseSpecifier*>(); - S.Diag(Base->getLocStart(), + S.Diag(Base->getBeginLoc(), diag::note_deleted_special_member_class_subobject) - << getEffectiveCSM() << MD->getParent() << /*IsField*/false - << Base->getType() << DiagKind << IsDtorCallInCtor; + << getEffectiveCSM() << MD->getParent() << /*IsField*/ false + << Base->getType() << DiagKind << IsDtorCallInCtor; } if (DiagKind == 1) @@ -6943,10 +6937,10 @@ bool SpecialMemberDeletionInfo::shouldDeleteForBase(CXXBaseSpecifier *Base) { // FIXME: Check that the base has a usable destructor! Sink this into // shouldDeleteForClassSubobject. if (BaseCtor->isDeleted() && Diagnose) { - S.Diag(Base->getLocStart(), + S.Diag(Base->getBeginLoc(), diag::note_deleted_special_member_class_subobject) - << getEffectiveCSM() << MD->getParent() << /*IsField*/false - << Base->getType() << /*Deleted*/1 << /*IsDtorCallInCtor*/false; + << getEffectiveCSM() << MD->getParent() << /*IsField*/ false + << Base->getType() << /*Deleted*/ 1 << /*IsDtorCallInCtor*/ false; S.NoteDeletedFunction(BaseCtor); } return BaseCtor->isDeleted(); @@ -7557,7 +7551,7 @@ bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, // -- all the direct base classes have trivial [default constructors or // destructors] for (const auto &BI : RD->bases()) - if (!checkTrivialSubobjectCall(*this, BI.getLocStart(), BI.getType(), + if (!checkTrivialSubobjectCall(*this, BI.getBeginLoc(), BI.getType(), ConstArg, CSM, TSK_BaseClass, TAH, Diagnose)) return false; @@ -7597,14 +7591,14 @@ bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM, // member in all bases is trivial, so vbases must all be direct. CXXBaseSpecifier &BS = *RD->vbases_begin(); assert(BS.isVirtual()); - Diag(BS.getLocStart(), diag::note_nontrivial_has_virtual) << RD << 1; + Diag(BS.getBeginLoc(), diag::note_nontrivial_has_virtual) << RD << 1; return false; } // Must have a virtual method. for (const auto *MI : RD->methods()) { if (MI->isVirtual()) { - SourceLocation MLoc = MI->getLocStart(); + SourceLocation MLoc = MI->getBeginLoc(); Diag(MLoc, diag::note_nontrivial_has_virtual) << RD << 0; return false; } @@ -8640,13 +8634,13 @@ void Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, if (Chunk.Kind == DeclaratorChunk::Paren) continue; if (Chunk.Kind != DeclaratorChunk::Function || FoundFunction) { - Diag(D.getDeclSpec().getLocStart(), - diag::err_deduction_guide_with_complex_decl) - << D.getSourceRange(); + Diag(D.getDeclSpec().getBeginLoc(), + diag::err_deduction_guide_with_complex_decl) + << D.getSourceRange(); break; } if (!Chunk.Fun.hasTrailingReturnType()) { - Diag(D.getName().getLocStart(), + Diag(D.getName().getBeginLoc(), diag::err_deduction_guide_no_trailing_return_type); break; } @@ -8678,10 +8672,11 @@ void Sema::CheckDeductionGuideDeclarator(Declarator &D, QualType &R, } if (!AcceptableReturnType) { - Diag(TSI->getTypeLoc().getLocStart(), + Diag(TSI->getTypeLoc().getBeginLoc(), diag::err_deduction_guide_bad_trailing_return_type) - << GuidedTemplate << TSI->getType() << MightInstantiateToSpecialization - << TSI->getTypeLoc().getSourceRange(); + << GuidedTemplate << TSI->getType() + << MightInstantiateToSpecialization + << TSI->getTypeLoc().getSourceRange(); } // Keep going to check that we don't have any inner declarator pieces (we @@ -9362,7 +9357,7 @@ Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, assert(S->getFlags() & Scope::DeclScope && "Invalid Scope."); if (SS.isEmpty()) { - Diag(Name.getLocStart(), diag::err_using_requires_qualname); + Diag(Name.getBeginLoc(), diag::err_using_requires_qualname); return nullptr; } @@ -9377,24 +9372,23 @@ Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, case UnqualifiedIdKind::IK_ConstructorName: case UnqualifiedIdKind::IK_ConstructorTemplateId: // C++11 inheriting constructors. - Diag(Name.getLocStart(), - getLangOpts().CPlusPlus11 ? - diag::warn_cxx98_compat_using_decl_constructor : - diag::err_using_decl_constructor) - << SS.getRange(); + Diag(Name.getBeginLoc(), + getLangOpts().CPlusPlus11 + ? diag::warn_cxx98_compat_using_decl_constructor + : diag::err_using_decl_constructor) + << SS.getRange(); if (getLangOpts().CPlusPlus11) break; return nullptr; case UnqualifiedIdKind::IK_DestructorName: - Diag(Name.getLocStart(), diag::err_using_decl_destructor) - << SS.getRange(); + Diag(Name.getBeginLoc(), diag::err_using_decl_destructor) << SS.getRange(); return nullptr; case UnqualifiedIdKind::IK_TemplateId: - Diag(Name.getLocStart(), diag::err_using_decl_template_id) - << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc); + Diag(Name.getBeginLoc(), diag::err_using_decl_template_id) + << SourceRange(Name.TemplateId->LAngleLoc, Name.TemplateId->RAngleLoc); return nullptr; case UnqualifiedIdKind::IK_DeductionGuideName: @@ -9408,10 +9402,10 @@ Decl *Sema::ActOnUsingDeclaration(Scope *S, AccessSpecifier AS, // Warn about access declarations. if (UsingLoc.isInvalid()) { - Diag(Name.getLocStart(), - getLangOpts().CPlusPlus11 ? diag::err_access_decl - : diag::warn_access_decl_deprecated) - << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using "); + Diag(Name.getBeginLoc(), getLangOpts().CPlusPlus11 + ? diag::err_access_decl + : diag::warn_access_decl_deprecated) + << FixItHint::CreateInsertion(SS.getRange().getBegin(), "using "); } if (EllipsisLoc.isInvalid()) { @@ -12113,14 +12107,14 @@ static void checkMoveAssignmentForRepeatedMove(Sema &S, CXXRecordDecl *Class, if (Existing && Existing != &BI) { S.Diag(CurrentLocation, diag::warn_vbase_moved_multiple_times) << Class << Base; - S.Diag(Existing->getLocStart(), diag::note_vbase_moved_here) - << (Base->getCanonicalDecl() == - Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl()) - << Base << Existing->getType() << Existing->getSourceRange(); - S.Diag(BI.getLocStart(), diag::note_vbase_moved_here) - << (Base->getCanonicalDecl() == - BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl()) - << Base << BI.getType() << BaseSpec->getSourceRange(); + S.Diag(Existing->getBeginLoc(), diag::note_vbase_moved_here) + << (Base->getCanonicalDecl() == + Existing->getType()->getAsCXXRecordDecl()->getCanonicalDecl()) + << Base << Existing->getType() << Existing->getSourceRange(); + S.Diag(BI.getBeginLoc(), diag::note_vbase_moved_here) + << (Base->getCanonicalDecl() == + BI.getType()->getAsCXXRecordDecl()->getCanonicalDecl()) + << Base << BI.getType() << BaseSpec->getSourceRange(); // Only diagnose each vbase once. Existing = nullptr; @@ -13724,10 +13718,8 @@ Decl *Sema::ActOnExceptionDeclarator(Scope *S, Declarator &D) { Invalid = true; } - VarDecl *ExDecl = BuildExceptionDeclaration(S, TInfo, - D.getLocStart(), - D.getIdentifierLoc(), - D.getIdentifier()); + VarDecl *ExDecl = BuildExceptionDeclaration( + S, TInfo, D.getBeginLoc(), D.getIdentifierLoc(), D.getIdentifier()); if (Invalid) ExDecl->setInvalidDecl(); @@ -13883,7 +13875,7 @@ FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, // cv-qualified) class type, that class is declared as a friend; otherwise, // the friend declaration is ignored. return FriendDecl::Create(Context, CurContext, - TSInfo->getTypeLoc().getLocStart(), TSInfo, + TSInfo->getTypeLoc().getBeginLoc(), TSInfo, FriendLoc); } @@ -14025,7 +14017,7 @@ Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, /// template <> template \<class T> friend class A<int>::B; Decl *Sema::ActOnFriendTypeDecl(Scope *S, const DeclSpec &DS, MultiTemplateParamsArg TempParams) { - SourceLocation Loc = DS.getLocStart(); + SourceLocation Loc = DS.getBeginLoc(); assert(DS.isFriendSpecified()); assert(DS.getStorageClassSpec() == DeclSpec::SCS_unspecified); @@ -14568,8 +14560,8 @@ static void SearchForReturnInStmt(Sema &Self, Stmt *S) { if (!SubStmt) continue; if (isa<ReturnStmt>(SubStmt)) - Self.Diag(SubStmt->getLocStart(), - diag::err_return_in_constructor_handler); + Self.Diag(SubStmt->getBeginLoc(), + diag::err_return_in_constructor_handler); if (!isa<Expr>(SubStmt)) SearchForReturnInStmt(Self, SubStmt); } @@ -15475,7 +15467,7 @@ MSPropertyDecl *Sema::HandleMSProperty(Scope *S, RecordDecl *Record, if (PrevDecl && !isDeclInScope(PrevDecl, Record, S)) PrevDecl = nullptr; - SourceLocation TSSL = D.getLocStart(); + SourceLocation TSSL = D.getBeginLoc(); MSPropertyDecl *NewPD = MSPropertyDecl::Create(Context, Record, Loc, II, T, TInfo, TSSL, MSPropertyAttr.getPropertyDataGetter(), |