Skip to content

Commit 2943064

Browse files
committed
[Macros] Always exclude macro expansions in TypeChecker::lookupMacros.
1 parent cd79cf9 commit 2943064

File tree

4 files changed

+16
-10
lines changed

4 files changed

+16
-10
lines changed

lib/Sema/CSGen.cpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -1244,7 +1244,7 @@ namespace {
12441244

12451245
auto macroIdent = ctx.getIdentifier(kind);
12461246
auto macros = lookupMacros(
1247-
macroIdent, expr->getLoc(), FunctionRefKind::Unapplied,
1247+
macroIdent, FunctionRefKind::Unapplied,
12481248
MacroRole::Expression);
12491249
if (!macros.empty()) {
12501250
// Introduce an overload set for the macro reference.
@@ -3896,12 +3896,12 @@ namespace {
38963896

38973897
/// Lookup all macros with the given macro name.
38983898
SmallVector<OverloadChoice, 1>
3899-
lookupMacros(Identifier macroName, SourceLoc loc,
3899+
lookupMacros(Identifier macroName,
39003900
FunctionRefKind functionRefKind,
39013901
MacroRoles roles) {
39023902
SmallVector<OverloadChoice, 1> choices;
39033903
auto results = TypeChecker::lookupMacros(
3904-
CurDC, DeclNameRef(macroName), loc, roles);
3904+
CurDC, DeclNameRef(macroName), roles);
39053905
for (const auto &result : results) {
39063906
OverloadChoice choice = OverloadChoice(Type(), result, functionRefKind);
39073907
choices.push_back(choice);
@@ -3926,8 +3926,7 @@ namespace {
39263926
auto macroIdent = expr->getMacroName().getBaseIdentifier();
39273927
FunctionRefKind functionRefKind = FunctionRefKind::SingleApply;
39283928
auto macros = lookupMacros(
3929-
macroIdent, expr->getMacroNameLoc().getBaseNameLoc(),
3930-
functionRefKind, expr->getMacroRoles());
3929+
macroIdent, functionRefKind, expr->getMacroRoles());
39313930
if (macros.empty()) {
39323931
ctx.Diags.diagnose(expr->getMacroNameLoc(), diag::macro_undefined,
39333932
macroIdent)

lib/Sema/TypeCheckDecl.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -1611,11 +1611,19 @@ TypeChecker::lookupPrecedenceGroup(DeclContext *dc, Identifier name,
16111611

16121612
SmallVector<MacroDecl *, 1>
16131613
TypeChecker::lookupMacros(DeclContext *dc, DeclNameRef macroName,
1614-
SourceLoc loc, MacroRoles roles) {
1614+
MacroRoles roles) {
16151615
SmallVector<MacroDecl *, 1> choices;
16161616
auto moduleScopeDC = dc->getModuleScopeContext();
16171617
ASTContext &ctx = moduleScopeDC->getASTContext();
1618-
UnqualifiedLookupDescriptor descriptor(macroName, moduleScopeDC);
1618+
1619+
// Macro lookup should always exclude macro expansions; macro
1620+
// expansions cannot introduce new macro declarations. Note that
1621+
// the source location here doesn't matter.
1622+
UnqualifiedLookupDescriptor descriptor{
1623+
macroName, moduleScopeDC, SourceLoc(),
1624+
UnqualifiedLookupFlags::ExcludeMacroExpansions
1625+
};
1626+
16191627
auto lookup = evaluateOrDefault(
16201628
ctx.evaluator, UnqualifiedLookupRequest{descriptor}, {});
16211629
for (const auto &found : lookup.allResults()) {

lib/Sema/TypeCheckMacros.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1487,7 +1487,7 @@ ConcreteDeclRef ResolveMacroRequest::evaluate(Evaluator &evaluator,
14871487
// So bail out to prevent diagnostics from the contraint system.
14881488
if (macroRef.getAttr()) {
14891489
auto foundMacros = TypeChecker::lookupMacros(
1490-
dc, macroRef.getMacroName(), SourceLoc(), roles);
1490+
dc, macroRef.getMacroName(), roles);
14911491
if (foundMacros.empty())
14921492
return ConcreteDeclRef();
14931493
}

lib/Sema/TypeChecker.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -940,8 +940,7 @@ PrecedenceGroupLookupResult
940940
lookupPrecedenceGroup(DeclContext *dc, Identifier name, SourceLoc nameLoc);
941941

942942
SmallVector<MacroDecl *, 1>
943-
lookupMacros(DeclContext *dc, DeclNameRef macroName, SourceLoc loc,
944-
MacroRoles contexts);
943+
lookupMacros(DeclContext *dc, DeclNameRef macroName, MacroRoles contexts);
945944

946945
enum class UnsupportedMemberTypeAccessKind : uint8_t {
947946
None,

0 commit comments

Comments
 (0)