... and the problem seems to be that getMainExecutable() returns a StringRef to local buffer. I'll test a fix for that.
On Mon, Dec 29, 2014 at 11:44 AM, Alexey Samsonov <[email protected]> wrote: > Looks like this caused > http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/204/steps/check-clang%20msan/logs/stdio > > On Mon, Dec 29, 2014 at 4:09 AM, Chandler Carruth <[email protected]> > wrote: > >> Author: chandlerc >> Date: Mon Dec 29 06:09:08 2014 >> New Revision: 224924 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=224924&view=rev >> Log: >> [multilib] Teach Clang's code about multilib by threading >> a CLANG_LIBDIR_SUFFIX down from the build system and using that as part >> of the default resource dir computation. >> >> Without this, essentially nothing that uses the clang driver works when >> building clang with a libdir suffix. This is probably the single biggest >> missing piece of support for multilib as without this people could hack >> clang to end up installed in the correct location, but it would then >> fail to find its own basic resources. I know of at least one distro that >> has some variation on this patch to hack around this; hopefully they'll >> be able to use the libdir suffix functionality directly as the rest of >> these bits land. >> >> This required fixing a copy of the code to compute Clang's resource >> directory that is buried inside of the frontend (!!!). It had bitrotted >> significantly relative to the driver code. I've made it essentially >> a clone of the driver code in order to keep tests (which use cc1 >> heavily) passing. This copy should probably just be removed and the >> frontend taught to always rely on an explicit resource directory from >> the driver, but that is a much more invasive change for another day. >> >> I've also updated one test which actually encoded the resource directory >> in its checked output to tolerate multilib suffixes. >> >> Note that this relies on a prior LLVM commit to add a stub to the >> autoconf build system for this variable. >> >> Modified: >> cfe/trunk/CMakeLists.txt >> cfe/trunk/include/clang/Config/config.h.cmake >> cfe/trunk/include/clang/Config/config.h.in >> cfe/trunk/lib/Driver/Driver.cpp >> cfe/trunk/lib/Frontend/CompilerInvocation.cpp >> cfe/trunk/test/Preprocessor/iwithprefix.c >> >> Modified: cfe/trunk/CMakeLists.txt >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/CMakeLists.txt?rev=224924&r1=224923&r2=224924&view=diff >> >> ============================================================================== >> --- cfe/trunk/CMakeLists.txt (original) >> +++ cfe/trunk/CMakeLists.txt Mon Dec 29 06:09:08 2014 >> @@ -193,6 +193,9 @@ endif() >> set(CLANG_VENDOR_UTI "org.llvm.clang" CACHE STRING >> "Vendor-specific uti.") >> >> +# The libdir suffix must exactly match whatever LLVM's configuration >> used. >> +set(CLANG_LIBDIR_SUFFIX "${LLVM_LIBDIR_SUFFIX}") >> + >> set(CLANG_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) >> set(CLANG_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}) >> >> >> Modified: cfe/trunk/include/clang/Config/config.h.cmake >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Config/config.h.cmake?rev=224924&r1=224923&r2=224924&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Config/config.h.cmake (original) >> +++ cfe/trunk/include/clang/Config/config.h.cmake Mon Dec 29 06:09:08 2014 >> @@ -8,6 +8,9 @@ >> /* Bug report URL. */ >> #define BUG_REPORT_URL "${BUG_REPORT_URL}" >> >> +/* Multilib suffix for libdir. */ >> +#define CLANG_LIBDIR_SUFFIX "${CLANG_LIBDIR_SUFFIX}" >> + >> /* Relative directory for resource files */ >> #define CLANG_RESOURCE_DIR "${CLANG_RESOURCE_DIR}" >> >> >> Modified: cfe/trunk/include/clang/Config/config.h.in >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Config/config.h.in?rev=224924&r1=224923&r2=224924&view=diff >> >> ============================================================================== >> --- cfe/trunk/include/clang/Config/config.h.in (original) >> +++ cfe/trunk/include/clang/Config/config.h.in Mon Dec 29 06:09:08 2014 >> @@ -8,6 +8,9 @@ >> /* Bug report URL. */ >> #undef BUG_REPORT_URL >> >> +/* Multilib suffix for libdir. */ >> +#undef CLANG_LIBDIR_SUFFIX >> + >> /* Relative directory for resource files */ >> #undef CLANG_RESOURCE_DIR >> >> >> Modified: cfe/trunk/lib/Driver/Driver.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=224924&r1=224923&r2=224924&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Driver/Driver.cpp (original) >> +++ cfe/trunk/lib/Driver/Driver.cpp Mon Dec 29 06:09:08 2014 >> @@ -65,10 +65,13 @@ Driver::Driver(StringRef ClangExecutable >> // Compute the path to the resource directory. >> StringRef ClangResourceDir(CLANG_RESOURCE_DIR); >> SmallString<128> P(Dir); >> - if (ClangResourceDir != "") >> + if (ClangResourceDir != "") { >> llvm::sys::path::append(P, ClangResourceDir); >> - else >> - llvm::sys::path::append(P, "..", "lib", "clang", >> CLANG_VERSION_STRING); >> + } else { >> + StringRef ClangLibdirSuffix(CLANG_LIBDIR_SUFFIX); >> + llvm::sys::path::append(P, "..", Twine("lib") + ClangLibdirSuffix, >> "clang", >> + CLANG_VERSION_STRING); >> + } >> ResourceDir = P.str(); >> } >> >> >> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=224924&r1=224923&r2=224924&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) >> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Dec 29 06:09:08 2014 >> @@ -10,6 +10,7 @@ >> #include "clang/Frontend/CompilerInvocation.h" >> #include "clang/Basic/FileManager.h" >> #include "clang/Basic/Version.h" >> +#include "clang/Config/config.h" >> #include "clang/Driver/DriverDiagnostic.h" >> #include "clang/Driver/Options.h" >> #include "clang/Driver/Util.h" >> @@ -982,14 +983,18 @@ static InputKind ParseFrontendArgs(Front >> >> std::string CompilerInvocation::GetResourcesPath(const char *Argv0, >> void *MainAddr) { >> - SmallString<128> P(llvm::sys::fs::getMainExecutable(Argv0, MainAddr)); >> + StringRef ClangExecutable = llvm::sys::fs::getMainExecutable(Argv0, >> MainAddr); >> + StringRef Dir = llvm::sys::path::parent_path(ClangExecutable); >> >> - if (!P.empty()) { >> - llvm::sys::path::remove_filename(P); // Remove /clang from >> foo/bin/clang >> - llvm::sys::path::remove_filename(P); // Remove /bin from foo/bin >> - >> - // Get foo/lib/clang/<version>/include >> - llvm::sys::path::append(P, "lib", "clang", CLANG_VERSION_STRING); >> + // Compute the path to the resource directory. >> + StringRef ClangResourceDir(CLANG_RESOURCE_DIR); >> + SmallString<128> P(Dir); >> + if (ClangResourceDir != "") { >> + llvm::sys::path::append(P, ClangResourceDir); >> + } else { >> + StringRef ClangLibdirSuffix(CLANG_LIBDIR_SUFFIX); >> + llvm::sys::path::append(P, "..", Twine("lib") + ClangLibdirSuffix, >> "clang", >> + CLANG_VERSION_STRING); >> } >> >> return P.str(); >> >> Modified: cfe/trunk/test/Preprocessor/iwithprefix.c >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/iwithprefix.c?rev=224924&r1=224923&r2=224924&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/Preprocessor/iwithprefix.c (original) >> +++ cfe/trunk/test/Preprocessor/iwithprefix.c Mon Dec 29 06:09:08 2014 >> @@ -9,7 +9,7 @@ >> >> // CHECK: #include <...> search starts here: >> // CHECK: {{.*}}.tmps/first >> -// CHECK: {{/|\\}}lib{{/|\\}}clang{{/|\\}}{{[.0-9]+}}{{/|\\}}include >> +// CHECK: >> {{/|\\}}lib{{(32|64)?}}{{/|\\}}clang{{/|\\}}{{[.0-9]+}}{{/|\\}}include >> // CHECK: {{.*}}.tmps/second >> // CHECK-NOT: {{.*}}.tmps >> >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > > > > -- > Alexey Samsonov > [email protected] > -- Alexey Samsonov [email protected]
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
