Bug 1868446

Summary: Update gcc for RHEL 8.4 from upstream GCC 8.4
Product: Red Hat Enterprise Linux 8 Reporter: Marek Polacek <mpolacek>
Component: gccAssignee: Marek Polacek <mpolacek>
gcc sub component: system-version QA Contact: Alexandra Petlanová Hájková <ahajkova>
Status: CLOSED ERRATA Docs Contact: Zuzana Zoubkova <zzoubkov>
Severity: unspecified    
Priority: unspecified CC: ahajkova, fweimer, jakub, mcermak, ohudlick, sipoyare, vmukhame
Version: 8.3Keywords: Bugfix, Triaged
Target Milestone: rc   
Target Release: 8.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: gcc-8.4.1-1.el8 Doc Type: Bug Fix
Doc Text:
.`gcc` rebased to version 8.4 The GNU Compiler Collection (GCC) has been rebased to upstream version 8.4, which provides a number of bug fixes over the previous version.
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-05-18 13:28:00 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1894575    

Description Marek Polacek 2020-08-12 17:55:52 UTC
RHEL 8 system gcc was last updated:
%global DATE 20191121
%global SVNREV 278589

we should consider updating gcc from upstream GCC 8.4, which contains a lot of bugfixes.

Comment 3 Marek Polacek 2020-09-30 14:50:22 UTC
Testsuite (compared with gcc-8.3.1-5.2.el8) looks good.  The only new FAILs I see are on s390x:

FAIL: gcc.dg/pr94780.c (internal compiler error)
FAIL: gcc.dg/pr94842.c (internal compiler error)

these tests were introduced in

commit b79f3e1e67ca0c5e14b677e3fc847a3c79881b5f
Author: Jakub Jelinek <jakub>
Date:   Thu Apr 30 21:48:30 2020 +0200

    c: Fix ICE with _Atomic side-effect in nested fn param decls [PR94842]

and

commit a8a6b29393dbc13d81fdc5d354526452bd79fb94
Author: Jakub Jelinek <jakub>
Date:   Mon Apr 27 21:14:52 2020 +0200

    x86: Fix up ix86_atomic_assign_expand_fenv [PR94780]

the ICE is

/builddir/build/BUILD/gcc-8.4.1-20200928/gcc/testsuite/gcc.dg/pr94780.c:8:1: internal compiler error: Segmentation fault^M
0x2aa00428e71 crash_signal^M
        ../../gcc/toplev.c:326^M
0x2aa00474ff4 get_frame_type^M
        ../../gcc/tree-nested.c:212^M
0x2aa004750bd get_chain_decl^M
        ../../gcc/tree-nested.c:317^M
0x2aa0047737f get_nonlocal_debug_decl^M
        ../../gcc/tree-nested.c:919^M
0x2aa004777df convert_nonlocal_reference_op^M
        ../../gcc/tree-nested.c:998^M
0x2aa00c78677 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**, int*, void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*> >*))^M
        ../../gcc/tree.c:11402^M
0x2aa0091737d walk_gimple_op(gimple*, tree_node* (*)(tree_node**, int*, void*), walk_stmt_info*)^M
        ../../gcc/gimple-walk.c:268^M
0x2aa00916681 walk_gimple_stmt(gimple_stmt_iterator*, tree_node* (*)(gimple_stmt_iterator*, bool*, walk_stmt_info*), tree_node* (*)(tree_node**, int*, void*), walk_stmt_info*)^M
        ../../gcc/gimple-walk.c:586^M
0x2aa00916463 walk_gimple_seq_mod(gimple**, tree_node* (*)(gimple_stmt_iterator*, bool*, walk_stmt_info*), tree_node* (*)(tree_node**, int*, void*), walk_stmt_info*)^M
        ../../gcc/gimple-walk.c:51^M
0x2aa0091665f walk_gimple_stmt(gimple_stmt_iterator*, tree_node* (*)(gimple_stmt_iterator*, bool*, walk_stmt_info*), tree_node* (*)(tree_node**, int*, void*), walk_stmt_info*)^M
        ../../gcc/gimple-walk.c:595^M
0x2aa00916463 walk_gimple_seq_mod(gimple**, tree_node* (*)(gimple_stmt_iterator*, bool*, walk_stmt_info*), tree_node* (*)(tree_node**, int*, void*), walk_stmt_info*)^M
        ../../gcc/gimple-walk.c:51^M
0x2aa00474959 walk_body^M
        ../../gcc/tree-nested.c:662^M
0x2aa00474c9b walk_function^M
        ../../gcc/tree-nested.c:673^M
0x2aa00474d23 walk_all_functions^M
        ../../gcc/tree-nested.c:738^M
0x2aa00479d01 lower_nested_functions(tree_node*)^M
        ../../gcc/tree-nested.c:3394^M
0x2aa007da47f cgraph_node::analyze()^M
        ../../gcc/cgraphunit.c:676^M
0x2aa007da47f analyze_functions^M
        ../../gcc/cgraphunit.c:1131^M
0x2aa007d7fa3 symbol_table::finalize_compilation_unit()^M
        ../../gcc/cgraphunit.c:2691^M

which reminds me of an ancient ICE I reported years ago: https://gcc.gnu.org/PR60085

I wouldn't consider this a blocker at all.

Comment 4 Marek Polacek 2020-09-30 15:09:53 UTC
Jakub has a patch for the two FAILs.  I might pull that in if there's a need for a rebuild.

Comment 5 Jakub Jelinek 2020-09-30 15:15:00 UTC
Yes:
2020-09-30  Jakub Jelinek  <jakub>

	* config/s390/s390.c (s390_atomic_assign_expand_fenv): Use
	TARGET_EXPR instead of MODIFY_EXPR for the first assignments to
	fenv_var and old_fpc.  Formatting fixes.

--- gcc/config/s390/s390.c.jj	2020-09-14 09:04:36.086851054 +0200
+++ gcc/config/s390/s390.c	2020-09-30 10:22:50.579603271 +0200
@@ -16082,12 +16082,13 @@ s390_atomic_assign_expand_fenv (tree *ho
 
      fenv_var = __builtin_s390_efpc ();
      __builtin_s390_sfpc (fenv_var & mask) */
-  tree old_fpc = build2 (MODIFY_EXPR, unsigned_type_node, fenv_var, call_efpc);
-  tree new_fpc =
-    build2 (BIT_AND_EXPR, unsigned_type_node, fenv_var,
-	    build_int_cst (unsigned_type_node,
-			   ~(FPC_DXC_MASK | FPC_FLAGS_MASK |
-			     FPC_EXCEPTION_MASK)));
+  tree old_fpc = build4 (TARGET_EXPR, unsigned_type_node, fenv_var, call_efpc,
+			 NULL_TREE, NULL_TREE);
+  tree new_fpc
+    = build2 (BIT_AND_EXPR, unsigned_type_node, fenv_var,
+	      build_int_cst (unsigned_type_node,
+			     ~(FPC_DXC_MASK | FPC_FLAGS_MASK
+			       | FPC_EXCEPTION_MASK)));
   tree set_new_fpc = build_call_expr (sfpc, 1, new_fpc);
   *hold = build2 (COMPOUND_EXPR, void_type_node, old_fpc, set_new_fpc);
 
@@ -16106,8 +16107,8 @@ s390_atomic_assign_expand_fenv (tree *ho
   __atomic_feraiseexcept ((old_fpc & FPC_FLAGS_MASK) >> FPC_FLAGS_SHIFT);  */
 
   old_fpc = create_tmp_var_raw (unsigned_type_node);
-  tree store_old_fpc = build2 (MODIFY_EXPR, void_type_node,
-			       old_fpc, call_efpc);
+  tree store_old_fpc = build4 (TARGET_EXPR, void_type_node, old_fpc, call_efpc,
+			       NULL_TREE, NULL_TREE);
 
   set_new_fpc = build_call_expr (sfpc, 1, fenv_var);
 

I don't see those FAILs in the scratch build.log I'm doing in f34, but it hasn't finished yet.

Comment 17 errata-xmlrpc 2021-05-18 13:28:00 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (gcc bug fix and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2021:1571