[cfe-commits] [PATCH] Add three new sanitizers depending on ASan.

Kostya Serebryany kcc at google.com
Wed Nov 28 03:22:24 PST 2012


On Wed, Nov 28, 2012 at 10:28 AM, Alexey Samsonov <samsonov at google.com>wrote:

>
>   Ok. Kostya, what is your opinion?
>

On which part? I like the flags.
As for "-mllvm -asan-foo" vs createAddressSanitizerPass flags I have mixed
feelings.
If we use createAddressSanitizerPass flags, what should be the behavior
when "-mllvm -asan-foo" is given separately?
What are other phases doing in similar situations (or we are doing
something unique)?


--kcc


>
> ================
> Comment at: lib/Driver/Tools.cpp:1518-1523
> @@ -1517,1 +1517,8 @@
> +
> +  // If -fsanitize contains extra features of ASan, it should also
> +  // explicitly contain -fsanitize=address.
> +  if (NeedsAsan && ((Kind & Address) == 0))
> +    D.Diag(diag::err_drv_argument_only_allowed_with)
> +      << describeSanitizeArg(Args, AsanArg, NeedsAsanRt)
> +      << "-fsanitize=address";
>  }
> ----------------
> Richard Smith wrote:
> > For argument lists like "-fsanitize=use-after-return -fsanitize=address
> -fno-sanitize=address", we'll say "-fsanitize=address is only allowed with
> -fsanitize=address". The existing diagnostic has a similar issue for
> "-fsanitize=address -fsanitize=alignment -fsanitize=vptr
> -fno-sanitize=vptr", where it says "-fsanitize=vptr not allowed with
> -fsanitize=address". I think we'd need to teach describeSanitizerArg to
> re-parse the argument list to handle this properly.
> RIght, the logic is untrivial here. Mailed D143 to fix this.
>
> ================
> Comment at: lib/Driver/SanitizerArgs.h:59-71
> @@ -58,1 +58,15 @@
> +
> +    // Add args for LLVM backend.
> +    if (Kind & InitOrder) {
> +      CmdArgs.push_back("-mllvm");
> +      CmdArgs.push_back("-asan-initialization-order");
> +    }
> +    if (Kind & UseAfterReturn) {
> +      CmdArgs.push_back("-mllvm");
> +      CmdArgs.push_back("-asan-use-after-return");
> +    }
> +    if (Kind & UseAfterScope) {
> +      CmdArgs.push_back("-mllvm");
> +      CmdArgs.push_back("-asan-use-lifetime");
> +    }
>    }
> ----------------
> Richard Smith wrote:
> > I would prefer this to be handled by the frontend instead of by the
> driver (the frontend is responsible for adding all the other IR
> instrumentation, including adding the ASan passes).
> >
> > Have you considered passing these flags to ASan when creating the passes
> in addAddressSanitizerPass, rather than as command-line options?
> Hm, passing arguments to createAddressSanitizerPass() certainly seems a
> better (though, more intrusive) solution than playing with -mllvm flags.
> I'll work on that.
>
>
> http://llvm-reviews.chandlerc.com/D142
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121128/61ef0f07/attachment.html>


More information about the cfe-commits mailing list