With the latest SVN trunk version of clang, run the following commands: $ touch empty.cfg $ touch empty.c $ clang --config ./empty.cfg -Wall -Wextra -Wformat -Wstrict-aliasing -Wshadow -Wpacked -Winline -Wimplicit-function-declaration -c empty.c -O2 clang: /home/martin/code/llvm/include/llvm/ADT/SmallVector.h:149: T& llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::operator[](llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::size_type) [with T = const char*; <template-parameter-1-2> = void; llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::reference = const char*&; llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::size_type = long unsigned int]: Assertion `idx < size()' failed. Stack dump: 0. Program arguments: clang --config ./empty.cfg -Wall -Wextra -Wformat -Wstrict-aliasing -Wshadow -Wpacked -Winline -Wimplicit-function-declaration -c empty.c -O2 1. Compilation construction 2. Building compilation jobs 3. Building compilation jobs #0 0x00007f6191e0b9a7 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/martin/code/llvm/lib/Support/Unix/Signals.inc:398:0 #1 0x00007f6191e0ba3a PrintStackTraceSignalHandler(void*) /home/martin/code/llvm/lib/Support/Unix/Signals.inc:462:0 #2 0x00007f6191e09c23 llvm::sys::RunSignalHandlers() /home/martin/code/llvm/lib/Support/Signals.cpp:49:0 #3 0x00007f6191e0b21c SignalHandler(int) /home/martin/code/llvm/lib/Support/Unix/Signals.inc:252:0 #4 0x00007f618ef6f4b0 (/lib/x86_64-linux-gnu/libc.so.6+0x354b0) #5 0x00007f618ef6f428 gsignal /build/glibc-Cl5G7W/glibc-2.23/signal/../sysdeps/unix/sysv/linux/raise.c:54:0 #6 0x00007f618ef7102a abort /build/glibc-Cl5G7W/glibc-2.23/stdlib/abort.c:91:0 #7 0x00007f618ef67bd7 __assert_fail_base /build/glibc-Cl5G7W/glibc-2.23/assert/assert.c:92:0 #8 0x00007f618ef67c82 (/lib/x86_64-linux-gnu/libc.so.6+0x2dc82) #9 0x00007f619288d99e llvm::SmallVectorTemplateCommon<char const*, void>::operator[](unsigned long) /home/martin/code/llvm/include/llvm/ADT/SmallVector.h:149:0 #10 0x00007f619288d99e llvm::opt::InputArgList::getArgString(unsigned int) const /home/martin/code/llvm/include/llvm/Option/ArgList.h:414:0 #11 0x00007f619288d9f9 llvm::opt::DerivedArgList::getArgString(unsigned int) const /home/martin/code/llvm/include/llvm/Option/ArgList.h:449:0 #12 0x00007f619288bd45 llvm::opt::ArgList::GetOrMakeJoinedArgString(unsigned int, llvm::StringRef, llvm::StringRef) const /home/martin/code/llvm/lib/Option/ArgList.cpp:192:0 #13 0x00007f61928896d6 llvm::opt::Arg::render(llvm::opt::ArgList const&, llvm::SmallVector<char const*, 16u>&) const /home/martin/code/llvm/lib/Option/Arg.cpp:112:0 #14 0x00007f618fe555b4 clang::driver::tools::Clang::ConstructJob(clang::driver::Compilation&, clang::driver::JobAction const&, clang::driver::InputInfo const&, llvm::SmallVector<clang::driver::InputInfo, 4u> const&, llvm::opt::ArgList const&, char const*) const /home/martin/code/llvm/tools/clang/lib/Driver/ToolChains/Clang.cpp:3725:0 #15 0x00007f618fdc3d19 clang::driver::Driver::BuildJobsForActionNoCache(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, clang::driver::InputInfo, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const, clang::driver::InputInfo> > >&, clang::driver::Action::OffloadKind) const /home/martin/code/llvm/tools/clang/lib/Driver/Driver.cpp:3780:0 #16 0x00007f618fdc1f9d clang::driver::Driver::BuildJobsForAction(clang::driver::Compilation&, clang::driver::Action const*, clang::driver::ToolChain const*, llvm::StringRef, bool, bool, char const*, std::map<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, clang::driver::InputInfo, std::less<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::allocator<std::pair<std::pair<clang::driver::Action const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const, clang::driver::InputInfo> > >&, clang::driver::Action::OffloadKind) const /home/martin/code/llvm/tools/clang/lib/Driver/Driver.cpp:3532:0 #17 0x00007f618fdc094f clang::driver::Driver::BuildJobs(clang::driver::Compilation&) const /home/martin/code/llvm/tools/clang/lib/Driver/Driver.cpp:3153:0 #18 0x00007f618fdb3637 clang::driver::Driver::BuildCompilation(llvm::ArrayRef<char const*>) /home/martin/code/llvm/tools/clang/lib/Driver/Driver.cpp:1006:0 #19 0x0000000000448457 main /home/martin/code/llvm/tools/clang/tools/driver/driver.cpp:459:0 #20 0x00007f618ef5a830 __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:325:0 #21 0x0000000000444239 _start (bin/clang+0x444239) Aborted (core dumped) This only seems to happen when explicitly naming the config file via the --config option; if inferred automatically by invoking clang via a <prefix>-clang symlink, the same issue doesn't seem to occur.
Thank you for reporting the issue! Must be fixed in r330926.
Yes, I can confirm that my original usecase also is fixed now, thanks!