On 01/25/2016 09:30 PM, Jakub Jelinek wrote:
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
I've been staring at it for a while, and on the whole I think I can make
sense of this. However - it does not have test coverage. Can this be
added? Also, is this a regression?
(parse_sanitizer_options): New function.
(common_handle_option): Use parse_sanitizer_options.
I think this can go in, it just moves code around, right? That'll make
followup patches smaller.
--- gcc/lto-opts.c.jj 2016-01-23 00:13:00.897015402 +0100
+++ gcc/lto-opts.c 2016-01-25 14:06:31.834127398 +0100
@@ -199,9 +199,11 @@ lto_write_options (void)
/* Also drop all options that are handled by the driver as well,
which includes things like -o and -v or -fhelp for example.
We do not need those. The only exception is -foffload option, if we
- write it in offload_lto section. Also drop all diagnostic options. */
+ write it in offload_lto section. Also drop all diagnostic options,
+ and -fsanitize=. */
if ((cl_options[option->opt_index].flags & (CL_DRIVER|CL_WARNING))
- && (!lto_stream_offload_p || option->opt_index != OPT_foffload_))
+ && (!lto_stream_offload_p || option->opt_index != OPT_foffload_)
+ && option->opt_index != OPT_fsanitize_)
continue;
This one puzzles me, doesn't it mean that no sanitizer options make it
into the LTO stream, which would mean the new code in lto-wrapper
doesn't trigger?
+/* Set *OPT to decoded -f{,no-}sanitize=shift. */
I think I'd like some sort of comment about how this is an arbitrary
choice, just designed to enable DEF_SANITIZER_BUILTIN (IIUC). Also, why
use shift and not just sanitize=undefined?
@@ -392,6 +415,24 @@ merge_and_complain (struct cl_decoded_op
break;
}
}
+
+ /* If FDECODED_OPTIONS requested any ubsan sanitization, pass through
I think we want to add "and DECODED_OPTIONS doesn't", right?
Bernd