mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Ensure that freestanding macros get consistent discriminators
Due to the duality between the expression and declaration forms of freestanding macros, we could end up assigning two different discriminators to what is effectively the same freestanding macro expansion. Across different source files, this could lead to inconsistent discriminators in different translation units. Unify the storage of the discriminator to avoid this issue. Fixes rdar://116259748
This commit is contained in:
@@ -11680,7 +11680,6 @@ MacroExpansionDecl::MacroExpansionDecl(DeclContext *dc,
|
||||
MacroExpansionInfo *info)
|
||||
: Decl(DeclKind::MacroExpansion, dc),
|
||||
FreestandingMacroExpansion(FreestandingMacroKind::Decl, info) {
|
||||
Bits.MacroExpansionDecl.Discriminator = InvalidDiscriminator;
|
||||
}
|
||||
|
||||
MacroExpansionDecl *
|
||||
@@ -11704,23 +11703,6 @@ MacroExpansionDecl::create(
|
||||
return new (ctx) MacroExpansionDecl(dc, info);
|
||||
}
|
||||
|
||||
unsigned MacroExpansionDecl::getDiscriminator() const {
|
||||
if (getRawDiscriminator() != InvalidDiscriminator)
|
||||
return getRawDiscriminator();
|
||||
|
||||
auto mutableThis = const_cast<MacroExpansionDecl *>(this);
|
||||
auto dc = getDeclContext();
|
||||
ASTContext &ctx = dc->getASTContext();
|
||||
auto discriminatorContext =
|
||||
MacroDiscriminatorContext::getParentOf(mutableThis);
|
||||
mutableThis->setDiscriminator(
|
||||
ctx.getNextMacroDiscriminator(
|
||||
discriminatorContext, getMacroName().getBaseName()));
|
||||
|
||||
assert(getRawDiscriminator() != InvalidDiscriminator);
|
||||
return getRawDiscriminator();
|
||||
}
|
||||
|
||||
void MacroExpansionDecl::forEachExpandedNode(
|
||||
llvm::function_ref<void(ASTNode)> callback
|
||||
) const {
|
||||
|
||||
Reference in New Issue
Block a user