On Wed, Apr 11, 2018 at 12:30 PM, Cesar Philippidis <ce...@codesourcery.com> wrote: > On 04/09/2018 04:31 AM, Richard Biener wrote: >> On Fri, 6 Apr 2018, Jakub Jelinek wrote: >> >>> On Fri, Apr 06, 2018 at 06:48:52AM -0700, Cesar Philippidis wrote: >>>> 2018-04-06 Cesar Philippidis <ce...@codesourcery.com> >>>> >>>> PR middle-end/84955 >>>> >>>> gcc/ >>>> * cfgloop.c (flow_loops_find): Add assert. >>>> * omp-expand.c (expand_oacc_for): Add dummy false branch for >>>> tiled basic blocks without omp continue statements. >>>> * tree-cfg.c (execute_fixup_cfg): Handle calls to internal >>>> functions like regular functions. >>>> >>>> libgomp/ >>>> * testsuite/libgomp.oacc-c-c++-common/pr84955.c: New test. >>>> * testsuite/libgomp.oacc-fortran/pr84955.f90: New test. >>> >>> I'd like to defer the cfgloop.c and tree-cfg.c changes to Richard, just >>> want to >>> mention that: >>> >>>> --- a/gcc/tree-cfg.c >>>> +++ b/gcc/tree-cfg.c >>>> @@ -9586,10 +9586,7 @@ execute_fixup_cfg (void) >>>> for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);) >>>> { >>>> gimple *stmt = gsi_stmt (gsi); >>>> - tree decl = is_gimple_call (stmt) >>>> - ? gimple_call_fndecl (stmt) >>>> - : NULL; >>>> - if (decl) >>>> + if (is_gimple_call (stmt)) >>> >>> This change doesn't affect just internal functions, but also all indirect >>> calls through function pointers with const, pure or noreturn attributes. >> >> I think the change is desirable nevertheless. The question is if we >> want to do it at this point in time. >> >> The description of the problem sounds more like LTO writing writing out >> loops without previously fixing up state. So sth like the following >> which I'd prefer at this stage (the above hunk is ok for stage1 then). > > OK, I'll save that hunk for stage 1. > >> Index: gcc/lto-streamer-out.c >> =================================================================== >> --- gcc/lto-streamer-out.c (revision 259227) >> +++ gcc/lto-streamer-out.c (working copy) >> @@ -2084,6 +2151,9 @@ output_function (struct cgraph_node *nod >> /* Set current_function_decl and cfun. */ >> push_cfun (fn); >> >> + /* Fixup loops if required to match discovery done in the reader. */ >> + loop_optimizer_init (AVOID_CFG_MODIFICATIONS); >> + >> /* Make string 0 be a NULL string. */ >> streamer_write_char_stream (ob->string_stream, 0); >> >> @@ -2176,12 +2246,13 @@ output_function (struct cgraph_node *nod >> streamer_write_record_start (ob, LTO_null); >> >> output_cfg (ob, fn); >> - >> - pop_cfun (); >> } >> else >> streamer_write_uhwi (ob, 0); >> >> + loop_optimizer_finalize (); >> + pop_cfun (); >> + >> /* Create a section to hold the pickled output of this function. */ >> produce_asm (ob, function); > > That worked. Is this patch OK for trunk, GCC 6 and GCC 7?
This caused: https://gcc.gnu.org/ml/gcc-regression/2018-04/msg00099.html FAIL: g++.dg/ipa/pr46984.C -std=gnu++11 (internal compiler error) FAIL: g++.dg/ipa/pr46984.C -std=gnu++11 (test for excess errors) FAIL: g++.dg/ipa/pr46984.C -std=gnu++14 (internal compiler error) FAIL: g++.dg/ipa/pr46984.C -std=gnu++14 (test for excess errors) FAIL: g++.dg/ipa/pr46984.C -std=gnu++98 (internal compiler error) FAIL: g++.dg/ipa/pr46984.C -std=gnu++98 (test for excess errors) FAIL: g++.dg/lto/20081217-1 cp_lto_20081217-1_0.o assemble, -O0 -flto -flto-partition=1to1 -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081217-1 cp_lto_20081217-1_0.o assemble, -O0 -flto -flto-partition=none -fuse-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081217-1 cp_lto_20081217-1_0.o assemble, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/lto/20081217-1 cp_lto_20081217-1_0.o assemble, -O2 -flto -flto-partition=1to1 -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081217-1 cp_lto_20081217-1_0.o assemble, -O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/lto/20081217-1 cp_lto_20081217-1_0.o assemble, -O2 -flto -fuse-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081217-2 cp_lto_20081217-2_0.o assemble, -O0 -flto -flto-partition=1to1 -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081217-2 cp_lto_20081217-2_0.o assemble, -O0 -flto -flto-partition=none -fuse-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081217-2 cp_lto_20081217-2_0.o assemble, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/lto/20081217-2 cp_lto_20081217-2_0.o assemble, -O2 -flto -flto-partition=1to1 -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081217-2 cp_lto_20081217-2_0.o assemble, -O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/lto/20081217-2 cp_lto_20081217-2_0.o assemble, -O2 -flto -fuse-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20081219 cp_lto_20081219_0.o assemble, -fPIC -flto -flto-partition=1to1 -O2 (internal compiler error) FAIL: g++.dg/lto/20091210-1 cp_lto_20091210-1_0.o assemble, -O0 -flto -flto-partition=1to1 -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20091210-1 cp_lto_20091210-1_0.o assemble, -O0 -flto -flto-partition=none -fuse-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20091210-1 cp_lto_20091210-1_0.o assemble, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/lto/20091210-1 cp_lto_20091210-1_0.o assemble, -O2 -flto -flto-partition=1to1 -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/20091210-1 cp_lto_20091210-1_0.o assemble, -O2 -flto -flto-partition=none -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/lto/20091210-1 cp_lto_20091210-1_0.o assemble, -O2 -flto -fuse-linker-plugin (internal compiler error) FAIL: g++.dg/lto/pr60567 cp_lto_pr60567_0.o assemble, -flto -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/pr64076 cp_lto_pr64076_0.o assemble, -O0 -flto -flto-partition=1to1 -fno-use-linker-plugin (internal compiler error) FAIL: g++.dg/lto/pr64076 cp_lto_pr64076_0.o assemble, -O0 -flto -flto-partition=none -fuse-linker-plugin (internal compiler error) FAIL: g++.dg/lto/pr64076 cp_lto_pr64076_0.o assemble, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/lto/pr69133 cp_lto_pr69133_1.o assemble, -flto -O2 (internal compiler error) FAIL: g++.dg/lto/pr69729 cp_lto_pr69729_0.o assemble, -fcheck-pointer-bounds -mmpx -flto -flto-partition=max (internal compiler error) FAIL: g++.dg/lto/pr82027 cp_lto_pr82027_0.o assemble, -O3 -flto (internal compiler error) FAIL: g++.dg/torture/covariant-1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/covariant-1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/covariant-1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/covariant-1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr41257.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr41257.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr41257.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr41257.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr43068.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr43068.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr43068.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr43068.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr45699.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr45699.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr45699.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr45699.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr46287.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr46287.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr46287.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr46287.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr48661.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr48661.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr48661.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr48661.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr48954.C -O0 (internal compiler error) FAIL: g++.dg/torture/pr48954.C -O0 (test for excess errors) FAIL: g++.dg/torture/pr48954.C -O1 (internal compiler error) FAIL: g++.dg/torture/pr48954.C -O1 (test for excess errors) FAIL: g++.dg/torture/pr48954.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr48954.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr48954.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr48954.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr48954.C -O2 (internal compiler error) FAIL: g++.dg/torture/pr48954.C -O2 (test for excess errors) FAIL: g++.dg/torture/pr48954.C -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler error) FAIL: g++.dg/torture/pr48954.C -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (test for excess errors) FAIL: g++.dg/torture/pr48954.C -O3 -g (internal compiler error) FAIL: g++.dg/torture/pr48954.C -O3 -g (test for excess errors) FAIL: g++.dg/torture/pr48954.C -Os (internal compiler error) FAIL: g++.dg/torture/pr48954.C -Os (test for excess errors) FAIL: g++.dg/torture/pr58201_0.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr58201_0.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr58201_0.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr58201_0.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr58201_1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr58201_1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr58201_1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr58201_1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr58252.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr58252.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr58252.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr58252.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr58585.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr58585.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr58585.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr58585.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr59226.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr59226.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr59226.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr59226.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr60871.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr60871.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr60871.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr60871.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr64988.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr64988.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr64988.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr64988.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr68184.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr68184.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr68184.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr68184.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr71571.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr71571.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr71571.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr71571.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr78692.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr78692.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr78692.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr78692.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr81812.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr81812.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr81812.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr81812.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/torture/pr83619.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/torture/pr83619.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/torture/pr83619.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/torture/pr83619.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/pr64632.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/pr64632.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/pr64632.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/pr64632.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/pr65000.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/pr65000.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/pr65000.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/pr65000.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/pr70147-1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/pr70147-1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/pr70147-1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/pr70147-1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/vptr-10.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/vptr-10.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/vptr-10.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/vptr-10.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/vptr-11.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/vptr-11.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/vptr-11.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/vptr-11.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/vptr-1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/vptr-1.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/vptr-1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/vptr-1.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/vptr-2.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/vptr-2.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/vptr-2.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/vptr-2.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) FAIL: g++.dg/ubsan/vptr-3.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (internal compiler error) FAIL: g++.dg/ubsan/vptr-3.C -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors) FAIL: g++.dg/ubsan/vptr-3.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (internal compiler error) FAIL: g++.dg/ubsan/vptr-3.C -O2 -flto -fuse-linker-plugin -fno-fat-lto-objects (test for excess errors) on Linux/x86 -- H.J.