[Macros] Be deliberate about walking macro arguments vs. expansions

Provide ASTWalker with a customization point to specify whether to
check macro arguments (which are type checked but never emitted), the
macro expansion (which is the result of applying the macro and is
actually emitted into the source), or both. Provide answers for the
~115 different ASTWalker visitors throughout the code base.

Fixes rdar://104042945, which concerns checking of effects in
macro arguments---which we shouldn't do.
This commit is contained in:
Doug Gregor
2023-02-28 07:49:13 -08:00
parent 16baee3771
commit 200f2340d9
67 changed files with 590 additions and 36 deletions

View File

@@ -2405,6 +2405,11 @@ class ConstExtractor: public ASTWalker {
}
return false;
}
MacroWalking getMacroWalkingBehavior() const override {
return MacroWalking::ArgumentsAndExpansion;
}
PreWalkResult<Expr *> walkToExprPre(Expr *E) override {
if (E->isSemanticallyConstExpr()) {
record(E, E);