diff options
| author | Michael Kuperstein <michael.m.kuperstein@intel.com> | 2015-02-16 11:57:43 +0000 |
|---|---|---|
| committer | Michael Kuperstein <michael.m.kuperstein@intel.com> | 2015-02-16 11:57:43 +0000 |
| commit | f0e4ccffc5738fd585d39f9fbb38659517e3bd31 (patch) | |
| tree | 953a22bd92e4c29c71525bedc097d9fde7dd755a /clang | |
| parent | fc3e62675219aa78fe084c265f7bcea6f2834033 (diff) | |
| download | bcm5719-llvm-f0e4ccffc5738fd585d39f9fbb38659517e3bd31.tar.gz bcm5719-llvm-f0e4ccffc5738fd585d39f9fbb38659517e3bd31.zip | |
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
llvm-svn: 229376
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/CodeGen/TargetInfo.cpp | 10 | ||||
| -rw-r--r-- | clang/test/CodeGen/pragma-comment.c | 6 |
2 files changed, 12 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index d0678214190..117767d0b36 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -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; } diff --git a/clang/test/CodeGen/pragma-comment.c b/clang/test/CodeGen/pragma-comment.c index 5869ca85f33..0a7d3c7a475 100644 --- a/clang/test/CodeGen/pragma-comment.c +++ b/clang/test/CodeGen/pragma-comment.c @@ -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"} |

