From 441e8fdf94e628ce7fcfba6915fedb9c096b3850 Mon Sep 17 00:00:00 2001 From: George Karpenkov Date: Fri, 9 Feb 2018 23:30:07 +0000 Subject: [NFC] Extract method to SourceManager for traversing the macro "stack" The code for going up the macro arg expansion is duplicated in many places (and we need it for the analyzer as well, so I did not want to duplicate it two more times). This patch is an NFC, so the semantics should remain the same. Differential Revision: https://reviews.llvm.org/D42458 llvm-svn: 324780 --- clang/lib/Basic/SourceManager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'clang/lib/Basic/SourceManager.cpp') diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 0a51985614c..3bf70b66693 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -955,6 +955,12 @@ SourceManager::getImmediateExpansionRange(SourceLocation Loc) const { return Expansion.getExpansionLocRange(); } +SourceLocation SourceManager::getTopMacroCallerLoc(SourceLocation Loc) const { + while (isMacroArgExpansion(Loc)) + Loc = getImmediateSpellingLoc(Loc); + return Loc; +} + /// getExpansionRange - Given a SourceLocation object, return the range of /// tokens covered by the expansion in the ultimate file. std::pair -- cgit v1.2.3