diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-12-16 21:57:03 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-12-16 21:57:03 +0000 |
commit | fd8de1c3ae3c3ac1c162a03572519d0ab0c2cf71 (patch) | |
tree | 0c6042488d21960c221ebe4d1d5fe5d3da41ee00 /clang/lib | |
parent | 39f9dbc877c1717c1dc6fc98fb5b173515b7cdb0 (diff) | |
download | bcm5719-llvm-fd8de1c3ae3c3ac1c162a03572519d0ab0c2cf71.tar.gz bcm5719-llvm-fd8de1c3ae3c3ac1c162a03572519d0ab0c2cf71.zip |
Fix handling of invalid -O options.
We were checking the value after truncating it to a bitfield.
Thanks to Yunzhong Gao for noticing it.
llvm-svn: 224378
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 97be3d3fbf2..776848ba7f0 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -330,15 +330,17 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK, using namespace options; bool Success = true; - Opts.OptimizationLevel = getOptimizationLevel(Args, IK, Diags); + unsigned OptimizationLevel = getOptimizationLevel(Args, IK, Diags); // TODO: This could be done in Driver unsigned MaxOptLevel = 3; - if (Opts.OptimizationLevel > MaxOptLevel) { - // If the optimization level is not supported, fall back on the default optimization + if (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; + OptimizationLevel = MaxOptLevel; } + Opts.OptimizationLevel = OptimizationLevel; // We must always run at least the always inlining pass. Opts.setInlining( |