Index: ELF/Driver.cpp =================================================================== --- ELF/Driver.cpp +++ ELF/Driver.cpp @@ -1026,7 +1026,10 @@ StringRef From; StringRef To; std::tie(From, To) = StringRef(Arg->getValue()).split('='); - readDefsym(From, MemoryBufferRef(To, "-defsym")); + if (From.empty() || To.empty()) + error("-defsym: syntax error"); + else + readDefsym(From, MemoryBufferRef(To, "-defsym")); break; } case OPT_script: Index: test/ELF/defsym.s =================================================================== --- test/ELF/defsym.s +++ test/ELF/defsym.s @@ -68,8 +68,12 @@ # EXPR-NEXT: Section: Absolute # EXPR-NEXT: } -# RUN: not ld.lld -o %t %t.o --defsym=foo2=und 2>&1 | FileCheck %s -check-prefix=ERR -# ERR: error: -defsym:1: symbol not found: und +# RUN: not ld.lld -o %t %t.o --defsym=foo2=und 2>&1 | FileCheck %s -check-prefix=ERR1 +# ERR1: error: -defsym:1: symbol not found: und + +# RUN: not ld.lld -o %t %t.o --defsym= 2>&1 | FileCheck %s -check-prefix=ERR2 +# RUN: not ld.lld -o %t %t.o --defsym=foo 2>&1 | FileCheck %s -check-prefix=ERR2 +# ERR2: error: -defsym: syntax error .globl foo1 foo1 = 0x123