[LLVMbugs] [Bug 14989] New: std::stringstream::str() throws exception on Windows

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Thu Jan 17 14:23:37 PST 2013


             Bug #: 14989
           Summary: std::stringstream::str() throws exception on Windows
           Product: new-bugs
           Version: 3.2
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Severity: normal
          Priority: P
         Component: new bugs
        AssignedTo: unassignedbugs at nondot.org
        ReportedBy: oget.fedora at gmail.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Hi, I downloaded 3.2 source tarballs, and made the following changes before
compiling on Windows XP via MinGW-4.7:

a- In llvm-3.2.src/tools/clang/lib/AST/ItaniumCXXABI.cpp I added the line
   AddMinGWCPlusPlusIncludePaths("c:/MinGW/lib/gcc", "mingw32", "4.7.2);
so that clang++ can find my C++ headers.

b- In llvm-3.2.src/tools/clang/lib/AST/ItaniumCXXABI.cpp, as explained in [1],
I had to change the function getDefaultMethodCallConv(bool isVariadic)

   CallingConv getDefaultMethodCallConv(bool isVariadic) const {
      return CC_C;
   CallingConv getDefaultMethodCallConv(bool isVariadic) const {
    if (!isVariadic && Context.getTargetInfo().getTriple().getArch() ==
      return CC_X86ThisCall;
      return CC_C;

Otherwise, my executables (created by clang++) crash as soon as I use a
standard library function  (Is this bug reported before?).


Then I compile llvm with the following options (*):
   ../llvm-3.2.src/configure --disable-docs --enable-targets=x86
--prefix=/c/mingw --with-extra-ld-options=-static

The last option is to reduce the compilation times (source files that I compile
using clang). Otherwise, every time I call clang, the linker spends ~10 seconds
to resolve the DLLs on Windows, increasing the compilation time a lot. See [2].
Even clang --help takes 10 seconds to print something.

After building llvm/clang, I compile the following code:

#include <sstream>
int main()
  std::stringstream ss;
  ss << "hello";

   clang++ -g -O0 ctest.cpp -o ctest.exe

When I execute ctest.exe I get the following output:
terminate called after throwing an instance of 'std::length_error'
  what():  basic_string::_S_create

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

I also tried building llvm-3.2 via --disable-assertions and/or
--enable-optimized but these didn't change the (mis)behavior. 

P.S : llvm-3.2 compiled via gcc-4.5 does not have this problem. However with
gcc-4.5, I cannot use the --with-extra-ld-options=-static flag (as the build
fails otherwise, because linker tries to link to a pthread library which is not
available), so I end up having the same problem (*) above and my compilation
times with clang become huge.


[1] http://tehsausage.com/clang-mingw-gcc-4-7

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list