Index: COFF/Writer.cpp =================================================================== --- COFF/Writer.cpp +++ COFF/Writer.cpp @@ -187,6 +187,8 @@ C->setRVA(Off); C->OutputSectionOff = Off; Off += C->getSize(); + if (Off > UINT32_MAX) + error("section larger than 4 GiB: " + Name); Header.VirtualSize = Off; if (C->hasData()) Header.SizeOfRawData = alignTo(Off, SectorSize); Index: test/COFF/section-size.s =================================================================== --- /dev/null +++ test/COFF/section-size.s @@ -0,0 +1,14 @@ +# REQUIRES: x86 +# RUN: llvm-mc -filetype=obj -triple=x86_64-windows-msvc %s -o %tmain.obj +# RUN: echo '.lcomm s, 0x80000000' | llvm-mc -filetype=obj -triple=x86_64-windows-msvc -o %t80000000_1.obj +# RUN: cp %t80000000_1.obj %t80000000_2.obj +# RUN: echo '.lcomm s, 0xffffffff' | llvm-mc -filetype=obj -triple=x86_64-windows-msvc -o %tffffffff.obj + +# Run: lld-link -entry:main %tmain.obj %tffffffff.obj -out:%t.exe + +# RUN: not lld-link -entry:main %tmain.obj %t80000000_1.obj %t80000000_2.obj -out:%t.exe 2>&1 | FileCheck %s +# CHECK: error: section larger than 4 GiB: .bss + +.globl main +main: + retq