summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-lower-to-ir.cpp27
1 files changed, 20 insertions, 7 deletions
diff --git a/source/slang/slang-lower-to-ir.cpp b/source/slang/slang-lower-to-ir.cpp
index 6803e1cb4..4618b6786 100644
--- a/source/slang/slang-lower-to-ir.cpp
+++ b/source/slang/slang-lower-to-ir.cpp
@@ -1162,14 +1162,23 @@ static void addLinkageDecoration(
IRInst* inst,
Decl* decl)
{
- String mangledName = getMangledName(context->astBuilder, decl);
+ const String mangledName = getMangledName(context->astBuilder, decl);
- if (context->shared->m_obfuscateCode)
- {
- mangledName = getHashedName(mangledName.getUnownedSlice());
- }
-
- addLinkageDecoration(context, inst, decl, mangledName.getUnownedSlice());
+ // Obfuscate the mangled names if necessary.
+ //
+ // Care is needed around stdlib as it is only compiled once and *without* obfuscation,
+ // so any linkage name to stdlib *shouldn't* have obfuscation applied to it.
+ if (context->shared->m_obfuscateCode &&
+ !isFromStdLib(decl))
+ {
+ const auto obfuscatedName = getHashedName(mangledName.getUnownedSlice());
+
+ addLinkageDecoration(context, inst, decl, obfuscatedName.getUnownedSlice());
+ }
+ else
+ {
+ addLinkageDecoration(context, inst, decl, mangledName.getUnownedSlice());
+ }
}
bool shouldDeclBeTreatedAsInterfaceRequirement(Decl* requirementDecl)
@@ -6244,6 +6253,7 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo>
// TODO: This approach doesn't really make sense for generic `extension` conformances.
auto mangledName = getMangledNameForConformanceWitness(context->astBuilder, subType, superType);
+
// A witness table may need to be generic, if the outer
// declaration (either a type declaration or an `extension`)
// is generic.
@@ -6271,6 +6281,9 @@ struct DeclLoweringVisitor : DeclVisitor<DeclLoweringVisitor, LoweredValInfo>
auto irSubType = lowerType(subContext, subType);
irWitnessTable->setOperand(0, irSubType);
+ // TODO(JS):
+ // Should the mangled name take part in obfuscation if enabled?
+
addLinkageDecoration(context, irWitnessTable, inheritanceDecl, mangledName.getUnownedSlice());
// If the witness table is for a COM interface, always keep it alive.