[Macros] Always parse macro expansions, diagnose later

Always parse macro expansions, regardless of language mode, and
eliminate the fallback path for very, very, very old object literals
like `#Color`. Instead, check for the feature flag for macro
declaration and at macro expansion time, since this is a semantic
restriction.

While here, refactor things so the vast majority of the macro-handling
logic still applies even if the Swift Swift parser is disabled. Only
attempts to expand the macro will fail. This allows us to enable the
macro-diagnostics test everywhere.
This commit is contained in:
Doug Gregor
2022-12-23 23:22:21 -08:00
parent 71ca9c86e6
commit 6bb9cb8b5d
20 changed files with 105 additions and 217 deletions

View File

@@ -4844,11 +4844,11 @@ Parser::parseDecl(ParseDeclOptions Flags,
consumeToken(tok::code_complete);
DeclResult = makeParserCodeCompletionResult<Decl>();
break;
} else if (Context.LangOpts.hasFeature(Feature::Macros)) {
DeclResult = parseDeclMacroExpansion(Flags, Attributes);
break;
}
LLVM_FALLTHROUGH;
// Parse as a macro expansion.
DeclResult = parseDeclMacroExpansion(Flags, Attributes);
break;
case tok::pound_if:
case tok::pound_sourceLocation: