Author: mkuper Date: Mon Feb 16 05:57:43 2015 New Revision: 229376 URL: http://llvm.org/viewvc/llvm-project?rev=229376&view=rev Log: Fix quoting of #pragma comment for MS compat, clang part.
For #pragma comment(linker, ...) MSVC expects the comment string to be quoted, but for #pragma comment(lib, ...) the compiler itself quotes the library name. Since this distinction disappears by the time the directive reaches the backend, move quoting for the "lib" version to the frontend. Differential Revision: http://reviews.llvm.org/D7653 Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp cfe/trunk/test/CodeGen/pragma-comment.c Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=229376&r1=229375&r2=229376&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Mon Feb 16 05:57:43 2015 @@ -1614,11 +1614,15 @@ public: }; static std::string qualifyWindowsLibrary(llvm::StringRef Lib) { - // If the argument does not end in .lib, automatically add the suffix. This - // matches the behavior of MSVC. - std::string ArgStr = Lib; + // If the argument does not end in .lib, automatically add the suffix. + // If the argument contains a space, enclose it in quotes. + // This matches the behavior of MSVC. + bool Quote = (Lib.find(" ") != StringRef::npos); + std::string ArgStr = Quote ? "\"" : ""; + ArgStr += Lib; if (!Lib.endswith_lower(".lib")) ArgStr += ".lib"; + ArgStr += Quote ? "\"" : ""; return ArgStr; } Modified: cfe/trunk/test/CodeGen/pragma-comment.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/pragma-comment.c?rev=229376&r1=229375&r2=229376&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/pragma-comment.c (original) +++ cfe/trunk/test/CodeGen/pragma-comment.c Mon Feb 16 05:57:43 2015 @@ -6,17 +6,21 @@ #pragma comment(lib, "msvcrt.lib") #pragma comment(lib, "kernel32") #pragma comment(lib, "USER32.LIB") +#pragma comment(lib, "with space") #define BAR "2" #pragma comment(linker," /bar=" BAR) +#pragma comment(linker," /foo=\"foo bar\"") // CHECK: !llvm.module.flags = !{{{.*}}} // CHECK: !{{[0-9]+}} = !{i32 6, !"Linker Options", ![[link_opts:[0-9]+]]} -// CHECK: ![[link_opts]] = !{![[msvcrt:[0-9]+]], ![[kernel32:[0-9]+]], ![[USER32:[0-9]+]], ![[bar:[0-9]+]]} +// CHECK: ![[link_opts]] = !{![[msvcrt:[0-9]+]], ![[kernel32:[0-9]+]], ![[USER32:[0-9]+]], ![[space:[0-9]+]], ![[bar:[0-9]+]], ![[foo:[0-9]+]]} // CHECK: ![[msvcrt]] = !{!"/DEFAULTLIB:msvcrt.lib"} // CHECK: ![[kernel32]] = !{!"/DEFAULTLIB:kernel32.lib"} // CHECK: ![[USER32]] = !{!"/DEFAULTLIB:USER32.LIB"} +// CHECK: ![[space]] = !{!"/DEFAULTLIB:\22with space.lib\22"} // CHECK: ![[bar]] = !{!" /bar=2"} +// CHECK: ![[foo]] = !{!" /foo=\22foo bar\22"} // LINUX: !{!"-lmsvcrt.lib"} // LINUX: !{!"-lkernel32"} _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
