On 08/02/16 14:54, Jakub Jelinek wrote:
On Mon, Feb 08, 2016 at 02:38:17PM +0100, Tom de Vries wrote:
hmm, indeed removing the 'Driver' flag from the fdiagnostics-color= entry in
common.opt breaks the functioning of fdiagnostics-color= in the gcc driver.
This patch leaves the 'Driver' flag alone, and instead explicitly allows
fdiagnostics-color= in lto_write_options.
Is this approach ok?
Doesn't that mean storing -fdiagnostics-color= into the LTO option section and
then using whatever was recorded from the first TU that recorded anything?
Yes.
That doesn't look right for such diagnostics options either.
I mean, if I
$ gcc -fdiagnostics-color=always -c -flto a.c
on another terminal
$ gcc -fdiagnostics-color=never -c -flto b.c
on yet another terminal
$ gcc -flto -o a a.o b.o
then I'd expect the default setting for -fdiagnostics-color= for all
diagnostics while linking/LTO optimizing it, and for say
$ gcc -fdiagnostics-color=always -flto -o a a.o b.o
to have it always colorized, similarly for never.
IMHO we should just honor what has been specified on the linker command
line if anything.
Agreed.
So, the question is, is -fdiagnostics-color=never passed
in the testsuite just to the compilation and not to linking (that would be
IMHO a testsuite bug),
In libgomp.exp we have:
...
# Disable color diagnostics
lappend ALWAYS_CFLAGS "additional_flags=-fdiagnostics-color=never"
...
The test setup looks ok to me.
or is it passed on the linking command line, but not
passed through to lto1?
Yes.
I've now realized this is specific to mkoffload.
If we're doing lto, in lto-wrapper.c:run_gcc, we have:
...
append_compiler_options (&argv_obstack, fdecoded_options,
fdecoded_options_count);
append_linker_options (&argv_obstack, decoded_options,
decoded_options_count);
...
And the last line will propagate the fdiagnostics-color setting.
But for calling mkoffload, we just have this:
...
/* Append options from offload_lto sections. */
append_compiler_options (&argv_obstack, compiler_opts,
compiler_opt_count);
...
Followed by this, which just filters the -foffload options:
...
/* Append options specified by -foffload last. In case of
conflicting options we expect offload compiler to choose
the latest. */
append_offload_options (&argv_obstack, target, compiler_opts,
compiler_opt_count);
append_offload_options (&argv_obstack, target, linker_opts,
linker_opt_count);
...
Attached patch adds the diagnostics flags to mkoffload.
Bootstrapped and reg-tested on x86_64.
OK for trunk, stage1?
Thanks,
- Tom
Handle -fdiagnostics-color in lto
2016-02-08 Tom de Vries <t...@codesourcery.com>
PR lto/69707
* lto-wrapper.c (append_diag_options): New function.
(compile_offload_image): Call append_diag_options.
* testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c: New test.
---
gcc/lto-wrapper.c | 31 ++++++++++++++++++++++
.../libgomp.oacc-c-c++-common/parallel-dims-2.c | 19 +++++++++++++
2 files changed, 50 insertions(+)
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index ced6f2f..8cda1fa 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -542,6 +542,36 @@ append_compiler_options (obstack *argv_obstack, struct cl_decoded_option *opts,
}
}
+/* Append diag options in OPTS with length COUNT to ARGV_OBSTACK. */
+
+static void
+append_diag_options (obstack *argv_obstack, struct cl_decoded_option *opts,
+ unsigned int count)
+{
+ /* Append compiler driver arguments as far as they were merged. */
+ for (unsigned int j = 1; j < count; ++j)
+ {
+ struct cl_decoded_option *option = &opts[j];
+
+ switch (option->opt_index)
+ {
+ case OPT_fdiagnostics_color_:
+ case OPT_fdiagnostics_show_caret:
+ case OPT_fdiagnostics_show_option:
+ case OPT_fdiagnostics_show_location_:
+ case OPT_fshow_column:
+ break;
+ default:
+ continue;
+ }
+
+ /* Pass the option on. */
+ for (unsigned int i = 0; i < option->canonical_option_num_elements; ++i)
+ obstack_ptr_grow (argv_obstack, option->canonical_option[i]);
+ }
+}
+
+
/* Append linker options OPTS to ARGV_OBSTACK. */
static void
@@ -724,6 +754,7 @@ compile_offload_image (const char *target, const char *compiler_path,
/* Append options from offload_lto sections. */
append_compiler_options (&argv_obstack, compiler_opts,
compiler_opt_count);
+ append_diag_options (&argv_obstack, linker_opts, linker_opt_count);
/* Append options specified by -foffload last. In case of conflicting
options we expect offload compiler to choose the latest. */
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c
new file mode 100644
index 0000000..eea8c7e
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/parallel-dims-2.c
@@ -0,0 +1,19 @@
+/* { dg-do run { target { openacc_nvidia_accel_selected && lto } } } */
+/* { dg-additional-options "-flto -fno-use-linker-plugin" } */
+
+/* Worker and vector size checks. Picked an outrageously large
+ value. */
+
+int main ()
+{
+#pragma acc parallel num_workers (2<<20) /* { dg-error "using num_workers" } */
+ {
+ }
+
+#pragma acc parallel vector_length (2<<20) /* { dg-error "using vector_length" } */
+ {
+ }
+
+ return 0;
+}
+