[cfe-commits] r167429 - in /cfe/trunk: include/clang/Basic/DiagnosticDriverKinds.td lib/Driver/Tools.cpp test/Driver/fsanitize.c

NAKAMURA Takumi geek4civic at gmail.com
Tue Nov 6 14:05:11 PST 2012


2012/11/5 Richard Smith <richard-llvm at metafoo.co.uk>

> Author: rsmith
> Date: Mon Nov  5 19:12:02 2012
> New Revision: 167429
>
> URL: http://llvm.org/viewvc/llvm-project?rev=167429&view=rev
> Log:
> Per discussion on cfe-commits, treat -faddress-sanitizer,
> -fno-address-sanitizer, -fthread-sanitizer, -fno-thread-sanitizer, and
> -fcatch-undefined-behavior as deprecated: produce a warning if they are
> used
> pointing to the corresponding -fsanitize= option. In passing add the
> missing
> '-' to some diagnostics.
>
> Modified:
>     cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
>     cfe/trunk/lib/Driver/Tools.cpp
>     cfe/trunk/test/Driver/fsanitize.c
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=167429&r1=167428&r2=167429&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Mon Nov  5
> 19:12:02 2012
> @@ -121,6 +121,8 @@
>    InGroup<DiagGroup<"unused-command-line-argument">>;
>  def warn_drv_clang_unsupported : Warning<
>    "the clang compiler does not support '%0'">;
> +def warn_drv_deprecated_arg : Warning<
> +  "argument '%0' is deprecated, use '%1' instead">, InGroup<Deprecated>;
>  def warn_drv_assuming_mfloat_abi_is : Warning<
>    "unknown platform, assuming -mfloat-abi=%0">;
>  def warn_ignoring_ftabstop_value : Warning<
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=167429&r1=167428&r2=167429&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Nov  5 19:12:02 2012
> @@ -1522,9 +1522,10 @@
>  /// Produce an argument string from argument \p A, which shows how it
> provides a
>  /// value in \p Mask. For instance, the argument
> "-fsanitize=address,alignment"
>  /// with mask \c NeedsUbsanRt would produce "-fsanitize=alignment".
> -static std::string describeSanitizeArg(const Arg *A, unsigned Mask) {
> +static std::string describeSanitizeArg(const ArgList &Args, const Arg *A,
> +                                       unsigned Mask) {
>    if (!A->getOption().matches(options::OPT_fsanitize_EQ))
> -    return A->getOption().getName();
> +    return A->getAsString(Args);
>
>    for (unsigned I = 0, N = A->getNumValues(); I != N; ++I)
>      if (SanitizerArgs::parse(A->getValue(I)) & Mask)
> @@ -1541,22 +1542,29 @@
>
>    for (ArgList::const_iterator I = Args.begin(), E = Args.end(); I != E;
> ++I) {
>      unsigned Add = 0, Remove = 0;
> -    if ((*I)->getOption().matches(options::OPT_faddress_sanitizer))
> +    const char *DeprecatedReplacement = 0;
> +    if ((*I)->getOption().matches(options::OPT_faddress_sanitizer)) {
>        Add = SanitizerArgs::Address;
> -    else if
> ((*I)->getOption().matches(options::OPT_fno_address_sanitizer))
> +      DeprecatedReplacement = "-fsanitize=address";
> +    } else if
> ((*I)->getOption().matches(options::OPT_fno_address_sanitizer)) {
>        Remove = SanitizerArgs::Address;
> -    else if ((*I)->getOption().matches(options::OPT_fthread_sanitizer))
> +      DeprecatedReplacement = "-fno-sanitize=address";
> +    } else if ((*I)->getOption().matches(options::OPT_fthread_sanitizer))
> {
>        Add = SanitizerArgs::Thread;
> -    else if ((*I)->getOption().matches(options::OPT_fno_thread_sanitizer))
> +      DeprecatedReplacement = "-fsanitize=thread";
> +    } else if
> ((*I)->getOption().matches(options::OPT_fno_thread_sanitizer)) {
>        Remove = SanitizerArgs::Thread;
> -    else if
> ((*I)->getOption().matches(options::OPT_fcatch_undefined_behavior))
> +      DeprecatedReplacement = "-fno-sanitize=thread";
> +    } else if
> ((*I)->getOption().matches(options::OPT_fcatch_undefined_behavior)) {
>        Add = SanitizerArgs::Undefined;
> -    else if ((*I)->getOption().matches(options::OPT_fsanitize_EQ))
> +      DeprecatedReplacement = "-fsanitize=undefined";
> +    } else if ((*I)->getOption().matches(options::OPT_fsanitize_EQ)) {
>        Add = SanitizerArgs::parse(D, *I);
> -    else if ((*I)->getOption().matches(options::OPT_fno_sanitize_EQ))
> +    } else if ((*I)->getOption().matches(options::OPT_fno_sanitize_EQ)) {
>        Remove = SanitizerArgs::parse(D, *I);
> -    else
> +    } else {
>        continue;
> +    }
>
>      (*I)->claim();
>
> @@ -1566,6 +1574,12 @@
>      if (Add & SanitizerArgs::NeedsAsanRt) AsanArg = *I;
>      if (Add & SanitizerArgs::NeedsTsanRt) TsanArg = *I;
>      if (Add & SanitizerArgs::NeedsUbsanRt) UbsanArg = *I;
> +
> +    // If this is a deprecated synonym, produce a warning directing users
> +    // towards the new spelling.
> +    if (DeprecatedReplacement)
> +      D.Diag(diag::warn_drv_deprecated_arg)
> +        << (*I)->getAsString(Args) << DeprecatedReplacement;
>    }
>
>    // Only one runtime library can be used at once.
> @@ -1575,10 +1589,10 @@
>    bool NeedsUbsan = Sanitize.needsUbsanRt();
>    if (NeedsAsan + NeedsTsan + NeedsUbsan > 1)
>      D.Diag(diag::err_drv_argument_not_allowed_with)
> -      << describeSanitizeArg(NeedsAsan ? AsanArg : TsanArg,
> +      << describeSanitizeArg(Args, NeedsAsan ? AsanArg : TsanArg,
>                               NeedsAsan ? SanitizerArgs::NeedsAsanRt
>                                         : SanitizerArgs::NeedsTsanRt)
> -      << describeSanitizeArg(NeedsUbsan ? UbsanArg : TsanArg,
> +      << describeSanitizeArg(Args, NeedsUbsan ? UbsanArg : TsanArg,
>                               NeedsUbsan ? SanitizerArgs::NeedsUbsanRt
>                                          : SanitizerArgs::NeedsTsanRt);
>
> @@ -2671,7 +2685,7 @@
>        llvm::StringRef NoRttiArg =
>          Args.getLastArg(options::OPT_mkernel,
>                          options::OPT_fapple_kext,
> -                        options::OPT_fno_rtti)->getOption().getName();
> +                        options::OPT_fno_rtti)->getAsString(Args);
>

Richard, Arg::getAsString() is incompatible to StringRef. Fixed in 167494.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121106/334c4ca4/attachment.html>


More information about the cfe-commits mailing list