Using an invalid -O falls back on -O3 instead of an error
Summary: Currently with clang: $ clang -O20 foo.c error: invalid value '20' in '-O20' With the patch: $ clang -O20 foo.c warning: optimization level '-O20' is unsupported; using '-O3' instead. 1 warning generated. This matches the gcc behavior (with a warning added) Pass all tests: Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90.. Testing Time: 94.14s Expected Passes : 6721 Expected Failures : 20 Unsupported Tests : 17 (which was not the case of http://llvm-reviews.chandlerc.com/D2125) Reviewers: chandlerc, rafael, rengolin, hfinkel Reviewed By: rengolin CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2152 llvm-svn: 194817
This commit is contained in:
@@ -299,14 +299,14 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
|
||||
using namespace options;
|
||||
bool Success = true;
|
||||
|
||||
unsigned OptLevel = getOptimizationLevel(Args, IK, Diags);
|
||||
if (OptLevel > 3) {
|
||||
Diags.Report(diag::err_drv_invalid_value)
|
||||
<< Args.getLastArg(OPT_O)->getAsString(Args) << OptLevel;
|
||||
OptLevel = 3;
|
||||
Success = false;
|
||||
Opts.OptimizationLevel = getOptimizationLevel(Args, IK, Diags);
|
||||
unsigned MaxOptLevel = 3;
|
||||
if (Opts.OptimizationLevel > MaxOptLevel) {
|
||||
// If the optimization level is not supported, fall back on the default optimization
|
||||
Diags.Report(diag::warn_drv_optimization_value)
|
||||
<< Args.getLastArg(OPT_O)->getAsString(Args) << "-O" << MaxOptLevel;
|
||||
Opts.OptimizationLevel = MaxOptLevel;
|
||||
}
|
||||
Opts.OptimizationLevel = OptLevel;
|
||||
|
||||
// We must always run at least the always inlining pass.
|
||||
Opts.setInlining(
|
||||
|
||||
Reference in New Issue
Block a user