diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -212,6 +212,8 @@ # -fPIC does not enable the large code model for GCC on AIX but does for XL. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") append("-mcmodel=large" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) + append("-Wl, bglink=large" + CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) elseif(CMAKE_CXX_COMPILER_ID MATCHES "XL") # XL generates a small number of relocations not of the large model, -bbigtoc is needed. append("-Wl,-bbigtoc" diff --git a/llvm/lib/Support/CommandLine.cpp b/llvm/lib/Support/CommandLine.cpp --- a/llvm/lib/Support/CommandLine.cpp +++ b/llvm/lib/Support/CommandLine.cpp @@ -1306,6 +1306,11 @@ } const llvm::vfs::Status &FileStatus = Res.get(); + if (FileStatus.isDirectory()) { + return createStringError(std::make_error_code(std::errc::is_a_directory), + Twine("cannot not open file '") + FName + + "': Is a directory"); + } auto IsEquivalent = [FileStatus, this](const ResponseFileRecord &RFile) -> ErrorOr { ErrorOr RHS = FS->status(RFile.File); diff --git a/llvm/unittests/Support/CommandLineTest.cpp b/llvm/unittests/Support/CommandLineTest.cpp --- a/llvm/unittests/Support/CommandLineTest.cpp +++ b/llvm/unittests/Support/CommandLineTest.cpp @@ -1060,7 +1060,6 @@ ASSERT_STREQ(Argv[0], "clang"); ASSERT_STREQ(Argv[1], AFileExp.c_str()); -#if !defined(_AIX) && !defined(__MVS__) std::string ADirExp = std::string("@") + std::string(ADir.path()); Argv = {"clang", ADirExp.c_str()}; Res = cl::ExpandResponseFiles(Saver, cl::TokenizeGNUCommandLine, Argv); @@ -1068,7 +1067,6 @@ ASSERT_EQ(2U, Argv.size()); ASSERT_STREQ(Argv[0], "clang"); ASSERT_STREQ(Argv[1], ADirExp.c_str()); -#endif } TEST(CommandLineTest, SetDefaultValue) {