Revert "[IRLinker] Fix mapping of declaration metadata"

This reverts commit be0ef4b95d.
Investigating use after free issue.
This commit is contained in:
Carl Ritson 2023-03-08 20:42:17 +09:00
parent a999669982
commit e510d0bda0
5 changed files with 3 additions and 41 deletions

View File

@ -112,9 +112,8 @@ inline RemapFlags operator|(RemapFlags LHS, RemapFlags RHS) {
/// There are a number of top-level entry points:
/// - \a mapValue() (and \a mapConstant());
/// - \a mapMetadata() (and \a mapMDNode());
/// - \a remapInstruction();
/// - \a remapFunction(); and
/// - \a remapGlobalObjectMetadata().
/// - \a remapInstruction(); and
/// - \a remapFunction().
///
/// The \a ValueMaterializer can be used as a callback, but cannot invoke any
/// of these top-level functions recursively. Instead, callbacks should use
@ -176,7 +175,6 @@ public:
void remapInstruction(Instruction &I);
void remapFunction(Function &F);
void remapGlobalObjectMetadata(GlobalObject &GO);
void scheduleMapGlobalInitializer(GlobalVariable &GV, Constant &Init,
unsigned MappingContextID = 0);

View File

@ -409,10 +409,6 @@ class IRLinker {
std::vector<GlobalValue *> Worklist;
std::vector<std::pair<GlobalValue *, Value*>> RAUWWorklist;
/// Set of globals with eagerly copied metadata that may require remapping.
/// This remapping is performed after metadata linking.
DenseSet<GlobalObject *> UnmappedMetadata;
void maybeAdd(GlobalValue *GV) {
if (ValuesToLink.insert(GV).second)
Worklist.push_back(GV);
@ -754,11 +750,8 @@ GlobalValue *IRLinker::copyGlobalValueProto(const GlobalValue *SGV,
if (auto *NewGO = dyn_cast<GlobalObject>(NewGV)) {
// Metadata for global variables and function declarations is copied eagerly.
if (isa<GlobalVariable>(SGV) || SGV->isDeclaration()) {
if (isa<GlobalVariable>(SGV) || SGV->isDeclaration())
NewGO->copyMetadata(cast<GlobalObject>(SGV), 0);
if (SGV->isDeclaration())
UnmappedMetadata.insert(NewGO);
}
}
// Remove these copied constants in case this stays a declaration, since
@ -1658,13 +1651,6 @@ Error IRLinker::run() {
// are properly remapped.
linkNamedMDNodes();
// Clean up any global objects with potentially unmapped metadata.
// Specifically declarations which did not become definitions.
for (GlobalObject *NGO : UnmappedMetadata) {
if (NGO->isDeclaration())
Mapper.remapGlobalObjectMetadata(*NGO);
}
if (!IsPerformingImport && !SrcM->getModuleInlineAsm().empty()) {
// Append the module inline asm string.
DstM.appendModuleInlineAsm(adjustInlineAsm(SrcM->getModuleInlineAsm(),

View File

@ -1181,10 +1181,6 @@ void ValueMapper::remapFunction(Function &F) {
FlushingMapper(pImpl)->remapFunction(F);
}
void ValueMapper::remapGlobalObjectMetadata(GlobalObject &GO) {
FlushingMapper(pImpl)->remapGlobalObjectMetadata(GO);
}
void ValueMapper::scheduleMapGlobalInitializer(GlobalVariable &GV,
Constant &Init,
unsigned MCID) {

View File

@ -10,13 +10,4 @@ define void @b() !b !0 {
unreachable
}
%AltHandle = type { i8* }
declare !types !1 %AltHandle @init.AltHandle()
define void @uses.AltHandle() {
%.res = call %AltHandle @init.AltHandle()
unreachable
}
!0 = !{!"b"}
!1 = !{%AltHandle undef}

View File

@ -21,15 +21,6 @@ define void @a() !a !0 {
unreachable
}
; CHECK-DAG: define %[[HandleType:[A-Za-z]+]] @init.Handle() {
; CHECK-DAG: declare !types ![[C:[0-9]+]] %[[HandleType]] @init.AltHandle()
; CHECK-DAG: define void @uses.AltHandle() {
%Handle = type { i8* }
define %Handle @init.Handle() {
unreachable
}
; CHECK-DAG: ![[A]] = !{!"a"}
; CHECK-DAG: ![[B]] = !{!"b"}
; CHECK-DAG: ![[C]] = !{%[[HandleType]] undef}
!0 = !{!"a"}