forked from OSchip/llvm-project
parent
36bd40df72
commit
33de8566f0
|
@ -144,17 +144,15 @@ private:
|
|||
}
|
||||
|
||||
void Ifndef(SourceLocation Loc, const Token &MacroNameTok,
|
||||
const MacroDirective *MD) override {
|
||||
const MacroDefinition &MD) override {
|
||||
Guard->Count++;
|
||||
|
||||
// If this #ifndef is the top-most directive and the symbol isn't defined
|
||||
// store those information in the guard detection, the next step will be to
|
||||
// check for the define.
|
||||
if (Guard->Count == 1 && MD == nullptr) {
|
||||
if (Guard->Count == 1 && !MD) {
|
||||
IdentifierInfo *MII = MacroNameTok.getIdentifierInfo();
|
||||
|
||||
if (MII->hasMacroDefinition())
|
||||
return;
|
||||
Guard->IfndefLoc = Loc;
|
||||
Guard->TheMacro = MII;
|
||||
}
|
||||
|
@ -196,14 +194,14 @@ private:
|
|||
Guard->EndifLoc = Loc;
|
||||
}
|
||||
|
||||
void MacroExpands(const Token &, const MacroDirective *, SourceRange,
|
||||
void MacroExpands(const Token &, const MacroDefinition &, SourceRange,
|
||||
const MacroArgs *) override {
|
||||
Guard->Count++;
|
||||
}
|
||||
void MacroUndefined(const Token &, const MacroDirective *) override {
|
||||
void MacroUndefined(const Token &, const MacroDefinition &) override {
|
||||
Guard->Count++;
|
||||
}
|
||||
void Defined(const Token &, const MacroDirective *, SourceRange) override {
|
||||
void Defined(const Token &, const MacroDefinition &, SourceRange) override {
|
||||
Guard->Count++;
|
||||
}
|
||||
void If(SourceLocation, SourceRange, ConditionValueKind) override {
|
||||
|
@ -213,7 +211,7 @@ private:
|
|||
SourceLocation) override {
|
||||
Guard->Count++;
|
||||
}
|
||||
void Ifdef(SourceLocation, const Token &, const MacroDirective *) override {
|
||||
void Ifdef(SourceLocation, const Token &, const MacroDefinition &) override {
|
||||
Guard->Count++;
|
||||
}
|
||||
void Else(SourceLocation, SourceLocation) override {
|
||||
|
|
|
@ -58,7 +58,7 @@ public:
|
|||
}
|
||||
|
||||
void Ifndef(SourceLocation Loc, const Token &MacroNameTok,
|
||||
const MacroDirective *MD) override {
|
||||
const MacroDefinition &MD) override {
|
||||
if (MD)
|
||||
return;
|
||||
|
||||
|
@ -71,7 +71,7 @@ public:
|
|||
const MacroDirective *MD) override {
|
||||
// Record all defined macros. We store the whole token to get info on the
|
||||
// name later.
|
||||
Macros.emplace_back(MacroNameTok, MD);
|
||||
Macros.emplace_back(MacroNameTok, MD->getMacroInfo());
|
||||
}
|
||||
|
||||
void Endif(SourceLocation Loc, SourceLocation IfLoc) override {
|
||||
|
@ -84,7 +84,7 @@ public:
|
|||
SourceManager &SM = PP->getSourceManager();
|
||||
|
||||
for (const auto &MacroEntry : Macros) {
|
||||
const MacroInfo *MI = MacroEntry.second->getMacroInfo();
|
||||
const MacroInfo *MI = MacroEntry.second;
|
||||
|
||||
// We use clang's header guard detection. This has the advantage of also
|
||||
// emitting a warning for cases where a pseudo header guard is found but
|
||||
|
@ -268,7 +268,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
std::vector<std::pair<Token, const MacroDirective *>> Macros;
|
||||
std::vector<std::pair<Token, const MacroInfo *>> Macros;
|
||||
llvm::StringMap<const FileEntry *> Files;
|
||||
std::map<const IdentifierInfo *, std::pair<SourceLocation, SourceLocation>>
|
||||
Ifndefs;
|
||||
|
|
|
@ -763,10 +763,10 @@ public:
|
|||
clang::SrcMgr::CharacteristicKind FileType,
|
||||
clang::FileID PrevFID = clang::FileID()) override;
|
||||
void MacroExpands(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD, clang::SourceRange Range,
|
||||
const clang::MacroDefinition &MD, clang::SourceRange Range,
|
||||
const clang::MacroArgs *Args) override;
|
||||
void Defined(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD,
|
||||
const clang::MacroDefinition &MD,
|
||||
clang::SourceRange Range) override;
|
||||
void If(clang::SourceLocation Loc, clang::SourceRange ConditionRange,
|
||||
clang::PPCallbacks::ConditionValueKind ConditionResult) override;
|
||||
|
@ -774,9 +774,9 @@ public:
|
|||
clang::PPCallbacks::ConditionValueKind ConditionResult,
|
||||
clang::SourceLocation IfLoc) override;
|
||||
void Ifdef(clang::SourceLocation Loc, const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) override;
|
||||
const clang::MacroDefinition &MD) override;
|
||||
void Ifndef(clang::SourceLocation Loc, const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) override;
|
||||
const clang::MacroDefinition &MD) override;
|
||||
|
||||
private:
|
||||
PreprocessorTrackerImpl &PPTracker;
|
||||
|
@ -1336,7 +1336,7 @@ void PreprocessorCallbacks::FileChanged(
|
|||
|
||||
// Handle macro expansion.
|
||||
void PreprocessorCallbacks::MacroExpands(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD,
|
||||
const clang::MacroDefinition &MD,
|
||||
clang::SourceRange Range,
|
||||
const clang::MacroArgs *Args) {
|
||||
clang::SourceLocation Loc = Range.getBegin();
|
||||
|
@ -1344,7 +1344,7 @@ void PreprocessorCallbacks::MacroExpands(const clang::Token &MacroNameTok,
|
|||
if (!Loc.isFileID())
|
||||
return;
|
||||
clang::IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
|
||||
const clang::MacroInfo *MI = PP.getMacroInfo(II);
|
||||
const clang::MacroInfo *MI = MD.getMacroInfo();
|
||||
std::string MacroName = II->getName().str();
|
||||
std::string Unexpanded(getMacroUnexpandedString(Range, PP, MacroName, MI));
|
||||
std::string Expanded(getMacroExpandedString(PP, MacroName, MI, Args));
|
||||
|
@ -1354,11 +1354,11 @@ void PreprocessorCallbacks::MacroExpands(const clang::Token &MacroNameTok,
|
|||
}
|
||||
|
||||
void PreprocessorCallbacks::Defined(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD,
|
||||
const clang::MacroDefinition &MD,
|
||||
clang::SourceRange Range) {
|
||||
clang::SourceLocation Loc(Range.getBegin());
|
||||
clang::IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
|
||||
const clang::MacroInfo *MI = PP.getMacroInfo(II);
|
||||
const clang::MacroInfo *MI = MD.getMacroInfo();
|
||||
std::string MacroName = II->getName().str();
|
||||
std::string Unexpanded(getSourceString(PP, Range));
|
||||
PPTracker.addMacroExpansionInstance(
|
||||
|
@ -1388,7 +1388,7 @@ void PreprocessorCallbacks::Elif(clang::SourceLocation Loc,
|
|||
|
||||
void PreprocessorCallbacks::Ifdef(clang::SourceLocation Loc,
|
||||
const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) {
|
||||
const clang::MacroDefinition &MD) {
|
||||
clang::PPCallbacks::ConditionValueKind IsDefined =
|
||||
(MD ? clang::PPCallbacks::CVK_True : clang::PPCallbacks::CVK_False );
|
||||
PPTracker.addConditionalExpansionInstance(
|
||||
|
@ -1399,7 +1399,7 @@ void PreprocessorCallbacks::Ifdef(clang::SourceLocation Loc,
|
|||
|
||||
void PreprocessorCallbacks::Ifndef(clang::SourceLocation Loc,
|
||||
const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) {
|
||||
const clang::MacroDefinition &MD) {
|
||||
clang::PPCallbacks::ConditionValueKind IsNotDefined =
|
||||
(!MD ? clang::PPCallbacks::CVK_True : clang::PPCallbacks::CVK_False );
|
||||
PPTracker.addConditionalExpansionInstance(
|
||||
|
|
|
@ -302,12 +302,12 @@ void PPCallbacksTracker::PragmaWarningPop(clang::SourceLocation Loc) {
|
|||
// macro invocation is found.
|
||||
void
|
||||
PPCallbacksTracker::MacroExpands(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MacroDirective,
|
||||
const clang::MacroDefinition &MacroDefinition,
|
||||
clang::SourceRange Range,
|
||||
const clang::MacroArgs *Args) {
|
||||
beginCallback("MacroExpands");
|
||||
appendArgument("MacroNameTok", MacroNameTok);
|
||||
appendArgument("MacroDirective", MacroDirective);
|
||||
appendArgument("MacroDefinition", MacroDefinition);
|
||||
appendArgument("Range", Range);
|
||||
appendArgument("Args", Args);
|
||||
}
|
||||
|
@ -324,19 +324,19 @@ PPCallbacksTracker::MacroDefined(const clang::Token &MacroNameTok,
|
|||
// Hook called whenever a macro #undef is seen.
|
||||
void PPCallbacksTracker::MacroUndefined(
|
||||
const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MacroDirective) {
|
||||
const clang::MacroDefinition &MacroDefinition) {
|
||||
beginCallback("MacroUndefined");
|
||||
appendArgument("MacroNameTok", MacroNameTok);
|
||||
appendArgument("MacroDirective", MacroDirective);
|
||||
appendArgument("MacroDefinition", MacroDefinition);
|
||||
}
|
||||
|
||||
// Hook called whenever the 'defined' operator is seen.
|
||||
void PPCallbacksTracker::Defined(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MacroDirective,
|
||||
const clang::MacroDefinition &MacroDefinition,
|
||||
clang::SourceRange Range) {
|
||||
beginCallback("Defined");
|
||||
appendArgument("MacroNameTok", MacroNameTok);
|
||||
appendArgument("MacroDirective", MacroDirective);
|
||||
appendArgument("MacroDefinition", MacroDefinition);
|
||||
appendArgument("Range", Range);
|
||||
}
|
||||
|
||||
|
@ -371,21 +371,21 @@ void PPCallbacksTracker::Elif(clang::SourceLocation Loc,
|
|||
// Hook called whenever an #ifdef is seen.
|
||||
void PPCallbacksTracker::Ifdef(clang::SourceLocation Loc,
|
||||
const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MacroDirective) {
|
||||
const clang::MacroDefinition &MacroDefinition) {
|
||||
beginCallback("Ifdef");
|
||||
appendArgument("Loc", Loc);
|
||||
appendArgument("MacroNameTok", MacroNameTok);
|
||||
appendArgument("MacroDirective", MacroDirective);
|
||||
appendArgument("MacroDefinition", MacroDefinition);
|
||||
}
|
||||
|
||||
// Hook called whenever an #ifndef is seen.
|
||||
void PPCallbacksTracker::Ifndef(clang::SourceLocation Loc,
|
||||
const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MacroDirective) {
|
||||
const clang::MacroDefinition &MacroDefinition) {
|
||||
beginCallback("Ifndef");
|
||||
appendArgument("Loc", Loc);
|
||||
appendArgument("MacroNameTok", MacroNameTok);
|
||||
appendArgument("MacroDirective", MacroDirective);
|
||||
appendArgument("MacroDefinition", MacroDefinition);
|
||||
}
|
||||
|
||||
// Hook called whenever an #else is seen.
|
||||
|
@ -558,6 +558,25 @@ void PPCallbacksTracker::appendArgument(const char *Name,
|
|||
appendArgument(Name, MacroDirectiveKindStrings[Value->getKind()]);
|
||||
}
|
||||
|
||||
// Append a MacroDefinition argument to the top trace item.
|
||||
void PPCallbacksTracker::appendArgument(const char *Name,
|
||||
const clang::MacroDefinition &Value) {
|
||||
std::string Str;
|
||||
llvm::raw_string_ostream SS(Str);
|
||||
SS << "[";
|
||||
bool Any = false;
|
||||
if (Value.getLocalDirective()) {
|
||||
SS << "(local)";
|
||||
Any = true;
|
||||
}
|
||||
for (auto *MM : Value.getModuleMacros()) {
|
||||
if (Any) SS << ", ";
|
||||
SS << MM->getOwningModule()->getFullModuleName();
|
||||
}
|
||||
SS << "]";
|
||||
appendArgument(Name, SS.str());
|
||||
}
|
||||
|
||||
// Append a MacroArgs argument to the top trace item.
|
||||
void PPCallbacksTracker::appendArgument(const char *Name,
|
||||
const clang::MacroArgs *Value) {
|
||||
|
|
|
@ -129,14 +129,14 @@ public:
|
|||
void PragmaWarningPush(clang::SourceLocation Loc, int Level) override;
|
||||
void PragmaWarningPop(clang::SourceLocation Loc) override;
|
||||
void MacroExpands(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD, clang::SourceRange Range,
|
||||
const clang::MacroDefinition &MD, clang::SourceRange Range,
|
||||
const clang::MacroArgs *Args) override;
|
||||
void MacroDefined(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) override;
|
||||
void MacroUndefined(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) override;
|
||||
const clang::MacroDefinition &MD) override;
|
||||
void Defined(const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD,
|
||||
const clang::MacroDefinition &MD,
|
||||
clang::SourceRange Range) override;
|
||||
void SourceRangeSkipped(clang::SourceRange Range) override;
|
||||
void If(clang::SourceLocation Loc, clang::SourceRange ConditionRange,
|
||||
|
@ -144,9 +144,9 @@ public:
|
|||
void Elif(clang::SourceLocation Loc, clang::SourceRange ConditionRange,
|
||||
ConditionValueKind ConditionValue, clang::SourceLocation IfLoc) override;
|
||||
void Ifdef(clang::SourceLocation Loc, const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) override;
|
||||
const clang::MacroDefinition &MD) override;
|
||||
void Ifndef(clang::SourceLocation Loc, const clang::Token &MacroNameTok,
|
||||
const clang::MacroDirective *MD) override;
|
||||
const clang::MacroDefinition &MD) override;
|
||||
void Else(clang::SourceLocation Loc,
|
||||
clang::SourceLocation IfLoc) override;
|
||||
void Endif(clang::SourceLocation Loc,
|
||||
|
@ -205,6 +205,9 @@ public:
|
|||
/// \brief Append a MacroDirective argument to the top trace item.
|
||||
void appendArgument(const char *Name, const clang::MacroDirective *Value);
|
||||
|
||||
/// \brief Append a MacroDefinition argument to the top trace item.
|
||||
void appendArgument(const char *Name, const clang::MacroDefinition &Value);
|
||||
|
||||
/// \brief Append a MacroArgs argument to the top trace item.
|
||||
void appendArgument(const char *Name, const clang::MacroArgs *Value);
|
||||
|
||||
|
|
|
@ -271,14 +271,14 @@
|
|||
// CHECK-NEXT: - Callback: Ifdef
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:55:2"
|
||||
// CHECK-NEXT: MacroNameTok: MACRO
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: - Callback: Endif
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:56:2"
|
||||
// CHECK-NEXT: IfLoc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:55:2"
|
||||
// CHECK-NEXT: - Callback: Ifdef
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:57:2"
|
||||
// CHECK-NEXT: MacroNameTok: NO_MACRO
|
||||
// CHECK-NEXT: MacroDirective: (null)
|
||||
// CHECK-NEXT: MacroDefinition: []
|
||||
// CHECK-NEXT: - Callback: Endif
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:58:2"
|
||||
// CHECK-NEXT: IfLoc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:57:2"
|
||||
|
@ -287,7 +287,7 @@
|
|||
// CHECK-NEXT: - Callback: Ifndef
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:59:2"
|
||||
// CHECK-NEXT: MacroNameTok: MACRO
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: - Callback: Endif
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:60:2"
|
||||
// CHECK-NEXT: IfLoc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:59:2"
|
||||
|
@ -296,7 +296,7 @@
|
|||
// CHECK-NEXT: - Callback: Ifndef
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:61:2"
|
||||
// CHECK-NEXT: MacroNameTok: NO_MACRO
|
||||
// CHECK-NEXT: MacroDirective: (null)
|
||||
// CHECK-NEXT: MacroDefinition: []
|
||||
// CHECK-NEXT: - Callback: Endif
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:62:2"
|
||||
// CHECK-NEXT: IfLoc: "{{.*}}{{[/\\]}}pp-trace-conditional.cpp:61:2"
|
||||
|
|
|
@ -35,12 +35,12 @@ X
|
|||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: - Callback: MacroExpands
|
||||
// CHECK-NEXT: MacroNameTok: MACRO
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: Range: ["{{.*}}{{[/\\]}}pp-trace-macro.cpp:4:9", "{{.*}}{{[/\\]}}pp-trace-macro.cpp:4:9"]
|
||||
// CHECK-NEXT: Args: (null)
|
||||
// CHECK-NEXT: - Callback: Defined
|
||||
// CHECK-NEXT: MacroNameTok: MACRO
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: Range: ["{{.*}}{{[/\\]}}pp-trace-macro.cpp:5:5", "{{.*}}{{[/\\]}}pp-trace-macro.cpp:5:19"]
|
||||
// CHECK-NEXT: - Callback: If
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-macro.cpp:5:2"
|
||||
|
@ -51,10 +51,10 @@ X
|
|||
// CHECK-NEXT: IfLoc: "{{.*}}{{[/\\]}}pp-trace-macro.cpp:5:2"
|
||||
// CHECK-NEXT: - Callback: MacroUndefined
|
||||
// CHECK-NEXT: MacroNameTok: MACRO
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: - Callback: Defined
|
||||
// CHECK-NEXT: MacroNameTok: MACRO
|
||||
// CHECK-NEXT: MacroDirective: (null)
|
||||
// CHECK-NEXT: MacroDefinition: []
|
||||
// CHECK-NEXT: Range: ["{{.*}}{{[/\\]}}pp-trace-macro.cpp:8:5", "{{.*}}{{[/\\]}}pp-trace-macro.cpp:8:19"]
|
||||
// CHECK-NEXT: - Callback: If
|
||||
// CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-macro.cpp:8:2"
|
||||
|
@ -70,7 +70,7 @@ X
|
|||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: - Callback: MacroExpands
|
||||
// CHECK-NEXT: MacroNameTok: FUNCMACRO
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: Range: ["{{.*}}{{[/\\]}}pp-trace-macro.cpp:11:9", "{{.*}}{{[/\\]}}pp-trace-macro.cpp:11:20"]
|
||||
// CHECK-NEXT: Args: [1]
|
||||
// CHECK-NEXT: - Callback: MacroDefined
|
||||
|
@ -84,17 +84,17 @@ X
|
|||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: - Callback: MacroExpands
|
||||
// CHECK-NEXT: MacroNameTok: X
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: Range: ["{{.*}}{{[/\\]}}pp-trace-macro.cpp:15:1", "{{.*}}{{[/\\]}}pp-trace-macro.cpp:15:1"]
|
||||
// CHECK-NEXT: Args: (null)
|
||||
// CHECK-NEXT: - Callback: MacroExpands
|
||||
// CHECK-NEXT: MacroNameTok: X_IMPL
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: Range: [(nonfile), (nonfile)]
|
||||
// CHECK-NEXT: Args: [a <plus> y, b]
|
||||
// CHECK-NEXT: - Callback: MacroExpands
|
||||
// CHECK-NEXT: MacroNameTok: X_IMPL2
|
||||
// CHECK-NEXT: MacroDirective: MD_Define
|
||||
// CHECK-NEXT: MacroDefinition: [(local)]
|
||||
// CHECK-NEXT: Range: [(nonfile), (nonfile)]
|
||||
// CHECK-NEXT: Args: [c]
|
||||
// CHECK-NEXT: - Callback: EndOfMainFile
|
||||
|
|
Loading…
Reference in New Issue