On Mon, Jun 28, 2021 at 05:51:30PM +0200, Tobias Burnus wrote: > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi
I think it would be better to commit the reorderings in invoke.texi separately from the -foffload* changes, because otherwise people will keep wondering what actually really changed. It can go in before or after (and please take into account Sandra's review comments). > --- a/gcc/gcc.c > +++ b/gcc/gcc.c > @@ -3977,6 +3977,68 @@ driver_wrong_lang_callback (const struct > cl_decoded_option *decoded, > static const char *spec_lang = 0; > static int last_language_n_infiles; > > + > +/* Check that GCC is configured to support the offload target. */ > + > +static void > +check_offload_target_name (const char *target, ptrdiff_t len) > +{ > + const char *n, *c = OFFLOAD_TARGETS; > + char *target2 = NULL; > + while (c) > + { > + n = strchr (c, ','); > + if (n == NULL) > + n = strchr (c, '\0'); > + if (len == n - c && strncmp (target, c, n - c) == 0) > + break; > + c = *n ? n + 1 : NULL; > + } > + if (!c) > + { > + if (target[len] != '\0') > + { > + target2 = XNEWVEC (char, len + 1); > + memcpy (target2, target, len); > + target2[len] = '\0'; > + } > + fatal_error (input_location, > + "GCC is not configured to support %qs as offload target", > + target2 ? target2 : target); Can't this be done without target2 with fatal_error (input_location, "GCC is not configured to support %q.*s as offload target", len, target); instead, regardless if target[len] is 0 or not? The message should be consistent between this function and handle_foffload_option (on the q in particular). Also, wonder if we shouldn't print the list of configured targets in that case, see candidates_list_and_hint functions and its callers. And it is unclear why we use fatal_error, can't unknown offload target names be simply ignored after emitting error? > + XDELETEVEC (target2); > + } > +} > + > +/* Sanity check for -foffload-options. */ > + > +static void > +check_foffload_target_names (const char *arg) > +{ > + const char *cur, *next, *end; > + /* If option argument starts with '-' then no target is specified and we > + do not need to parse it. */ > + if (arg[0] == '-') > + return; > + end = strchr (arg, '='); > + if (end == NULL) > + { > + error ("%<=options%> missing after %<-foffload-options=target%>"); Neither options nor target are keywords, so IMHO those shouldn't appear in between %< and %> but after the %>, so "%<=%>options missing after %%<-foffload-options=%>target" ? Otherwise LGTM. Jakub