diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-11-18 00:20:36 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-11-18 00:20:36 +0000 |
| commit | ef6c8da50fac204fe9dca3061cd17ac383504974 (patch) | |
| tree | e37e2d4d17f6b53f036923e632e49b95ae811456 /clang/lib | |
| parent | 64aaddcd64e04d7f1e0324e454915640925ef405 (diff) | |
| download | bcm5719-llvm-ef6c8da50fac204fe9dca3061cd17ac383504974.tar.gz bcm5719-llvm-ef6c8da50fac204fe9dca3061cd17ac383504974.zip | |
-Rename -Wargument-larger-than -> -Wlarge-by-value-copy
-Improve the diagnostic message
-Add some comments
Suggestions by Chris.
llvm-svn: 119594
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 10 |
3 files changed, 12 insertions, 8 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index d9e3760a8d8..60d2fe37925 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1199,13 +1199,13 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(A->getValue(Args)); } - if (Arg *A = Args.getLastArg(options::OPT_Wargument_larger_than_EQ, - options::OPT_Wargument_larger_than_def)) { - CmdArgs.push_back("-Wargument-larger-than"); + if (Arg *A = Args.getLastArg(options::OPT_Wlarge_by_value_copy_EQ, + options::OPT_Wlarge_by_value_copy_def)) { + CmdArgs.push_back("-Wlarge-by-value-copy"); if (A->getNumValues()) CmdArgs.push_back(A->getValue(Args)); else - CmdArgs.push_back("64"); // default value for -Wargument-larger-than + CmdArgs.push_back("64"); // default value for -Wlarge-by-value-copy. } if (Args.hasArg(options::OPT__relocatable_pch)) diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index 466dfbd9af4..b1d6adb94ba 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1373,7 +1373,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK, Opts.MathErrno = Args.hasArg(OPT_fmath_errno); Opts.InstantiationDepth = Args.getLastArgIntValue(OPT_ftemplate_depth, 1024, Diags); - Opts.ArgumentLargerThan = Args.getLastArgIntValue(OPT_Wargument_larger_than, + Opts.NumLargeByValueCopy = Args.getLastArgIntValue(OPT_Wlarge_by_value_copy, 0, Diags); Opts.NeXTRuntime = !Args.hasArg(OPT_fgnu_runtime); Opts.ObjCConstantStringClass = diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index dc017d2ba55..d36bd178e89 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -4869,14 +4869,16 @@ void Sema::DiagnoseSizeOfParametersAndReturnValue(ParmVarDecl * const *Param, ParmVarDecl * const *ParamEnd, QualType ReturnTy, NamedDecl *D) { - if (LangOpts.ArgumentLargerThan == 0) // No check. + if (LangOpts.NumLargeByValueCopy == 0) // No check. return; + // Warn if the return value is pass-by-value and larger than the specified + // threshold. if (ReturnTy->isPODType() && Diags.getDiagnosticLevel(diag::warn_return_value_size) != Diagnostic::Ignored) { unsigned Size = Context.getTypeSizeInChars(ReturnTy).getQuantity(); - if (Size > LangOpts.ArgumentLargerThan) + if (Size > LangOpts.NumLargeByValueCopy) Diag(D->getLocation(), diag::warn_return_value_size) << D->getDeclName() << Size; } @@ -4884,12 +4886,14 @@ void Sema::DiagnoseSizeOfParametersAndReturnValue(ParmVarDecl * const *Param, if (Diags.getDiagnosticLevel(diag::warn_parameter_size)==Diagnostic::Ignored) return; + // Warn if any parameter is pass-by-value and larger than the specified + // threshold. for (; Param != ParamEnd; ++Param) { QualType T = (*Param)->getType(); if (!T->isPODType()) continue; unsigned Size = Context.getTypeSizeInChars(T).getQuantity(); - if (Size > LangOpts.ArgumentLargerThan) + if (Size > LangOpts.NumLargeByValueCopy) Diag((*Param)->getLocation(), diag::warn_parameter_size) << (*Param)->getDeclName() << Size; } |

