mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-27 15:41:46 +00:00
[llvm-link] Fix crash when materializing appending global
This patch fixes llvm-link crash when materializing global variable with appending linkage and initializer that depends on another global with appending linkage. Reviewed By: tra Differential Revision: https://reviews.llvm.org/D95329
This commit is contained in:
parent
8b11714885
commit
13cedcaf45
@ -819,11 +819,15 @@ void Mapper::flush() {
|
||||
break;
|
||||
case WorklistEntry::MapAppendingVar: {
|
||||
unsigned PrefixSize = AppendingInits.size() - E.AppendingGVNumNewMembers;
|
||||
// mapAppendingVariable call can change AppendingInits if initalizer for
|
||||
// the variable depends on another appending global, because of that inits
|
||||
// need to be extracted and updated before the call.
|
||||
SmallVector<Constant *, 8> NewInits(
|
||||
drop_begin(AppendingInits, PrefixSize));
|
||||
AppendingInits.resize(PrefixSize);
|
||||
mapAppendingVariable(*E.Data.AppendingGV.GV,
|
||||
E.Data.AppendingGV.InitPrefix,
|
||||
E.AppendingGVIsOldCtorDtor,
|
||||
makeArrayRef(AppendingInits).slice(PrefixSize));
|
||||
AppendingInits.resize(PrefixSize);
|
||||
E.AppendingGVIsOldCtorDtor, makeArrayRef(NewInits));
|
||||
break;
|
||||
}
|
||||
case WorklistEntry::MapGlobalIndirectSymbol:
|
||||
|
10
llvm/test/Linker/appending-global-crash.ll
Normal file
10
llvm/test/Linker/appending-global-crash.ll
Normal file
@ -0,0 +1,10 @@
|
||||
; RUN: llvm-link %s -S -o - | FileCheck %s
|
||||
|
||||
; Check that llvm-link does not crash when materializing appending global with
|
||||
; initializer depending on another appending global.
|
||||
|
||||
; CHECK-DAG: @use = appending global [1 x i8*] [i8* bitcast ([1 x i8*]* @var to i8*)]
|
||||
; CHECK-DAG: @var = appending global [1 x i8*] undef
|
||||
|
||||
@use = appending global [1 x i8*] [i8* bitcast ([1 x i8*]* @var to i8*)]
|
||||
@var = appending global [1 x i8*] undef
|
Loading…
Reference in New Issue
Block a user