@@ -187,7 +187,7 @@ static Error applyHarnessPromotions(Session &S, LinkGraph &G) {
187
187
188
188
// If this graph is part of the test then promote any symbols referenced by
189
189
// the harness to default scope, remove all symbols that clash with harness
190
- // definitions.
190
+ // definitions, demote all other definitions .
191
191
std::vector<Symbol *> DefinitionsToRemove;
192
192
for (auto *Sym : G.defined_symbols ()) {
193
193
@@ -219,6 +219,10 @@ static Error applyHarnessPromotions(Session &S, LinkGraph &G) {
219
219
} else if (S.HarnessDefinitions .count (Sym->getName ())) {
220
220
LLVM_DEBUG (dbgs () << " Externalizing " << Sym->getName () << " \n " );
221
221
DefinitionsToRemove.push_back (Sym);
222
+ } else {
223
+ LLVM_DEBUG (dbgs () << " Demoting " << Sym->getName () << " \n " );
224
+ Sym->setScope (Scope::Local);
225
+ Sym->setLive (false );
222
226
}
223
227
}
224
228
@@ -517,8 +521,7 @@ Error LLVMJITLinkObjectLinkingLayer::add(JITDylib &JD,
517
521
return SymFlagsOrErr.takeError ();
518
522
519
523
// Skip symbols not defined in this object file.
520
- if ((*SymFlagsOrErr & object::BasicSymbolRef::SF_Undefined) ||
521
- !(*SymFlagsOrErr & object::BasicSymbolRef::SF_Global))
524
+ if (*SymFlagsOrErr & object::BasicSymbolRef::SF_Undefined)
522
525
continue ;
523
526
524
527
auto Name = Sym.getName ();
@@ -548,8 +551,10 @@ Error LLVMJITLinkObjectLinkingLayer::add(JITDylib &JD,
548
551
*SymFlags &= ~JITSymbolFlags::Exported;
549
552
} else if (S.HarnessExternals .count (*Name)) {
550
553
*SymFlags |= JITSymbolFlags::Exported;
551
- } else if (S.HarnessDefinitions .count (*Name))
554
+ } else {
555
+ // Skip symbols that aren't in the HarnessExternals set.
552
556
continue ;
557
+ }
553
558
554
559
auto InternedName = S.ES .intern (*Name);
555
560
SymbolFlags[InternedName] = std::move (*SymFlags);
0 commit comments