<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Clang config files can crash argument handling"
   href="https://bugs.llvm.org/show_bug.cgi?id=37196">37196</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Clang config files can crash argument handling
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Driver
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>martin@martin.st
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>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>
<span class="quote">>::operator[](llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2>
>::size_type) [with T = const char*; <template-parameter-1-2> = void;</span >
llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2> >::reference =
const char*&; llvm::SmallVectorTemplateCommon<T, <template-parameter-1-2>
<span class="quote">>::size_type = long unsigned int]: Assertion `idx < size()' failed.</span >
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> >
<span class="quote">>, clang::driver::InputInfo, std::less<std::pair<clang::driver::Action const*,</span >
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
<span class="quote">> >, std::allocator<std::pair<std::pair<clang::driver::Action const*,</span >
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
<span class="quote">> const, clang::driver::InputInfo> > >&, clang::driver::Action::OffloadKind)</span >
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> >
<span class="quote">>, clang::driver::InputInfo, std::less<std::pair<clang::driver::Action const*,</span >
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
<span class="quote">> >, std::allocator<std::pair<std::pair<clang::driver::Action const*,</span >
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
<span class="quote">> const, clang::driver::InputInfo> > >&, clang::driver::Action::OffloadKind)</span >
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.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>