diff --git a/clang/include/clang/Basic/SourceManager.h b/clang/include/clang/Basic/SourceManager.h index e0f1ea435d54e..3762dbc2ccee8 100644 --- a/clang/include/clang/Basic/SourceManager.h +++ b/clang/include/clang/Basic/SourceManager.h @@ -1529,6 +1529,15 @@ class SourceManager : public RefCountedBase { return Filename == ""; } + /// Returns whether \p Loc is located in a built-in or command line source. + bool isInPredefinedFile(SourceLocation Loc) const { + PresumedLoc Presumed = getPresumedLoc(Loc); + if (Presumed.isInvalid()) + return false; + StringRef Filename(Presumed.getFilename()); + return Filename == "" || Filename == ""; + } + /// Returns if a SourceLocation is in a system header. bool isInSystemHeader(SourceLocation Loc) const { if (Loc.isInvalid()) diff --git a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp index 6f42b36bd36a4..764c345a9db99 100644 --- a/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp +++ b/clang/lib/ExtractAPI/ExtractAPIConsumer.cpp @@ -305,8 +305,7 @@ class MacroCallback : public PPCallbacks { auto DefLoc = MI->getDefinitionLoc(); - if (SM.isWrittenInBuiltinFile(DefLoc) || - SM.isWrittenInCommandLineFile(DefLoc)) + if (SM.isInPredefinedFile(DefLoc)) continue; auto AssociatedModuleMacros = MD.getModuleMacros(); diff --git a/clang/lib/Frontend/PrintPreprocessedOutput.cpp b/clang/lib/Frontend/PrintPreprocessedOutput.cpp index 2ae355fb33885..22ba4cee182af 100644 --- a/clang/lib/Frontend/PrintPreprocessedOutput.cpp +++ b/clang/lib/Frontend/PrintPreprocessedOutput.cpp @@ -569,8 +569,7 @@ void PrintPPOutputPPCallbacks::MacroDefined(const Token &MacroNameTok, SourceLocation DefLoc = MI->getDefinitionLoc(); if (DirectivesOnly && !MI->isUsed()) { SourceManager &SM = PP.getSourceManager(); - if (SM.isWrittenInBuiltinFile(DefLoc) || - SM.isWrittenInCommandLineFile(DefLoc)) + if (SM.isInPredefinedFile(DefLoc)) return; } MoveToLine(DefLoc, /*RequireStartOfLine=*/true); diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index 384d167cbcf88..c2bab9118234c 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -374,9 +374,8 @@ bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, // Macro names with reserved identifiers are accepted if built-in or passed // through the command line (the later may be present if -dD was used to // generate the preprocessed file). - bool IsBuiltinOrCmd = SourceMgr.isWrittenInBuiltinFile(MacroNameLoc) || - SourceMgr.isWrittenInCommandLineFile(MacroNameLoc); - if (!IsBuiltinOrCmd && !SourceMgr.isInSystemHeader(MacroNameLoc)) { + if (!SourceMgr.isInPredefinedFile(MacroNameLoc) && + !SourceMgr.isInSystemHeader(MacroNameLoc)) { MacroDiag D = MD_NoWarn; if (isDefineUndef == MU_Define) { D = shouldWarnOnMacroDef(*this, II); @@ -1706,8 +1705,7 @@ void Preprocessor::HandleDigitDirective(Token &DigitTok) { // If a filename was present, read any flags that are present. if (ReadLineMarkerFlags(IsFileEntry, IsFileExit, FileKind, *this)) return; - if (!SourceMgr.isWrittenInBuiltinFile(DigitTok.getLocation()) && - !SourceMgr.isWrittenInCommandLineFile(DigitTok.getLocation())) + if (!SourceMgr.isInPredefinedFile(DigitTok.getLocation())) Diag(StrTok, diag::ext_pp_gnu_line_directive); // Exiting to an empty string means pop to the including file, so leave