summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp
diff options
context:
space:
mode:
authorEdwin Vane <edwin.vane@intel.com>2013-02-17 16:45:54 +0000
committerEdwin Vane <edwin.vane@intel.com>2013-02-17 16:45:54 +0000
commit4ad00b46fbb0bfe2530b6cdd8803937166bfa80f (patch)
tree4ed87ff128357e28d7ae702f1b94d68fa7c4fd9b /clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp
parent1cba0a8e0aea9758a066bb8802020ee8f6502b06 (diff)
downloadbcm5719-llvm-4ad00b46fbb0bfe2530b6cdd8803937166bfa80f.tar.gz
bcm5719-llvm-4ad00b46fbb0bfe2530b6cdd8803937166bfa80f.zip
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 <tareq.a.siraj@intel.com> Reviewer: klimek llvm-svn: 175399
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp')
-rw-r--r--clang-tools-extra/cpp11-migrate/UseNullptr/NullptrActions.cpp11
1 files changed, 7 insertions, 4 deletions
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;
OpenPOWER on IntegriCloud