summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang-tools-extra/modularize/PreprocessorTracker.cpp9
-rw-r--r--clang-tools-extra/test/modularize/Inputs/NestedMacro.h5
-rw-r--r--clang-tools-extra/test/modularize/NoProblemsNestedMacro.modularize3
3 files changed, 17 insertions, 0 deletions
diff --git a/clang-tools-extra/modularize/PreprocessorTracker.cpp b/clang-tools-extra/modularize/PreprocessorTracker.cpp
index a4bfd8b3b12..566e2f15a33 100644
--- a/clang-tools-extra/modularize/PreprocessorTracker.cpp
+++ b/clang-tools-extra/modularize/PreprocessorTracker.cpp
@@ -334,6 +334,12 @@ std::string getMacroUnexpandedString(clang::SourceRange Range,
// Get the expansion for a macro instance, given the information
// provided by PPCallbacks.
+// FIXME: This doesn't support function-style macro instances
+// passed as arguments to another function-style macro. However,
+// since it still expands the inner arguments, it still
+// allows modularize to effectively work with respect to macro
+// consistency checking, although it displays the incorrect
+// expansion in error messages.
std::string getMacroExpandedString(clang::Preprocessor &PP,
llvm::StringRef MacroName,
const clang::MacroInfo *MI,
@@ -1214,6 +1220,9 @@ void PreprocessorCallbacks::MacroExpands(const clang::Token &MacroNameTok,
clang::SourceRange Range,
const clang::MacroArgs *Args) {
clang::SourceLocation Loc = Range.getBegin();
+ // Ignore macro argument expansions.
+ if (!Loc.isFileID())
+ return;
clang::IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
const clang::MacroInfo *MI = PP.getMacroInfo(II);
std::string MacroName = II->getName().str();
diff --git a/clang-tools-extra/test/modularize/Inputs/NestedMacro.h b/clang-tools-extra/test/modularize/Inputs/NestedMacro.h
new file mode 100644
index 00000000000..2cfc92c081b
--- /dev/null
+++ b/clang-tools-extra/test/modularize/Inputs/NestedMacro.h
@@ -0,0 +1,5 @@
+// Verification of fix for nested macro.
+
+#define FUNCMACROINNER(a) a
+#define FUNCMACROOUTER(b, c) FUNCMACROINNER(b) + FUNCMACROINNER(c)
+int FuncMacroValue = FUNCMACROOUTER(1, 2);
diff --git a/clang-tools-extra/test/modularize/NoProblemsNestedMacro.modularize b/clang-tools-extra/test/modularize/NoProblemsNestedMacro.modularize
new file mode 100644
index 00000000000..a1c627d2e72
--- /dev/null
+++ b/clang-tools-extra/test/modularize/NoProblemsNestedMacro.modularize
@@ -0,0 +1,3 @@
+# RUN: modularize %s -x c++
+
+Inputs/NestedMacro.h
OpenPOWER on IntegriCloud