mirror of
https://github.com/intel/llvm.git
synced 2026-01-20 10:58:11 +08:00
[flang][Driver] Better error message when multiple actions are specified (#165575)
If multiple action options are specified on the command line, list them all in the error message that is emitted Fixes #79458
This commit is contained in:
@@ -312,6 +312,8 @@ def warn_drv_yc_multiple_inputs_clang_cl : Warning<
|
||||
def warn_drv_potentially_misspelled_joined_argument : Warning<
|
||||
"joined argument treated as '%0'; did you mean '%1'?">, InGroup<UnknownArgument>;
|
||||
|
||||
def err_drv_too_many_actions: Error<
|
||||
"only one action option is allowed. Got %0">;
|
||||
def err_drv_invalid_value : Error<"invalid value '%1' in '%0'">;
|
||||
def err_drv_invalid_int_value : Error<"invalid integral value '%1' in '%0'">;
|
||||
def err_drv_invalid_value_with_suggestion : Error<
|
||||
|
||||
@@ -595,9 +595,15 @@ static bool parseFrontendArgs(FrontendOptions &opts, llvm::opt::ArgList &args,
|
||||
// -cc1` does accept multiple action options, but will only consider the
|
||||
// rightmost one.
|
||||
if (args.hasMultipleArgs(clang::driver::options::OPT_Action_Group)) {
|
||||
const unsigned diagID = diags.getCustomDiagID(
|
||||
clang::DiagnosticsEngine::Error, "Only one action option is allowed");
|
||||
diags.Report(diagID);
|
||||
llvm::SmallString<32> buf;
|
||||
llvm::raw_svector_ostream os(buf);
|
||||
for (const llvm::opt::Arg *arg :
|
||||
args.filtered(clang::driver::options::OPT_Action_Group)) {
|
||||
if (buf.size())
|
||||
os << ", ";
|
||||
os << "'" << arg->getSpelling() << "'";
|
||||
}
|
||||
diags.Report(clang::diag::err_drv_too_many_actions) << buf;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,30 @@
|
||||
! Verify that the frontend driver error-out if multiple actions are specified
|
||||
|
||||
! RUN: not %flang_fc1 -E -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix=ERROR
|
||||
! RUN: not %flang_fc1 -fsyntax-only -fsyntax-only %s 2>&1 | FileCheck %s --check-prefix=ERROR
|
||||
|
||||
! ERROR: error: Only one action option is allowed
|
||||
|
||||
end progream
|
||||
! Verify that the frontend driver raises the expected error when multiple
|
||||
! actions are specified.
|
||||
!
|
||||
! RUN: not %flang_fc1 -fsyntax-only -fsyntax-only %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefixes=ERROR,ACTIONS-1
|
||||
!
|
||||
! RUN: not %flang_fc1 -E -fsyntax-only %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefixes=ERROR,ACTIONS-2
|
||||
!
|
||||
! RUN: not %flang_fc1 -fsyntax-only -E -emit-llvm %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefixes=ERROR,ACTIONS-3
|
||||
!
|
||||
! If one or more options are specified with -Xflang, they will appear last in
|
||||
! the error message.
|
||||
!
|
||||
! RUN: not %flang -S -Xflang -emit-llvm %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefixes=ERROR,ACTIONS-4
|
||||
!
|
||||
! RUN: not %flang -Xflang -emit-llvm -S %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefixes=ERROR,ACTIONS-4
|
||||
!
|
||||
! RUN: not %flang -Xflang -emit-obj -S -Xflang -emit-llvm %s 2>&1 \
|
||||
! RUN: | FileCheck %s --check-prefixes=ERROR,ACTIONS-5
|
||||
!
|
||||
! ERROR: error: only one action option is allowed.
|
||||
! ACTIONS-1: Got '-fsyntax-only', '-fsyntax-only'
|
||||
! ACTIONS-2: Got '-E', '-fsyntax-only'
|
||||
! ACTIONS-3: Got '-fsyntax-only', '-E', '-emit-llvm'
|
||||
! ACTIONS-4: Got '-S', '-emit-llvm'
|
||||
! ACTIONS-5: Got '-S', '-emit-obj', '-emit-llvm'
|
||||
|
||||
Reference in New Issue
Block a user