Index: include/clang/Driver/CC1Options.td =================================================================== --- include/clang/Driver/CC1Options.td +++ include/clang/Driver/CC1Options.td @@ -636,6 +636,8 @@ } +def echo_main_file_name : Flag<["-"], "echo-main-file-name">, + HelpText<"Echo the main file name">; def fblocks_runtime_optional : Flag<["-"], "fblocks-runtime-optional">, HelpText<"Weakly link in the blocks runtime">; def fexternc_nounwind : Flag<["-"], "fexternc-nounwind">, Index: include/clang/Driver/CLCompatOptions.td =================================================================== --- include/clang/Driver/CLCompatOptions.td +++ include/clang/Driver/CLCompatOptions.td @@ -158,6 +158,9 @@ def _SLASH_showIncludes : CLFlag<"showIncludes">, HelpText<"Print info about included files to stderr">, Alias; +def _SLASH_showFilenames : CLFlag<"showFilenames">, + HelpText<"Print the name of each compiled file">, + Alias; def _SLASH_source_charset : CLCompileJoined<"source-charset:">, HelpText<"Source encoding, supports only UTF-8">, Alias; def _SLASH_execution_charset : CLCompileJoined<"execution-charset:">, Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -3530,6 +3530,8 @@ // -save-temps. CmdArgs.push_back("-main-file-name"); CmdArgs.push_back(getBaseInputName(Args, Input)); + if (Arg *A = Args.getLastArg(options::OPT_echo_main_file_name)) + A->render(Args, CmdArgs); // Some flags which affect the language (via preprocessor // defines). Index: lib/Frontend/CompilerInvocation.cpp =================================================================== --- lib/Frontend/CompilerInvocation.cpp +++ lib/Frontend/CompilerInvocation.cpp @@ -789,6 +789,9 @@ Opts.PreferVectorWidth = Args.getLastArgValue(OPT_mprefer_vector_width_EQ); Opts.MainFileName = Args.getLastArgValue(OPT_main_file_name); + if (Args.hasArg(OPT_echo_main_file_name)) + llvm::outs() << Opts.MainFileName << "\n"; + Opts.VerifyModule = !Args.hasArg(OPT_disable_llvm_verifier); Opts.ControlFlowGuard = Args.hasArg(OPT_cfguard); Index: test/CodeGen/echo-main-filename.c =================================================================== --- /dev/null +++ test/CodeGen/echo-main-filename.c @@ -0,0 +1,3 @@ +// RUN: %clang_cc1 -main-file-name foobar -echo-main-file-name %s -emit-llvm -o - | FileCheck %s + +// CHECK: foobar Index: test/Driver/cl-options.c =================================================================== --- test/Driver/cl-options.c +++ test/Driver/cl-options.c @@ -294,6 +294,9 @@ // RUN: %clang_cl /d1PP -### -- %s 2>&1 | FileCheck -check-prefix=d1PP %s // d1PP: -dD +// RUN: %clang_cl /showFilenames -### -- %s 2>&1 | FileCheck -check-prefix=showFilenames %s +// showFilenames: -echo-main-file-name + // We forward any unrecognized -W diagnostic options to cc1. // RUN: %clang_cl -Wunused-pragmas -### -- %s 2>&1 | FileCheck -check-prefix=WJoined %s // WJoined: "-cc1"