From e2e4a2f49fa200f42a380979c29a04a87605b688 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 26 Dec 2018 21:04:08 +0000 Subject: [clang-cl] Treat inputs as C++ with /E, like MSVC midl invokes the compiler on .idl files with /E. Before this change, we would treat unrecognized inputs as object files. Now we pre-process to stdout as expected. I checked that MSVC defines __cplusplus when invoked this way, so treating the input as C++ seems like the right thing to do. After this change, I was able to run midl like this with clang-cl: $ midl -cpp_cmd clang-cl.exe foo.idl Things worked for the example IDL file in the Microsoft documentation, but beyond that, I don't know if this will work well. Fixes PR40140 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@350072 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/Driver/cl-idl.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test/Driver/cl-idl.cpp (limited to 'test/Driver') diff --git a/test/Driver/cl-idl.cpp b/test/Driver/cl-idl.cpp new file mode 100644 index 0000000000..7843ab3133 --- /dev/null +++ b/test/Driver/cl-idl.cpp @@ -0,0 +1,18 @@ +// Note: %s must be preceded by --, otherwise it may be interpreted as a +// command-line option, e.g. on Mac where %s is commonly under /Users. + +// Test that 'clang-cl /E' treats inputs as C++ if the extension is +// unrecognized. midl relies on this. See PR40140. + +// Use a plain .cpp extension first. +// RUN: %clang_cl /E -- %s | FileCheck %s + +// Copy to use .idl as the extension. +// RUN: cp %s %t.idl +// RUN: %clang_cl /E -- %t.idl | FileCheck %s + +#ifdef __cplusplus +struct IsCPlusPlus {}; +#endif + +// CHECK: struct IsCPlusPlus {}; -- cgit v1.2.1