diff --git a/driver/cl_options.cpp b/driver/cl_options.cpp index 6c308675de..9fa44694ab 100644 --- a/driver/cl_options.cpp +++ b/driver/cl_options.cpp @@ -400,16 +400,18 @@ cl::list cl::value_desc("linkerflag"), cl::cat(linkingCategory), cl::Prefix); -cl::list - ccSwitches("Xcc", cl::desc("Pass to GCC/Clang for linking"), - cl::value_desc("ccflag"), cl::cat(linkingCategory)); +cl::list ccSwitches( + "Xcc", cl::value_desc("ccflag"), cl::cat(linkingCategory), + cl::desc("Pass to GCC/Clang for linking/preprocessing")); -cl::opt - moduleDeps("deps", cl::ValueOptional, cl::ZeroOrMore, - cl::value_desc("filename"), - cl::desc("Write module dependencies to (only imports). " - "'-deps' alone prints module dependencies " - "(imports/file/version/debug/lib)")); +cl::list cppSwitches("Xcpp", cl::value_desc("cppflag"), + cl::desc("Pass to C preprocessor")); + +cl::opt moduleDeps( + "deps", cl::ValueOptional, cl::ZeroOrMore, cl::value_desc("filename"), + cl::desc("Write module dependencies to (only imports). " + "'-deps' alone prints module dependencies " + "(imports/file/version/debug/lib)")); cl::opt makeDeps("makedeps", cl::ValueOptional, cl::ZeroOrMore, diff --git a/driver/cl_options.h b/driver/cl_options.h index 8bf0866619..b78a715e16 100644 --- a/driver/cl_options.h +++ b/driver/cl_options.h @@ -75,6 +75,7 @@ extern cl::opt makeDeps; extern cl::opt cacheDir; extern cl::list linkerSwitches; extern cl::list ccSwitches; +extern cl::list cppSwitches; extern cl::list includeModulePatterns; extern cl::opt m32bits; diff --git a/driver/cpreprocessor.cpp b/driver/cpreprocessor.cpp index f6d95b9ba1..791c4257eb 100644 --- a/driver/cpreprocessor.cpp +++ b/driver/cpreprocessor.cpp @@ -46,7 +46,9 @@ FileName runCPreprocessor(FileName csrcfile, const Loc &loc, bool &ifile, for (const auto &ccSwitch : opts::ccSwitches) { args.push_back(ccSwitch); } - // TODO: -Xcpp switches? + for (const auto &cppSwitch : opts::cppSwitches) { + args.push_back(cppSwitch); + } if (isMSVC) { args.push_back("/P"); // run preprocessor diff --git a/driver/ldmd.cpp b/driver/ldmd.cpp index 4a9aaf6369..ba7f0ad9dd 100644 --- a/driver/ldmd.cpp +++ b/driver/ldmd.cpp @@ -234,7 +234,9 @@ Where:\n\ #if 0 " -os= sets target operating system to \n" #endif -" -preview= enable an upcoming language change identified by 'name'\n\ +" -P=\n\ + pass preprocessorflag to C preprocessor\n\ + -preview= enable an upcoming language change identified by 'name'\n\ -preview=[h|help|?]\n\ list all upcoming language changes\n\ -profile profile runtime performance of generated code\n" @@ -707,7 +709,11 @@ void translateArgs(const llvm::SmallVectorImpl &ldmdArgs, exit(EXIT_SUCCESS); } /* -L - * -defaultlib + */ + else if (p[1] == 'P') { + ldcArgs.push_back(concat("-Xcpp=", p + 2 + (p[2] == '=' ? 1 : 0))); + } + /* -defaultlib * -debuglib * -deps * -main diff --git a/tests/dmd/compilable/cppflags.c b/tests/dmd/compilable/cppflags.c index e5be469fe9..927463631f 100644 --- a/tests/dmd/compilable/cppflags.c +++ b/tests/dmd/compilable/cppflags.c @@ -1,5 +1,4 @@ /* REQUIRED_ARGS: -P=-DABC=3 */ -// DISABLED: LDC // FIXME _Static_assert(ABC == 3, "1");