Skip to content

Commit f7280a2

Browse files
committed
[Macros] Harden discriminator verification and macro expansion mangling
1 parent a712c37 commit f7280a2

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

lib/AST/ASTMangler.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3764,6 +3764,7 @@ void ASTMangler::appendMacroExpansionContext(
37643764
outerExpansionDC = expansion->getDeclContext();
37653765
discriminator = expansion->getDiscriminator();
37663766
role = MacroRole::Declaration;
3767+
baseName = expansion->getMacroName().getBaseName();
37673768
break;
37683769
}
37693770

@@ -3799,6 +3800,17 @@ void ASTMangler::appendMacroExpansionContext(
37993800
outerExpansionLoc = decl->getLoc();
38003801
outerExpansionDC = decl->getDeclContext();
38013802
discriminator = decl->getAttachedMacroDiscriminator(role, attr);
3803+
3804+
auto *macroDecl = evaluateOrDefault(
3805+
ctx.evaluator,
3806+
ResolveMacroRequest{const_cast<CustomAttr *>(attr),
3807+
getAttachedMacroRoles(), outerExpansionDC},
3808+
nullptr);
3809+
if (macroDecl)
3810+
baseName = macroDecl->getBaseName();
3811+
else
3812+
baseName = ctx.getIdentifier("__unknown_macro__");
3813+
38023814
break;
38033815
}
38043816

lib/AST/ASTVerifier.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "swift/AST/GenericEnvironment.h"
2727
#include "swift/AST/GenericSignature.h"
2828
#include "swift/AST/Initializer.h"
29+
#include "swift/AST/MacroDiscriminatorContext.h"
2930
#include "swift/AST/Module.h"
3031
#include "swift/AST/ParameterList.h"
3132
#include "swift/AST/Pattern.h"
@@ -233,7 +234,8 @@ class Verifier : public ASTWalker {
233234
ClosureDiscriminators;
234235
DeclContext *CanonicalTopLevelSubcontext = nullptr;
235236

236-
typedef std::pair<DeclContext *, Identifier> MacroExpansionDiscriminatorKey;
237+
typedef std::pair</*MacroDiscriminatorContext*/const void *, Identifier>
238+
MacroExpansionDiscriminatorKey;
237239
llvm::DenseMap<MacroExpansionDiscriminatorKey, SmallBitVector>
238240
MacroExpansionDiscriminators;
239241

@@ -2410,9 +2412,8 @@ class Verifier : public ASTWalker {
24102412
}
24112413

24122414
void verifyChecked(MacroExpansionExpr *expansion) {
2413-
auto dc = getCanonicalDeclContext(expansion->getDeclContext());
24142415
MacroExpansionDiscriminatorKey key{
2415-
dc,
2416+
MacroDiscriminatorContext::getParentOf(expansion).getOpaqueValue(),
24162417
expansion->getMacroName().getBaseName().getIdentifier()
24172418
};
24182419
auto &discriminatorSet = MacroExpansionDiscriminators[key];
@@ -2433,9 +2434,8 @@ class Verifier : public ASTWalker {
24332434
}
24342435

24352436
void verifyChecked(MacroExpansionDecl *expansion) {
2436-
auto dc = getCanonicalDeclContext(expansion->getDeclContext());
24372437
MacroExpansionDiscriminatorKey key{
2438-
dc,
2438+
MacroDiscriminatorContext::getParentOf(expansion).getOpaqueValue(),
24392439
expansion->getMacroName().getBaseName().getIdentifier()
24402440
};
24412441
auto &discriminatorSet = MacroExpansionDiscriminators[key];

0 commit comments

Comments
 (0)