diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/Decl.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 9f09898a957..6cfd4c2a2a2 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1820,6 +1820,12 @@ SourceLocation DeclaratorDecl::getTypeSpecStartLoc() const { return SourceLocation(); } +SourceLocation DeclaratorDecl::getTypeSpecEndLoc() const { + TypeSourceInfo *TSI = getTypeSourceInfo(); + if (TSI) return TSI->getTypeLoc().getEndLoc(); + return SourceLocation(); +} + void DeclaratorDecl::setQualifierInfo(NestedNameSpecifierLoc QualifierLoc) { if (QualifierLoc) { // Make sure the extended decl info is allocated. diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 05f7b30f139..959adbf1c35 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -2762,7 +2762,8 @@ static void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, QualType NewReferenceType = SemaRef.Context.getLValueReferenceType(E->getType().withConst()); SemaRef.Diag(VD->getBeginLoc(), diag::note_use_type_or_non_reference) - << NonReferenceType << NewReferenceType << VD->getSourceRange(); + << NonReferenceType << NewReferenceType << VD->getSourceRange() + << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc()); } else { // The range always returns a copy, so a temporary is always created. // Suggest removing the reference from the loop variable. @@ -2771,7 +2772,8 @@ static void DiagnoseForRangeReferenceVariableCopies(Sema &SemaRef, QualType NonReferenceType = VariableType.getNonReferenceType(); NonReferenceType.removeLocalConst(); SemaRef.Diag(VD->getBeginLoc(), diag::note_use_non_reference_type) - << NonReferenceType << VD->getSourceRange(); + << NonReferenceType << VD->getSourceRange() + << FixItHint::CreateRemoval(VD->getTypeSpecEndLoc()); } } @@ -2808,7 +2810,8 @@ static void DiagnoseForRangeConstVariableCopies(Sema &SemaRef, << VD << VariableType << InitExpr->getType(); SemaRef.Diag(VD->getBeginLoc(), diag::note_use_reference_type) << SemaRef.Context.getLValueReferenceType(VariableType) - << VD->getSourceRange(); + << VD->getSourceRange() + << FixItHint::CreateInsertion(VD->getLocation(), "&"); } /// DiagnoseForRangeVariableCopies - Diagnose three cases and fixes for them. |