From: Daniel Dunbar Date: Thu, 17 Sep 2009 04:13:26 +0000 (+0000) Subject: Improve driver error message when only running the preprocessor and an input is X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=634b24563be901f8adc37c07ffba3eeac1f1d4cc;p=clang Improve driver error message when only running the preprocessor and an input is already preprocessed. -- ddunbar@giles:tmp$ touch t.i ddunbar@giles:tmp$ gcc -E t.i ddunbar@giles:tmp$ clang -E t.i clang: warning: t.i: previously preprocessed input unused when '-E' is present ddunbar@giles:tmp$ -- [driver] driver prints confusing message when running -E on preprocessed file git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82120 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td index fc31d4902a..dfdf0ff2e7 100644 --- a/include/clang/Basic/DiagnosticDriverKinds.td +++ b/include/clang/Basic/DiagnosticDriverKinds.td @@ -58,6 +58,8 @@ def err_drv_invalid_mfloat_abi : Error< def warn_drv_input_file_unused : Warning< "%0: '%1' input unused when '%2' is present">; +def warn_drv_preprocessed_input_file_unused : Warning< + "%0: previously preprocessed input unused when '%1' is present">; def warn_drv_unused_argument : Warning< "argument unused during compilation: '%0'">; def warn_drv_pipe_ignored_with_save_temps : Warning< diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 6fb7c98e5e..1d72b0dbd6 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -803,10 +803,19 @@ void Driver::BuildActions(const ArgList &Args, ActionList &Actions) const { if (InitialPhase > FinalPhase) { // Claim here to avoid the more general unused warning. InputArg->claim(); - Diag(clang::diag::warn_drv_input_file_unused) - << InputArg->getAsString(Args) - << getPhaseName(InitialPhase) - << FinalPhaseArg->getOption().getName(); + + // Special case '-E' warning on a previously preprocessed file to make + // more sense. + if (InitialPhase == phases::Compile && FinalPhase == phases::Preprocess && + getPreprocessedType(InputType) == types::TY_INVALID) + Diag(clang::diag::warn_drv_preprocessed_input_file_unused) + << InputArg->getAsString(Args) + << FinalPhaseArg->getOption().getName(); + else + Diag(clang::diag::warn_drv_input_file_unused) + << InputArg->getAsString(Args) + << getPhaseName(InitialPhase) + << FinalPhaseArg->getOption().getName(); continue; }