Index: lld/ELF/Arch/AMDGPU.cpp =================================================================== --- lld/ELF/Arch/AMDGPU.cpp +++ lld/ELF/Arch/AMDGPU.cpp @@ -105,7 +105,8 @@ } uint32_t AMDGPU::calcEFlags() const { - assert(!objectFiles.empty()); + if (objectFiles.empty()) + return 0; uint8_t abiVersion = cast>(objectFiles[0])->getObj() .getHeader().e_ident[EI_ABIVERSION]; Index: lld/ELF/SyntheticSections.cpp =================================================================== --- lld/ELF/SyntheticSections.cpp +++ lld/ELF/SyntheticSections.cpp @@ -3712,7 +3712,7 @@ return 0; } - if (config->emachine == EM_AMDGPU) { + if (config->emachine == EM_AMDGPU && !objectFiles.empty()) { uint8_t ver = objectFiles[0]->abiVersion; for (InputFile *file : makeArrayRef(objectFiles).slice(1)) if (file->abiVersion != ver) Index: lld/test/ELF/amdgpu-elf-flags.s =================================================================== --- lld/test/ELF/amdgpu-elf-flags.s +++ lld/test/ELF/amdgpu-elf-flags.s @@ -2,8 +2,15 @@ # RUN: llvm-mc -triple amdgcn-amd-amdhsa -mcpu=gfx803 --amdhsa-code-object-version=2 -filetype=obj %S/Inputs/amdgpu-kernel-0.s -o %t-0.o # RUN: llvm-mc -triple amdgcn-amd-amdhsa -mcpu=gfx803 --amdhsa-code-object-version=2 -filetype=obj %S/Inputs/amdgpu-kernel-1.s -o %t-1.o # RUN: ld.lld -shared %t-0.o %t-1.o -o %t.so -# RUN: llvm-readobj --file-headers %t.so | FileCheck %s +# RUN: llvm-readobj --file-headers %t.so | FileCheck -check-prefix=FIRSTLINK %s -# CHECK: Flags [ -# CHECK: EF_AMDGPU_MACH_AMDGCN_GFX803 (0x2A) -# CHECK: ] +## Try to link again where there are no object file inputs, only a shared library. Issue 47690 +# RUN: ld.lld -shared %t.so -o - | llvm-readobj -h - | FileCheck -check-prefix=SECONDLINK %s + + +# FIRSTLINK: Flags [ +# FIRSTLINK-NEXT: EF_AMDGPU_MACH_AMDGCN_GFX803 (0x2A) +# FIRSTLINK-NEXT: ] + +# SECONDLINK: Flags [ (0x0) +# SECONDLINK-NEXT: ]