Index: ELF/InputFiles.cpp =================================================================== --- ELF/InputFiles.cpp +++ ELF/InputFiles.cpp @@ -400,9 +400,9 @@ /*CanOmitFromDynSym*/ false, this) ->body(); case SHN_COMMON: - if (Sym->st_value == 0) + if (Sym->st_value == 0 || Sym->st_value >= UINT32_MAX) fatal(getFilename(this) + ": common symbol '" + Name + - "' alignment is 0"); + "' alignment is 0 or too large"); return elf::Symtab::X->addCommon(Name, Sym->st_size, Sym->st_value, Binding, Sym->st_other, Sym->getType(), this) Index: test/ELF/invalid/common-symbol-alignment.s =================================================================== --- test/ELF/invalid/common-symbol-alignment.s +++ test/ELF/invalid/common-symbol-alignment.s @@ -3,4 +3,9 @@ ## common-symbol-alignment.elf contains common symbol with zero alignment. # RUN: not ld.lld %S/Inputs/common-symbol-alignment.elf \ # RUN: -o %t 2>&1 | FileCheck %s -# CHECK: common symbol 'bar' alignment is 0 +# CHECK: common symbol 'bar' alignment is 0 or too large + +## common-symbol-alignment2.elf contains common symbol alignment greater +## than UINT32_MAX. +# RUN: not ld.lld %S/Inputs/common-symbol-alignment2.elf \ +# RUN: -o %t 2>&1 | FileCheck %s