diff options
| -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"} |

