diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp --- a/flang/lib/Frontend/CompilerInvocation.cpp +++ b/flang/lib/Frontend/CompilerInvocation.cpp @@ -501,6 +501,13 @@ llvm::opt::InputArgList args = opts.ParseArgs( commandLineArgs, missingArgIndex, missingArgCount, includedFlagsBitmask); + // Check for missing argument error. + if (missingArgCount) { + diags.Report(clang::diag::err_drv_missing_argument) + << args.getArgString(missingArgIndex) << missingArgCount; + success = false; + } + // Issue errors on unknown arguments for (const auto *a : args.filtered(clang::driver::options::OPT_UNKNOWN)) { auto argString = a->getAsString(args); diff --git a/flang/test/Driver/missing-arg.f90 b/flang/test/Driver/missing-arg.f90 new file mode 100644 --- /dev/null +++ b/flang/test/Driver/missing-arg.f90 @@ -0,0 +1,21 @@ +! Make sure that frontend driver options that require arguments are +! correctly rejected when the argument value is missing. + +! REQUIRES: new-flang-driver + +!----------- +! RUN lines +!----------- +! RUN: not %flang_fc1 -E %s -o 2>&1 | FileCheck %s +! RUN: not %flang_fc1 -E %s -U 2>&1 | FileCheck %s +! RUN: not %flang_fc1 -E %s -D 2>&1 | FileCheck %s +! RUN: not %flang_fc1 -E %s -I 2>&1 | FileCheck %s +! RUN: not %flang_fc1 -E %s -J 2>&1 | FileCheck %s +! RUN: not %flang_fc1 -E %s -module-dir 2>&1 | FileCheck %s +! RUN: not %flang_fc1 -E %s -module-suffix 2>&1 | FileCheck %s +! RUN: not %flang_fc1 -E %s -fintrinsic-modules-path 2>&1 | FileCheck %s + +!----------------------- +! EXPECTED OUTPUT +!----------------------- +! CHECK: error: argument to '-{{.*}}' is missing (expected 1 value)