From 4ad00b46fbb0bfe2530b6cdd8803937166bfa80f Mon Sep 17 00:00:00 2001 From: Edwin Vane Date: Sun, 17 Feb 2013 16:45:54 +0000 Subject: Fix -use-nullptr problems with assert() If a cast expression (NullToPointer) is detected in a function-like macro parameter, we should use the spelling location instead of the expansion location. Using SourceManager::getFileLoc() fixes this problem. Also added testcases for this bug. Fixes: PR15279 Author: Tareq A Siraj Reviewer: klimek llvm-svn: 175399 --- clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp') diff --git a/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp b/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp index 54ea3e8a0ad..22cdbc65e87 100644 --- a/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp +++ b/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp @@ -57,6 +57,10 @@ public: SourceLocation StartLoc = FirstCast->getLocStart(); SourceLocation EndLoc = FirstCast->getLocEnd(); + // If the start/end location is a macro, get the expansion location. + StartLoc = SM.getFileLoc(StartLoc); + EndLoc = SM.getFileLoc(EndLoc); + if (SM.getFileID(StartLoc) == SM.getFileID(EndLoc) && SM.isFromMainFile(StartLoc) && SM.isFromMainFile(EndLoc)) { CharSourceRange Range(SourceRange(StartLoc, EndLoc), true); @@ -100,10 +104,9 @@ void NullptrFixer::run(const ast_matchers::MatchFinder::MatchResult &Result) { if (SM.getFileID(StartLoc) != SM.getFileID(EndLoc)) return; - if (StartLoc.isMacroID()) - StartLoc = SM.getExpansionLoc(StartLoc); - if (EndLoc.isMacroID()) - EndLoc = SM.getExpansionLoc(EndLoc); + // If the start/end location is a macro, get the expansion location. + StartLoc = SM.getFileLoc(StartLoc); + EndLoc = SM.getFileLoc(EndLoc); if (!SM.isFromMainFile(StartLoc) || !SM.isFromMainFile(EndLoc)) return; -- cgit v1.2.3