forked from OSchip/llvm-project
PR13529: Don't crash if the driver sees an unused input file when running as
'clang-cpp'. For now, the test uses "REQUIRES: shell" to determine if the host system supports "ln -s", which it uses to create a 'clang-cpp' symlink. This is a bit hacky and should likely be directly supported by lit.cfg. llvm-svn: 161317
This commit is contained in:
parent
18f07db183
commit
403f76ee02
|
@ -105,9 +105,14 @@ def err_drv_unknown_objc_runtime : Error<
|
|||
def warn_c_kext : Warning<
|
||||
"ignoring -fapple-kext which is valid for C++ and Objective-C++ only">;
|
||||
def warn_drv_input_file_unused : Warning<
|
||||
"%0: '%1' input unused when '%2' is present">;
|
||||
"%0: '%1' input unused%select{ when '%3' is present|}2">,
|
||||
InGroup<DiagGroup<"unused-command-line-argument">>;
|
||||
def warn_drv_input_file_unused_by_cpp : Warning<
|
||||
"%0: '%1' input unused in cpp mode">,
|
||||
InGroup<DiagGroup<"unused-command-line-argument">>;
|
||||
def warn_drv_preprocessed_input_file_unused : Warning<
|
||||
"%0: previously preprocessed input unused when '%1' is present">;
|
||||
"%0: previously preprocessed input%select{ unused when '%2' is present|}1">,
|
||||
InGroup<DiagGroup<"unused-command-line-argument">>;
|
||||
def warn_drv_unused_argument : Warning<
|
||||
"argument unused during compilation: '%0'">,
|
||||
InGroup<DiagGroup<"unused-command-line-argument">>;
|
||||
|
|
|
@ -1131,18 +1131,27 @@ void Driver::BuildActions(const ToolChain &TC, const DerivedArgList &Args,
|
|||
if (Args.hasArg(options::OPT_Qunused_arguments))
|
||||
continue;
|
||||
|
||||
// Special case when final phase determined by binary name, rather than
|
||||
// by a command-line argument with a corresponding Arg.
|
||||
if (CCCIsCPP)
|
||||
Diag(clang::diag::warn_drv_input_file_unused_by_cpp)
|
||||
<< InputArg->getAsString(Args)
|
||||
<< getPhaseName(InitialPhase);
|
||||
// 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)
|
||||
else 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();
|
||||
<< !!FinalPhaseArg
|
||||
<< FinalPhaseArg ? FinalPhaseArg->getOption().getName() : "";
|
||||
else
|
||||
Diag(clang::diag::warn_drv_input_file_unused)
|
||||
<< InputArg->getAsString(Args)
|
||||
<< getPhaseName(InitialPhase)
|
||||
<< FinalPhaseArg->getOption().getName();
|
||||
<< !!FinalPhaseArg
|
||||
<< FinalPhaseArg ? FinalPhaseArg->getOption().getName() : "";
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
// REQUIRES: shell
|
||||
// RUN: ln -sf %clang %T/clang-cpp
|
||||
|
||||
// PR13529: Don't crash.
|
||||
// RUN: %T/clang-cpp -lfoo -M %s 2>&1 | FileCheck --check-prefix=CHECK-PR13529 %s
|
||||
// CHECK-PR13529: warning: -lfoo: 'linker' input unused in cpp mode
|
|
@ -18,7 +18,7 @@ This test serves two purposes:
|
|||
|
||||
The list of warnings below should NEVER grow. It should gradually shrink to 0.
|
||||
|
||||
CHECK: Warnings without flags (130):
|
||||
CHECK: Warnings without flags (128):
|
||||
CHECK-NEXT: pp_include_next_absolute_path
|
||||
CHECK-NEXT: pp_include_next_in_primary
|
||||
CHECK-NEXT: pp_invalid_string_literal
|
||||
|
@ -51,13 +51,11 @@ CHECK-NEXT: warn_delete_array_type
|
|||
CHECK-NEXT: warn_double_const_requires_fp64
|
||||
CHECK-NEXT: warn_drv_assuming_mfloat_abi_is
|
||||
CHECK-NEXT: warn_drv_clang_unsupported
|
||||
CHECK-NEXT: warn_drv_input_file_unused
|
||||
CHECK-NEXT: warn_drv_not_using_clang_arch
|
||||
CHECK-NEXT: warn_drv_not_using_clang_cpp
|
||||
CHECK-NEXT: warn_drv_not_using_clang_cxx
|
||||
CHECK-NEXT: warn_drv_objc_gc_unsupported
|
||||
CHECK-NEXT: warn_drv_pch_not_first_include
|
||||
CHECK-NEXT: warn_drv_preprocessed_input_file_unused
|
||||
CHECK-NEXT: warn_dup_category_def
|
||||
CHECK-NEXT: warn_duplicate_protocol_def
|
||||
CHECK-NEXT: warn_enum_too_large
|
||||
|
|
Loading…
Reference in New Issue