[Bug target/104453] [9/10/11/12 Regression] ICE: SIGSEGV in handled_component_p with truncated input

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104453

Richard Biener  changed:

   What|Removed |Added

  Component|middle-end  |target
   Assignee|unassigned at gcc dot gnu.org  |rguenth at gcc dot 
gnu.org
   Last reconfirmed||2022-02-09
   Priority|P3  |P2
 Status|UNCONFIRMED |ASSIGNED
 Ever confirmed|0   |1
   Target Milestone|--- |9.5

--- Comment #1 from Richard Biener  ---
(gdb) p stmt
$1 = 
(gdb) p debug_gimple_stmt (stmt)
 = g.0_1;

ICK.  Mine, I have a patch.

[Bug target/104451] [9/10/11/12 Regression] ICE: in emit_move_insn, at expr.cc:4010 with -O -mxop -mavx512f

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104451

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P2

[Bug tree-optimization/104450] [11/12 Regression] ICE: verify_flow_info failed: BB 2 cannot throw but has an EH edge with -O -fnon-call-exceptions -fsanitize=thread -mavx512f

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104450

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P2
   Assignee|unassigned at gcc dot gnu.org  |rguenth at gcc dot 
gnu.org
 Status|NEW |ASSIGNED

--- Comment #3 from Richard Biener  ---
Hmm, OK - that needs some thoughts.  I think the easiest woudl be to avoid
"forwarding" the comparison if it has EH.

[Bug tree-optimization/104376] Failure to optimize clz equivalent to clz

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104376

Andrew Pinski  changed:

   What|Removed |Added

   See Also||https://gcc.gnu.org/bugzill
   ||a/show_bug.cgi?id=101822,
   ||https://gcc.gnu.org/bugzill
   ||a/show_bug.cgi?id=7,
   ||https://gcc.gnu.org/bugzill
   ||a/show_bug.cgi?id=71016

--- Comment #5 from Andrew Pinski  ---
(In reply to Andrew Pinski from comment #4)
> cond_removal_in_builtin_zero_pattern should have optimized the above but
> does not for some reason.
> Let me take a look.

So one problem is we have:
   [local count: 1073741824]:
  if (x_3(D) == 0)
goto ; [21.72%]
  else
goto ; [78.28%]

   [local count: 840525097]:
  _1 = __builtin_clz (x_3(D));
  _4 = (uint32_t) _1;

   [local count: 1073741824]:
  # _2 = PHI <32(2), _4(3)>


Which we don't handle in cond_removal_in_builtin_zero_pattern, this similar to
PR 7 and PR 101822, that is the code which added to fix PR 71016 is getting
in the way.

[Bug middle-end/104449] [9/10/11/12 Regression] ICE: verify_gimple failed: dead statement in EH table with -fexceptions -fsanitize=address -fstack-check=generic

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104449

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P2

[Bug target/104448] [10/11/12 Regression] ICE: in initialize, at function-abi.cc:108 with -mavx5124vnniw / -mavx5124fmaps -mno-xsave -mabi=ms

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104448

Richard Biener  changed:

   What|Removed |Added

 Ever confirmed|0   |1
   Last reconfirmed||2022-02-09
   Priority|P3  |P2
 Status|UNCONFIRMED |NEW
   Target Milestone|--- |10.4

--- Comment #1 from Richard Biener  ---
108 gcc_assert (overlaps_hard_reg_set_p (all_clobbers, mode,
regno)
109 && overlaps_hard_reg_set_p (m_mode_clobbers[i],
110 mode, regno));

(gdb) p debug_hard_reg_set(all_clobbers) 
{ 0 1 2 8 9 10 11 12 13 14 15 17 18 20 21 22 23 24 25 28 29 30 31 32 33 34 35
36 37 38 39 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
74 75 }

$1 = void
(gdb) p regno
$2 = 44

Confirmed.  Quite possibly the -mabi=ms support is incomplete here.

[Bug ipa/102059] Incorrect always_inline diagnostic in LTO mode with #pragma GCC target("cpu=power10")

2022-02-08 Thread linkw at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102059

--- Comment #35 from Kewen Lin  ---
> I don't think the r12-6219 commit qualifies for backporting.  What about the
> comment#31 patch?  Does it address the issue for Eigen on the branches?

Got it. comment#31 patch can only address the mismatch issue on power8-fusion,
it doesn't help htm. (FWIW, the previous posted patch
https://gcc.gnu.org/pipermail/gcc-patches/2022-January/587635.html doesn't
either.)

For htm issue, I think we can go with the workarounds for branches like:
  1) target attribute "cpu=power10,htm" for callers to pretend power10 having
htm to avoid mismatch.
  2) adding -mno-htm for the whole Eigen build if it doesn't use any HTM
features.
  3) if unfortunately it does use HTM, make it fine grain to only those inlined
callees with target attribute "no-htm".

[Bug rtl-optimization/104447] [9/10/11/12 Regression] ICE: maximum number of LRA assignment passes is achieved (30)

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104447

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P2

[Bug middle-end/104446] [9/10/11/12 Regression] ICE in trunc_int_for_mode, at explow.cc:59

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104446

Richard Biener  changed:

   What|Removed |Added

   Priority|P3  |P2

[Bug tree-optimization/104445] [12 Regression] ICE in vect_create_partial_epilog, at tree-vect-loop.cc:5098

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104445

Richard Biener  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Priority|P3  |P1
   Assignee|unassigned at gcc dot gnu.org  |rguenth at gcc dot 
gnu.org

--- Comment #3 from Richard Biener  ---
Meh.  Mine.

[Bug tree-optimization/104444] Missing constant folding in shift expression.

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10

--- Comment #2 from Richard Biener  ---
Note we generally avoid "folding" undefined to anything specific, but what
could
trigger here is path isolation seeing

  if (n >= 0 && n < 32)
   ;
  else
 if (m >> n != 0)
   ...

making the else path unreachable (or trap for the sake of QOI).

[Bug target/104441] [12 Regression] vzeroupper is placed at the wrong place

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104441

Richard Biener  changed:

   What|Removed |Added

   Priority|P2  |P1
   Keywords||wrong-code
 Target|x86-64  |x86_64-*-* i?86-*-*

[Bug ipa/102059] Incorrect always_inline diagnostic in LTO mode with #pragma GCC target("cpu=power10")

2022-02-08 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102059

--- Comment #34 from Richard Biener  ---
(In reply to Kewen Lin from comment #33)
> Since this issue affects Eigen building on Power and we have GCC11 and GCC10
> to support Power10 MMA, one of our colleagues is wondering if we can
> backport all the fixes there for this PR. In my limited understanding, the
> commit r12-6219 in comment 26 is more like a small feature, it might not be
> recommended to be backported and we have to use some workaround for HTM.
> 
> @Richi and @Jakub, what's your opinions?

I don't think the r12-6219 commit qualifies for backporting.  What about the
comment#31 patch?  Does it address the issue for Eigen on the branches?

[Bug c++/104379] [9/10/11 Regression] -Wshadow warning given three times

2022-02-08 Thread rguenther at suse dot de via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104379

--- Comment #10 from rguenther at suse dot de  ---
On Tue, 8 Feb 2022, jakub at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104379
> 
> Jakub Jelinek  changed:
> 
>What|Removed |Added
> 
> Summary|[9/10/11/12 Regression] |[9/10/11 Regression]
>|-Wshadow warning given  |-Wshadow warning given
>|three times |three times
> 
> --- Comment #9 from Jakub Jelinek  ---
> Fixed on the trunk so far.
> 
> Note, GCC 11 and older doesn't have the warning-control.c* infrastructure, so
> all we could do there is TREE_NO_WARNING.

Or warn from a place that doesn't visit this IL N times?

[Bug target/104456] New: nvptx: prevent_branch_around_nothing doesn't handle asm ("")

2022-02-08 Thread vries at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104456

Bug ID: 104456
   Summary: nvptx: prevent_branch_around_nothing doesn't handle
asm ("")
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
  Assignee: unassigned at gcc dot gnu.org
  Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

Testing on a GT 1030, with driver 510.x, GOMP_NVPTX_JIT=-00 and -mptx=3.1, I
run into:
...
FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/acc_prof-version-1.c
-DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -foffload=nvptx-none  -O2 
execution test
...

The test-case runs into the warp divergence check, because we have:
...
@ %r23 bra $L2;
$L2:
...

The prevent_branch_around_nothing is supposed to handle this, but it doesn't
trigger for 'asm ("")'.

[Bug rtl-optimization/104447] [9/10/11/12 Regression] ICE: maximum number of LRA assignment passes is achieved (30)

2022-02-08 Thread crazylht at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104447

--- Comment #2 from Hongtao.liu  ---
w/o -pg, there's an error output as expected:

../gcc.target/i386/pr55512-4.c:7:3: error: ‘asm’ operand has impossible
constraints

7 |   asm goto ("" : : "r" (x), "r" (x + 1), "r" (x + 2), "r" (x + 3), /* {
dg-error "operand has impossible constraints" } */


It looks like an diagnostic issue?

[Bug tree-optimization/104376] Failure to optimize clz equivalent to clz

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104376

Andrew Pinski  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |pinskia at gcc dot 
gnu.org

--- Comment #4 from Andrew Pinski  ---
(In reply to Andrew Pinski from comment #2)
> The second issue can be seen with:
> #include 
> 
> uint32_t countLeadingZeros32(uint32_t x)
> {
> if (x == 0)
> return 32;
> return (__builtin_clz(x)) ;
> }

cond_removal_in_builtin_zero_pattern should have optimized the above but does
not for some reason.
Let me take a look.

[Bug tree-optimization/104445] [12 Regression] ICE in vect_create_partial_epilog, at tree-vect-loop.cc:5098

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104445

Andrew Pinski  changed:

   What|Removed |Added

 CC||rguenth at gcc dot gnu.org

--- Comment #2 from Andrew Pinski  ---
Most likely caused by r12-2292-g1dd3f21095858fbfd3 .

[Bug tree-optimization/104445] [12 Regression] ICE in vect_create_partial_epilog, at tree-vect-loop.cc:5098

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104445

Andrew Pinski  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever confirmed|0   |1
   Last reconfirmed||2022-02-09
   Keywords||needs-bisection

--- Comment #1 from Andrew Pinski  ---
Confirmed.

[Bug target/104451] [9/10/11/12 Regression] ICE: in emit_move_insn, at expr.cc:4010 with -O -mxop -mavx512f

2022-02-08 Thread crazylht at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104451

--- Comment #3 from Hongtao.liu  ---
ix86_expand_vector_init expects vals to be a parallel containing values of
individual fields which should be either element mode of the vector mode, or a
vector mode with the same element mode and smaller number of elements.
But in the expander ashlv16qi3, the second operand is SImode which can't be
directly passed to gen_vec_initv16qiqi.

I'm testing

1 file changed, 2 insertions(+), 1 deletion(-)
gcc/config/i386/sse.md | 3 ++-

modified   gcc/config/i386/sse.md
@@ -24153,8 +24153,9 @@ (define_expand "3"
negate = true;
}
   par = gen_rtx_PARALLEL (V16QImode, rtvec_alloc (16));
+  tmp = lowpart_subreg (QImode, operands[2], SImode);
   for (i = 0; i < 16; i++)
-XVECEXP (par, 0, i) = operands[2];
+XVECEXP (par, 0, i) = tmp;

   tmp = gen_reg_rtx (V16QImode);
   emit_insn (gen_vec_initv16qiqi (tmp, par));

[Bug target/104451] [9/10/11/12 Regression] ICE: in emit_move_insn, at expr.cc:4010 with -O -mxop -mavx512f

2022-02-08 Thread crazylht at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104451

--- Comment #2 from Hongtao.liu  ---
-mavx512f is not necessary, PR can be produced by -mxop -O -mavx2

[Bug rtl-optimization/104438] Combine optimization opportunity exposed after pro_and_epilogue

2022-02-08 Thread crazylht at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104438

--- Comment #5 from Hongtao.liu  ---
(In reply to Hongtao.liu from comment #4)
> > It is unclear why the CFG wasn't straightened out here.  Is the bb commented
> > as "asm" actually asm?  Then GCC will not see it is very cheap/small, yeah.
> 
> "asm" is not inline assembly. it's BB 6 below
> 
> (note 89 88 126 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
> (call_insn 126 89 121 6 (parallel [
> (call (mem:QI (const_int 0 [0]) [0  S1 A8])
> (const_int 0 [0]))
> (unspec [
> (const_int 1 [0x1])
> ] UNSPEC_CALLEE_ABI)
> ]) -1
>  (expr_list:REG_EH_REGION (const_int -2147483648 [0x8000])
> (nil))
> (nil))

According to PR104441, vzeroupper shouldn't be inserted here, after fix of
PR104441, CFG wasn't straightened.

[Bug ipa/102059] Incorrect always_inline diagnostic in LTO mode with #pragma GCC target("cpu=power10")

2022-02-08 Thread linkw at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102059

Kewen Lin  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org,
   ||rguenth at gcc dot gnu.org

--- Comment #33 from Kewen Lin  ---
Since this issue affects Eigen building on Power and we have GCC11 and GCC10 to
support Power10 MMA, one of our colleagues is wondering if we can backport all
the fixes there for this PR. In my limited understanding, the commit r12-6219
in comment 26 is more like a small feature, it might not be recommended to be
backported and we have to use some workaround for HTM.

@Richi and @Jakub, what's your opinions?

[Bug rtl-optimization/104438] Combine optimization opportunity exposed after pro_and_epilogue

2022-02-08 Thread crazylht at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104438

--- Comment #4 from Hongtao.liu  ---
> It is unclear why the CFG wasn't straightened out here.  Is the bb commented
> as "asm" actually asm?  Then GCC will not see it is very cheap/small, yeah.

"asm" is not inline assembly. it's BB 6 below

(note 89 88 126 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
(call_insn 126 89 121 6 (parallel [
(call (mem:QI (const_int 0 [0]) [0  S1 A8])
(const_int 0 [0]))
(unspec [
(const_int 1 [0x1])
] UNSPEC_CALLEE_ABI)
]) -1
 (expr_list:REG_EH_REGION (const_int -2147483648 [0x8000])
(nil))
(nil))
(jump_insn 121 126 122 6 (set (pc)
(label_ref 91)) 892 {jump}
 (nil)
 -> 91)
(barrier 122 121 112)
(code_label 112 122 111 7 4 (nil) [1 uses])
(note 111 112 11 7 [bb 7] NOTE_INSN_BASIC_BLOCK)
(insn 11 111 12 7 (set (reg:V8SI 20 xmm0 [orig:131 _168 ] [131])
(const_vector:V8SI [
(const_int 0 [0]) repeated x8
])) "test.c":28:19 1696 {movv8si_internal}
 (nil))
(insn 12 11 91 7 (set (reg/v:V4DI 23 xmm3 [orig:87 ymm ] [87])
(const_vector:V4DI [
(const_int 0 [0]) repeated x4
])) "test.c":24:19 1699 {movv4di_internal}
 (nil))
(code_label 91 12 92 8 2 (nil) [1 uses])
(note 92 91 94 8 [bb 8] NOTE_INSN_BASIC_BLOCK)
(insn 94 92 99 8 (set (reg:V2DI 23 xmm3 [176])
(vec_select:V2DI (reg/v:V4DI 23 xmm3 [orig:87 ymm ] [87])
(parallel [
(const_int 2 [0x2])
(const_int 3 [0x3])
]))) "{vec_extract_hi_v4di}
 (nil))
(insn 99 94 127 8 (set (reg:V4SI 20 xmm0 [180])
(plus:V4SI (reg:V4SI 20 xmm0 [178])
(reg:V4SI 23 xmm3 [176]))) " {*addv4si3}
 (nil))
(insn 127 99 107 8 (set (reg:SI 0 ax [181])
(reg:SI 20 xmm0 [180])) " {*movsi_internal}
 (nil))
(insn 107 127 123 8 (use (reg/i:SI 0 ax)) "test.c":40:1 -1
 (nil))
(note 123 107 0 NOTE_INSN_DELETED)

[Bug analyzer/104452] [12 Regression] ICE: in hashtab_chk_error, at hash-table.cc:137 with -O -fanalyzer

2022-02-08 Thread dmalcolm at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104452

David Malcolm  changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|ASSIGNED|RESOLVED

--- Comment #3 from David Malcolm  ---
Should be fixed by the above commit.

[Bug analyzer/101081] analyzer testsuite failures seen with new glibc due to malloc attribute

2022-02-08 Thread dmalcolm at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101081

--- Comment #3 from David Malcolm  ---
Thanks.  The above patch fixes part (a) of comment #0, but I'm not yet sure
what to do about part (b), so keeping this bug report open for now.

[Bug analyzer/101081] analyzer testsuite failures seen with new glibc due to malloc attribute

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101081

--- Comment #2 from CVS Commits  ---
The master branch has been updated by David Malcolm :

https://gcc.gnu.org/g:e52a683170877d140eebc9782731eaf11897db71

commit r12-7119-ge52a683170877d140eebc9782731eaf11897db71
Author: Joel Teichroeb 
Date:   Fri Feb 4 11:35:08 2022 -0500

analyzer: Fix tests for glibc 2.35 [PR101081]

In recent versions of glibc fopen has __attribute__((malloc)).
Since we can not detect wether this attribute is present or not,
we avoid including stdio.h and instead forward declare what we
need in each test.

Signed-off-by: Joel Teichroeb 

gcc/testsuite/ChangeLog:
PR analyzer/101081
* gcc.dg/analyzer/analyzer-verbosity-2a.c: Replace #include of
stdio.h with declarations needed by the test.
* gcc.dg/analyzer/analyzer-verbosity-3a.c: Likewise.
* gcc.dg/analyzer/edges-1.c: Likewise.
* gcc.dg/analyzer/file-1.c: Likewise.
* gcc.dg/analyzer/file-2.c: Likewise.
* gcc.dg/analyzer/file-paths-1.c: Likewise.
* gcc.dg/analyzer/file-pr58237.c: Likewise.
* gcc.dg/analyzer/pr99716-1.c: Likewise.

Signed-off-by: David Malcolm 

[Bug ipa/102059] Incorrect always_inline diagnostic in LTO mode with #pragma GCC target("cpu=power10")

2022-02-08 Thread linkw at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102059

--- Comment #32 from Kewen Lin  ---
(In reply to Michael Meissner from comment #31)
> Created attachment 52383 [details]
> Simpler patch to fix the problem with power8-fusion.
> 
> This patch just ignores the -mpower8-fusion option in the callee if the
> caller does not have it set, and the option wasn't set explicitly.

Thanks for the patch Mike! IMHO, it can also remove the option
-mno-power8-fusion in gcc/testsuite/gcc.dg/lto/pr102059-1_0.c, the case is
designed for the usage reflected by this PR.

[Bug analyzer/104452] [12 Regression] ICE: in hashtab_chk_error, at hash-table.cc:137 with -O -fanalyzer

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104452

--- Comment #2 from CVS Commits  ---
The master branch has been updated by David Malcolm :

https://gcc.gnu.org/g:391512ade5f6cda95456133296c8dcc42d5fbefd

commit r12-7118-g391512ade5f6cda95456133296c8dcc42d5fbefd
Author: David Malcolm 
Date:   Tue Feb 8 16:37:08 2022 -0500

analyzer: fix hashing of bit_range_region::key_t [PR104452]

gcc/analyzer/ChangeLog:
PR analyzer/104452
* region-model.cc (selftest::test_bit_range_regions): New.
(selftest::analyzer_region_model_cc_tests): Call it.
* region.h (bit_range_region::key_t::hash): Fix hashing of m_bits
to avoid using uninitialized data.

gcc/testsuite/ChangeLog:
PR analyzer/104452
* gcc.dg/analyzer/pr104452.c: New test.

Signed-off-by: David Malcolm 

[Bug c++/103752] [12 Regression][ICE][modules] with import

2022-02-08 Thread jason at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103752

Jason Merrill  changed:

   What|Removed |Added

   Assignee|unassigned at gcc dot gnu.org  |jason at gcc dot gnu.org
   Last reconfirmed||2022-02-09
 CC||jason at gcc dot gnu.org
 Status|UNCONFIRMED |ASSIGNED
 Ever confirmed|0   |1

[Bug c++/96876] missing check for destructibility of base classes in aggregate initialization

2022-02-08 Thread jason at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96876

Jason Merrill  changed:

   What|Removed |Added

   Target Milestone|--- |12.0
 Resolution|--- |FIXED
 Status|ASSIGNED|RESOLVED

--- Comment #3 from Jason Merrill  ---
Fixed for GCC 12.

[Bug c++/96876] missing check for destructibility of base classes in aggregate initialization

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96876

--- Comment #2 from CVS Commits  ---
The master branch has been updated by Jason Merrill :

https://gcc.gnu.org/g:53cac72cf0821217f99d0640ba72cc2999ec7dc0

commit r12-7117-g53cac72cf0821217f99d0640ba72cc2999ec7dc0
Author: Jason Merrill 
Date:   Fri Feb 4 18:25:51 2022 -0500

c++: cleanup constant-init'd members [PR96876]

This is a case missed by my recent fixes to aggregate initialization and
exception cleanup for PR94041 et al: we also need to clean up members with
constant initialization if initialization of a later member throws.

It also occurs to me that we needn't bother building the cleanups if
-fno-exceptions; build_vec_init already doesn't.

PR c++/96876

gcc/cp/ChangeLog:

* typeck2.cc (split_nonconstant_init_1): Push cleanups for
preceding members with constant initialization.
(maybe_push_temp_cleanup): Do nothing if -fno-exceptions.

gcc/testsuite/ChangeLog:

* g++.dg/cpp1z/aggr-base11.C: New test.
* g++.dg/eh/aggregate2.C: New test.

[Bug rtl-optimization/104447] [9/10/11/12 Regression] ICE: maximum number of LRA assignment passes is achieved (30)

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104447

Andrew Pinski  changed:

   What|Removed |Added

   Last reconfirmed||2022-02-09
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
  Known to work||7.5.0
   Target Milestone|--- |9.5
  Known to fail||8.1.0

--- Comment #1 from Andrew Pinski  ---
Confirmed.
note The ICE changed in GCC 11 from:
:3:3: error: 'asm' operand has impossible constraints
3 |   asm goto ("" : : "r" (x), "r" (x + 1), "r" (x + 2), "r" (x + 3), /* {
dg-error "operand has impossible constraints" } */
  |   ^~~
:3:3: error: 'asm' operand has impossible constraints
:10:1: error: in basic block 2:
   10 | }
  | ^
:10:1: error: in basic block 2:
 }
 ^
:10:1: error: flow control insn inside a basic block
(jump_insn 23 77 75 2 (parallel [
(asm_operands/v ("") ("") 0 []
 []
 [
(label_ref:DI 24)
] :3)
(clobber (reg:CCFP 18 fpsr))
(clobber (reg:CC 17 flags))
]) "":3 -1
 (nil)
 -> 24)

To:
:10:1: internal compiler error: maximum number of LRA assignment passes
is achieved (30)

So it would be useful to get the bisects at the point of change and also when
it originally broke.

[Bug tree-optimization/104450] [11/12 Regression] ICE: verify_flow_info failed: BB 2 cannot throw but has an EH edge with -O -fnon-call-exceptions -fsanitize=thread -mavx512f

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104450

Andrew Pinski  changed:

   What|Removed |Added

   Target Milestone|12.0|11.3
Summary|[12 Regression] ICE:|[11/12 Regression] ICE:
   |verify_flow_info failed: BB |verify_flow_info failed: BB
   |2 cannot throw but has an   |2 cannot throw but has an
   |EH edge with -O |EH edge with -O
   |-fnon-call-exceptions   |-fnon-call-exceptions
   |-fsanitize=thread -mavx512f |-fsanitize=thread -mavx512f
  Known to fail||11.1.0, 11.2.0
   Keywords||needs-bisection
  Known to work||10.1.0, 9.1.0

--- Comment #2 from Andrew Pinski  ---
Note GCC 10 and before did:
  _5 = VEC_COND_EXPR = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }>;

Which is marked as maybe throwing.

[Bug libstdc++/104442] atomic::wait incorrectly loops in case of spurious notification when __waiter is shared

2022-02-08 Thread rodgertq at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104442

Thomas Rodgers  changed:

   What|Removed |Added

 Ever confirmed|0   |1
   Last reconfirmed||2022-02-09
 CC||rodgertq at gcc dot gnu.org
 Status|UNCONFIRMED |ASSIGNED

--- Comment #1 from Thomas Rodgers  ---
I took a look at whether or not it made sense to do a different refactoring
with this version of the implementation and I don't believe that it does (the
implementation detail here is likely to change substantially when we commit to
an ABI stable version) and indeed, the predicate version does exactly what this
patch proposes.

[Bug c++/104455] New: Cannot select -march=armv7-a using GCC 11

2022-02-08 Thread noloader at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104455

Bug ID: 104455
   Summary: Cannot select -march=armv7-a using GCC 11
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: noloader at gmail dot com
  Target Milestone: ---

Hi Everyone,

We are trying to fix a compile problem Debian encountered on Sid [1,2]. The
machine is armhf, but I don't have access to it. Sid is using GCC 11, but I am
not sure which version. The problem does not exist in GCC 10 and below.

I think this is the test case. Below, test.S is mostly armv4 but has some armv7
instructions. I used movw and movt as an example since they are armv7.

$ cat test.S
.globl return_magic
.type  return_magic,%function

return_magic:

movw r0, #0x1234
movt r0, #0x5678
bl   0

$ g++ -g2 -O3 -Wa,--noexecstack -march=armv7-a test.S -c

When Debian compiles with GCC 11, it results in:

  cc1: error: ‘-mfloat-abi=hard’: selected architecture lacks an FPU

test.S does not use floating point or neon instructions. This source file does
not need a fpu. We don't care what the platform default is because we don't use
it. But in this case, the machine is armhf so GCC should know it should use
hard floats.

When I attempt to add -mfpu=auto per [3], it results in another error:

  cc1: sorry, unimplemented: -mfpu=auto not currently supported without an
explicit CPU.
  cc1: error: -mfloat-abi=hard: selected processor lacks an FPU

test.S does not use floating point or neon instructions. This source file does
not need a fpu. I also tried -mfpu=none, but it results in:

  g++: error: unrecognized argument in option ‘-mfpu=none’
  g++: note: valid arguments to ‘-mfpu=’ are: auto crypto-neon-fp-armv8
  fp-armv8 fpv4-sp-d16 fpv5-d16 fpv5-sp-d16 neon neon-fp-armv8 neon-fp16
  neon-vfpv3 neon-vfpv4 vfp vfp3 vfpv2 vfpv3 vfpv3-d16 vfpv3-d16-fp16
  vfpv3-fp16 vfpv3xd vfpv3xd-fp16 vfpv4 vfpv4-d16; did you mean ‘neon’?

In the past we avoided specifying a -mfpu option because the code [used to]
work with GCC 4 and above, Clang 3 and above, armel, armhf and Android with
soft floats. The compiler always knew what float abi it should use.

I would like to drop -march=armv7-a, but GCC requires me to use an ISA option
before I use instructions from the ISA. I've never liked the rule, but it is
what it is. (Microsoft's C/C++ compiler got this right).

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1001995
[2] https://github.com/weidai11/cryptopp/issues/1094
[3] https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html

[Bug tree-optimization/104420] [12 Regression] Inconsistent checks for X * 0.0 optimization

2022-02-08 Thread roger at nextmovesoftware dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104420

Roger Sayle  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |roger at 
nextmovesoftware dot com
 CC||roger at nextmovesoftware dot 
com

--- Comment #2 from Roger Sayle  ---
Patch proposed
https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590049.html

[Bug analyzer/104452] [12 Regression] ICE: in hashtab_chk_error, at hash-table.cc:137 with -O -fanalyzer

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104452

Andrew Pinski  changed:

   What|Removed |Added

   Target Milestone|--- |12.0

[Bug analyzer/104452] [12 Regression] ICE: in hashtab_chk_error, at hash-table.cc:137 with -O -fanalyzer

2022-02-08 Thread dmalcolm at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104452

David Malcolm  changed:

   What|Removed |Added

 Ever confirmed|0   |1
   Last reconfirmed||2022-02-08
 Status|UNCONFIRMED |ASSIGNED

--- Comment #1 from David Malcolm  ---
Thanks for filing this; I'm testing a fix.

[Bug middle-end/98900] misleading -Wuninitialized using a variable outside its lifetime with -O2

2022-02-08 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98900

--- Comment #3 from Martin Sebor  ---
GCC 12 issues -Wdangling-poinnter for this bug now at all optimization levels. 
It still issues -Wuninitialized at -O1 and above, but with the dangling pointer
warning I don't think it's a big deal.  It should of course still be possible
to suppress it.

$ cat pr98900.c && gcc -S -Wall pr98900.c
int g = 10;

int main()
{
int* p = 0;
{
int x = 15;
p = &x;
}

g = *p;

return 0;
}
pr98900.c: In function ‘main’:
pr98900.c:11:9: warning: using dangling pointer ‘p’ to ‘x’
[-Wdangling-pointer=]
   11 | g = *p;
  | ^~
pr98900.c:7:13: note: ‘x’ declared here
7 | int x = 15;
  | ^

[Bug target/104451] [9/10/11/12 Regression] ICE: in emit_move_insn, at expr.cc:4010 with -O -mxop -mavx512f

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104451

Andrew Pinski  changed:

   What|Removed |Added

   Keywords||needs-bisection
 Ever confirmed|0   |1
   Last reconfirmed||2022-02-08
Summary|ICE: in emit_move_insn, at  |[9/10/11/12 Regression]
   |expr.cc:4010 with -O -mxop  |ICE: in emit_move_insn, at
   |-mavx512f   |expr.cc:4010 with -O -mxop
   ||-mavx512f
 Status|UNCONFIRMED |NEW
   Target Milestone|--- |9.5
  Known to work||4.9.0, 4.9.4

--- Comment #1 from Andrew Pinski  ---
Confirmed.

[Bug middle-end/104077] bogus/missing -Wdangling-pointer

2022-02-08 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104077
Bug 104077 depends on bug 81524, which changed state.

Bug 81524 Summary: Bogus or missing warnings when dereferencing pointer to 
deallocated stack memory
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81524

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

[Bug c/81524] Bogus or missing warnings when dereferencing pointer to deallocated stack memory

2022-02-08 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81524

Martin Sebor  changed:

   What|Removed |Added

 CC||msebor at gcc dot gnu.org
 Status|NEW |RESOLVED
   Target Milestone|--- |12.0
 Resolution|--- |FIXED
 Blocks||104077

--- Comment #6 from Martin Sebor  ---
As far as I can see this works as requested without sanitization in GCC 12:

$ (set -x; for p in PARAM RETURN BLOCK; do for m in READ WRITE; do gcc
-DTEST_${p}_$m -S -Wall pr81524.c; done; done)
+ for p in PARAM RETURN BLOCK
+ for m in READ WRITE
+ gcc -DTEST_PARAM_READ -S -Wall pr81524.c
pr81524.c: In function ‘test_param_local’:
pr81524.c:33:7: warning: storing the address of local variable ‘local’ in ‘*pp’
[-Wdangling-pointer=]
   33 |   *pp = &local;
  |   ^~~~
pr81524.c:32:7: note: ‘local’ declared here
   32 |   int local = 1;
  |   ^
pr81524.c:32:7: note: ‘pp’ declared here
+ for m in READ WRITE
+ gcc -DTEST_PARAM_WRITE -S -Wall pr81524.c
pr81524.c: In function ‘test_param_local’:
pr81524.c:33:7: warning: storing the address of local variable ‘local’ in ‘*pp’
[-Wdangling-pointer=]
   33 |   *pp = &local;
  |   ^~~~
pr81524.c:32:7: note: ‘local’ declared here
   32 |   int local = 1;
  |   ^
pr81524.c:32:7: note: ‘pp’ declared here
+ for p in PARAM RETURN BLOCK
+ for m in READ WRITE
+ gcc -DTEST_RETURN_READ -S -Wall pr81524.c
pr81524.c: In function ‘test_return_local’:
pr81524.c:42:10: warning: function returns address of local variable
[-Wreturn-local-addr]
   42 |   return &local;
  |  ^~
+ for m in READ WRITE
+ gcc -DTEST_RETURN_WRITE -S -Wall pr81524.c
pr81524.c: In function ‘test_return_local’:
pr81524.c:42:10: warning: function returns address of local variable
[-Wreturn-local-addr]
   42 |   return &local;
  |  ^~
+ for p in PARAM RETURN BLOCK
+ for m in READ WRITE
+ gcc -DTEST_BLOCK_READ -S -Wall pr81524.c
pr81524.c: In function ‘main’:
pr81524.c:88:10: warning: using dangling pointer ‘p’ to ‘local’
[-Wdangling-pointer=]
   88 |   return *p;
  |  ^~
pr81524.c:76:9: note: ‘local’ declared here
   76 | int local = 1;
  | ^
pr81524.c:81:3: warning: using dangling pointer ‘p’ to ‘local’
[-Wdangling-pointer=]
   81 |   printf("%d\n", *p);
  |   ^~
pr81524.c:76:9: note: ‘local’ declared here
   76 | int local = 1;
  | ^
+ for m in READ WRITE
+ gcc -DTEST_BLOCK_WRITE -S -Wall pr81524.c
pr81524.c: In function ‘main’:
pr81524.c:88:10: warning: using dangling pointer ‘p’ to ‘local’
[-Wdangling-pointer=]
   88 |   return *p;
  |  ^~
pr81524.c:76:9: note: ‘local’ declared here
   76 | int local = 1;
  | ^
pr81524.c:84:6: warning: using dangling pointer ‘p’ to ‘local’
[-Wdangling-pointer=]
   84 |   *p = 1;
  |   ~~~^~~
pr81524.c:76:9: note: ‘local’ declared here
   76 | int local = 1;
  | ^


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104077
[Bug 104077] bogus/missing -Wdangling-pointer

[Bug fortran/93482] ICE in gfc_resolve_character_array_constructor, at fortran/array.c:2096

2022-02-08 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93482

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 CC||anlauf at gcc dot gnu.org
 Status|NEW |WAITING

--- Comment #3 from anlauf at gcc dot gnu.org ---
Seems to have been fixed on mainline, and backported to 11- and 10-branch.
Likely a duplicate.

[Bug middle-end/104355] Misleading -Warray-bounds documentation says "always out of bounds"

2022-02-08 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104355

Martin Sebor  changed:

   What|Removed |Added

   Assignee|unassigned at gcc dot gnu.org  |msebor at gcc dot 
gnu.org
 Status|NEW |ASSIGNED

--- Comment #3 from Martin Sebor  ---
Let me update the manual.

[Bug middle-end/104355] Misleading -Warray-bounds documentation says "always out of bounds"

2022-02-08 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104355

Martin Sebor  changed:

   What|Removed |Added

 CC||msebor at gcc dot gnu.org

--- Comment #2 from Martin Sebor  ---
The documentation is also incorrect about the warning being only active with
-ftree-vrp.  A small subset of -Warray-bounds is issued even without
optimization.  For example the following warning(s) have been issued since GCC
4.1: 

$ cat a.c && gcc -S -Wall a.c
int f (void)
{
  return __builtin_strlen ("123" + 5);
}
a.c: In function ‘f’:
a.c:3:34: warning: offset ‘5’ outside bounds of constant string
[-Warray-bounds]
3 |   return __builtin_strlen ("123" + 5);
  |~~^~~
a.c:3:10: warning: offset ‘5’ outside bounds of constant string
[-Warray-bounds]
3 |   return __builtin_strlen ("123" + 5);
  |  ^~~~

[Bug middle-end/104436] [12 Regression] spurious -Wdangling-pointer assigning local address to a class passed by value

2022-02-08 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104436

Martin Sebor  changed:

   What|Removed |Added

   Target Milestone|--- |12.0
Summary|spurious -Wdangling-pointer |[12 Regression] spurious
   |assigning local address to  |-Wdangling-pointer
   |a class passed by value |assigning local address to
   ||a class passed by value
   Keywords||patch

--- Comment #3 from Martin Sebor  ---
Patch: https://gcc.gnu.org/pipermail/gcc-patches/2022-February/590046.html

[Bug tree-optimization/104444] Missing constant folding in shift expression.

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10

Andrew Pinski  changed:

   What|Removed |Added

 Ever confirmed|0   |1
   Severity|normal  |enhancement
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2022-02-08

--- Comment #1 from Andrew Pinski  ---
Confirmed:
int g(unsigned n) {
  return ((0xff) >> n) != 0;
}

So the general case is:
(simplify
 (neeq (lshift INTEGER_CST@0 @1) zero_p)
 (ltge (@1 {bitsizeoftype(@1) - wi::clz(@0);}))

[Bug ipa/102059] Incorrect always_inline diagnostic in LTO mode with #pragma GCC target("cpu=power10")

2022-02-08 Thread meissner at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102059

--- Comment #31 from Michael Meissner  ---
Created attachment 52383
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52383&action=edit
Simpler patch to fix the problem with power8-fusion.

This patch just ignores the -mpower8-fusion option in the callee if the caller
does not have it set, and the option wasn't set explicitly.

[Bug libstdc++/104454] New: filesystem::canonical needs to strip trailing slash

2022-02-08 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104454

Bug ID: 104454
   Summary: filesystem::canonical needs to strip trailing slash
   Product: gcc
   Version: 11.2.1
Status: UNCONFIRMED
  Keywords: testsuite-fail
  Severity: normal
  Priority: P3
 Component: libstdc++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

27_io/filesystem/operations/canonical.cc FAILs on AIX because the result of
realpath("foo/.", 0) is "foo/" whereas on Linux it's "foo".

For consistency across platforms, filesystem::canonical should remove that
trailing slash.

27_io/filesystem/operations/weakly_canonical.cc also FAILs on AIX, probably for
the same reason.

[Bug middle-end/104446] [9/10/11/12 Regression] ICE in trunc_int_for_mode, at explow.cc:59

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104446

Andrew Pinski  changed:

   What|Removed |Added

   Keywords||needs-bisection
  Known to fail||11.2.0, 9.1.0
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2022-02-08
  Known to work||8.1.0
   Target Milestone|--- |9.5
 Ever confirmed|0   |1
  Component|c   |middle-end

--- Comment #1 from Andrew Pinski  ---
Confirmed reduced testcase w/o -finstrument-functions:
That is only -O2 -m32 -mrtd is needed to produce the ICE.

register volatile int a __asm__("%esp");

void f(void*);
void f1(void*);

void t ()
{
f(__builtin_return_address(0));
a = 0;
f1(__builtin_return_address(0));
}

 CUT ---
Note this works with the C++ front-end for some reason.

[Bug middle-end/104449] [9/10/11/12 Regression] ICE: verify_gimple failed: dead statement in EH table with -fexceptions -fsanitize=address -fstack-check=generic

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104449

Andrew Pinski  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Target Milestone|--- |9.5
 Ever confirmed|0   |1
   Last reconfirmed||2022-02-08

--- Comment #1 from Andrew Pinski  ---
Confirmed. With -fstack-check=generic, __builtin_alloca_with_align is marked as
being able to throw but asan decides to insert its annonations right after the
builtin call instead of on the branch after the function call.

[Bug tree-optimization/104450] [12 Regression] ICE: verify_flow_info failed: BB 2 cannot throw but has an EH edge with -O -fnon-call-exceptions -fsanitize=thread -mavx512f

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104450

Andrew Pinski  changed:

   What|Removed |Added

 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2022-02-08

--- Comment #1 from Andrew Pinski  ---
Here is a testcase without -fsanitize=thread:
That is you just need -O1  -fnon-call-exceptions -mavx512f:
#define vectsize 64
typedef int __attribute__((__vector_size__ (vectsize))) V;
typedef float __attribute__((__vector_size__ (vectsize))) F;
F f;
V v;
struct g{~g();};
void
foo (void)
{
  g t;
  v += (V) (0 <= f);
}
- CUT 
We start out with (the comparison throws):
  f.0_1 = f;
  _6 = f.0_1 >= { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0 };

   [local count: 1073741824]:
  _2 = VEC_COND_EXPR <_6, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }>;
  v.1_3 = v;

And isel converts it into:
  f.0_1 = f;

   [local count: 1073741824]:
  _2 = .VCOND (f.0_1, { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0 }, { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 111);


But now the comparison and VEC_COND_EXPR is just the builtin .VCOND which is
not marked to throw and in bb3 

[Bug middle-end/104453] New: [9/10/11/12 Regression] ICE: SIGSEGV in handled_component_p with truncated input

2022-02-08 Thread zsojka at seznam dot cz via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104453

Bug ID: 104453
   Summary: [9/10/11/12 Regression] ICE: SIGSEGV in
handled_component_p with truncated input
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Keywords: ice-on-invalid-code
  Severity: normal
  Priority: P3
 Component: middle-end
  Assignee: unassigned at gcc dot gnu.org
  Reporter: zsojka at seznam dot cz
  Target Milestone: ---
  Host: x86_64-pc-linux-gnu
Target: x86_64-pc-linux-gnu

Created attachment 52382
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52382&action=edit
reduced testcase

Compiler output:
$ x86_64-pc-linux-gnu-gcc -mavx512f testcase.c -wrapper valgrind,-q
testcase.c: In function 'foo':
testcase.c:7:33: error: expected ')' at end of input
7 |   __builtin_ia32_psrawi256 (g, 0
  |~^
  | )
testcase.c:7:3: error: expected declaration or statement at end of input
7 |   __builtin_ia32_psrawi256 (g, 0
  |   ^~~~
==13315== Invalid read of size 2
==13315==at 0x1062CC4: handled_component_p (tree.h:5069)
==13315==by 0x1062CC4: get_base_loadstore(tree_node*) (gimple-walk.cc:732)
==13315==by 0x1063B70: walk_stmt_load_store_addr_ops(gimple*, void*, bool
(*)(gimple*, tree_node*, tree_node*, void*), bool (*)(gimple*, tree_node*,
tree_node*, void*), bool (*)(gimple*, tree_node*, tree_node*, void*))
(gimple-walk.cc:765)
==13315==by 0xEA8CBA: record_stmt_references (cgraphbuild.cc:263)
==13315==by 0xEA8CBA: (anonymous
namespace)::pass_build_cgraph_edges::execute(function*) (cgraphbuild.cc:330)
==13315==by 0x127E0DA: execute_one_pass(opt_pass*) (passes.cc:2637)
==13315==by 0x127E99F: execute_pass_list_1(opt_pass*) (passes.cc:2737)
==13315==by 0x127E9D8: execute_pass_list(function*, opt_pass*)
(passes.cc:2748)
==13315==by 0xEAB0FB: cgraph_node::analyze() (cgraphunit.cc:685)
==13315==by 0xEADF97: analyze_functions(bool) (cgraphunit.cc:1240)
==13315==by 0xEAEC2D: symbol_table::finalize_compilation_unit()
(cgraphunit.cc:2500)
==13315==by 0x1386F3F: compile_file() (toplev.cc:479)
==13315==by 0xCF54E8: do_compile (toplev.cc:2158)
==13315==by 0xCF54E8: toplev::main(int, char**) (toplev.cc:2310)
==13315==by 0xCF6C0A: main (main.cc:39)
==13315==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==13315== 
during GIMPLE pass: *build_cgraph_edges
testcase.c:5:1: internal compiler error: Segmentation fault
5 | foo (void)
  | ^~~
0x1386c7f crash_signal
/repo/gcc-trunk/gcc/toplev.cc:322
0x1062cc4 handled_component_p
/repo/gcc-trunk/gcc/tree.h:5069
0x1062cc4 get_base_loadstore
/repo/gcc-trunk/gcc/gimple-walk.cc:732
0x1063b70 walk_stmt_load_store_addr_ops(gimple*, void*, bool (*)(gimple*,
tree_node*, tree_node*, void*), bool (*)(gimple*, tree_node*, tree_node*,
void*), bool (*)(gimple*, tree_node*, tree_node*, void*))
/repo/gcc-trunk/gcc/gimple-walk.cc:765
0xea8cba cgraph_node::record_stmt_references(gimple*)
/repo/gcc-trunk/gcc/cgraphbuild.cc:263
0xea8cba execute
/repo/gcc-trunk/gcc/cgraphbuild.cc:330
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ x86_64-pc-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-amd64/bin/x86_64-pc-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--with-cloog --with-ppl --with-isl --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
--with-ld=/usr/bin/x86_64-pc-linux-gnu-ld
--with-as=/usr/bin/x86_64-pc-linux-gnu-as --disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.1 20220208 (experimental) (GCC)

[Bug tree-optimization/104450] [12 Regression] ICE: verify_flow_info failed: BB 2 cannot throw but has an EH edge with -O -fnon-call-exceptions -fsanitize=thread -mavx512f

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104450

Andrew Pinski  changed:

   What|Removed |Added

   Target Milestone|--- |12.0
  Component|middle-end  |tree-optimization

[Bug tree-optimization/104165] [12 Regression] -Warray-bounds for unreachable code inlined from std::sort()

2022-02-08 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104165

Martin Sebor  changed:

   What|Removed |Added

URL||https://bugzilla.redhat.com
   ||/show_bug.cgi?id=2051783
   Keywords||missed-optimization

--- Comment #2 from Martin Sebor  ---
See also another similar test case reduced in
https://bugzilla.redhat.com/show_bug.cgi?id=2051783:

#include 

bool cond;
int foo;

int func (void)
{
  int a[3], qa = 0;
  for(int i = 0; i < 3; i++)
if (cond)
  a[qa++] = foo;

  std::sort (a, a + qa);
  return 0;
}

The warning is issued for the synthesized call to std::__insertion_sort.isra()
in basic block 9 (vrp1 output):

   [local count: 71766220]:
  std::__insertion_sort.isra (&a, &MEM  [(void *)&a + 64B]);   <<<
-Warray-bounds
  goto ; [100.00%]

The block is unreachable but GCC is unable to determine that from the loop. 
Adding an annotation just after the loop asserting that avoids the warning and
also improves the emitted object code.

The same warning triggers in GCC 11 with -Wsystem-headers.  The difference in
GCC 12 is that -Wsystem-headers no longer disables warnings for code defined in
system headers that's inlined into user code.

[Bug analyzer/104452] New: [12 Regression] ICE: in hashtab_chk_error, at hash-table.cc:137 with -O -fanalyzer

2022-02-08 Thread zsojka at seznam dot cz via Gcc-bugs
,-q,--track-origins=yes
==30624== Use of uninitialised value of size 8
==30624==at 0x17634FE: is_empty,
ana::bit_range_region*> >::hash_entry> (hash-map-traits.h:73)
==30624==by 0x17634FE: is_empty (hash-map.h:71)
==30624==by 0x17634FE: is_empty (hash-table.h:541)
==30624==by 0x17634FE: find_with_hash (hash-table.h:925)
==30624==by 0x17634FE: get (hash-map.h:189)
==30624==by 0x17634FE: get (analyzer.h:371)
==30624==by 0x17634FE: ana::region_model_manager::get_bit_range(ana::region
const*, tree_node*, ana::bit_range const&) (region-model-manager.cc:1507)
==30624==by 0x1740F54: ana::region_model::get_lvalue_1(ana::path_var,
ana::region_model_context*) const (region-model.cc:1724)
==30624==by 0x17410D9: get_lvalue (region-model.cc:1818)
==30624==by 0x17410D9: ana::region_model::get_lvalue(tree_node*,
ana::region_model_context*) const (region-model.cc:1829)
==30624==by 0x17416E0: get_region_for_poisoned_expr (region-model.cc:886)
==30624==by 0x17416E0: ana::region_model::check_for_poison(ana::svalue
const*, tree_node*, ana::region_model_context*) const (region-model.cc:855)
==30624==by 0x1746B5C: ana::region_model::on_assignment(gassign const*,
ana::region_model_context*) (region-model.cc:903)
==30624==by 0x171F498: ana::exploded_node::on_stmt(ana::exploded_graph&,
ana::supernode const*, gimple const*, ana::program_state*, ana::uncertainty_t*,
ana::path_context*) (engine.cc:1305)
==30624==by 0x172269D:
ana::exploded_graph::process_node(ana::exploded_node*) (engine.cc:3694)
==30624==by 0x1723682: ana::exploded_graph::process_worklist()
(engine.cc:3137)
==30624==by 0x1725B86: ana::impl_run_checkers(ana::logger*)
(engine.cc:5716)
==30624==by 0x17269FE: ana::run_checkers() (engine.cc:5787)
==30624==by 0x1715F98: (anonymous
namespace)::pass_analyzer::execute(function*) (analyzer-pass.cc:87)
==30624==by 0x127E0DA: execute_one_pass(opt_pass*) (passes.cc:2637)
==30624==  Uninitialised value was created by a stack allocation
==30624==at 0x1740A89: ana::region_model::get_lvalue_1(ana::path_var,
ana::region_model_context*) const (region-model.cc:1690)
==30624== 
==30624== Use of uninitialised value of size 8
...


$ x86_64-pc-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-amd64/bin/x86_64-pc-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--with-cloog --with-ppl --with-isl --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
--with-ld=/usr/bin/x86_64-pc-linux-gnu-ld
--with-as=/usr/bin/x86_64-pc-linux-gnu-as --disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.1 20220208 (experimental) (GCC)

[Bug libstdc++/84568] libstdc++-v3 configure checks for atomic operations fail on riscv

2022-02-08 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84568

--- Comment #11 from Jonathan Wakely  ---
(In reply to palmer from comment #10)
> After signing off last night I realized that none of that would work anyway,
> though, as even with the same library on both ends users would end up with a
> different mutex and thus races.  So I think that one isn't worth worrying
> about.

Agreed.

> I'm not
> sure if folks are shipping clang-built libstdc++ anywhere (and if so, are

They're not, and it's unsupported. Libstdc++ is part of GCC and must be built
by GCC.

> I guess I'm not really sure here: normally I'd say we're stuck with the
> default being ABI compatible, but I don't know the rules in libstdc++.  I'm
> assuming that forcing the default to be mutex could still allow users who
> want atomic to configure with --with-libstdcxx-lock-policy=atomic, so at

Yup.

> least there's a path forward.  IIUC users will get link errors when moving
> between the two flavors (the explicit template instantiations will have
> different integer values),

Not necessarily. The std::shared_ptr type isn't affected by that template
parameter, only its base class is. So APIs defined in terms of the public
std::shared_ptr type do not get linker errors if the private std::__shared_ptr
type differs.

[Bug libstdc++/103904] [defect fix] Please backport P2325R3 to 10 and 11

2022-02-08 Thread h2+bugs at fsfe dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103904

--- Comment #11 from Hannes Hauswedell  ---
(In reply to Jonathan Wakely from comment #9)
> (In reply to Hannes Hauswedell from comment #8)
> > Hi, I wanted to ask politely whether you have discussed this issue and came
> > to a conclusion?
> 
> No, because the current priority is gcc 12.

I just realised that the issue was actually not that old, sorry for bugging
you! Looking forward to GCC12 :)


(In reply to Jonathan Wakely from comment #10)
> I think we should backport it except for the removal of the default
> constructors for {back_,front_,}insert_iterator, ostream_iterator and
> basic_istream_view. If we keep those default constructible on the release
> branches I think the chance of breaking any code is minimal.

That's sounds like a good plan :+1:

[Bug tree-optimization/104445] [12 Regression] ICE in vect_create_partial_epilog, at tree-vect-loop.cc:5098

2022-02-08 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104445

Andrew Pinski  changed:

   What|Removed |Added

  Component|c   |tree-optimization
   Target Milestone|--- |12.0

[Bug target/104451] New: ICE: in emit_move_insn, at expr.cc:4010 with -O -mxop -mavx512f

2022-02-08 Thread zsojka at seznam dot cz via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104451

Bug ID: 104451
   Summary: ICE: in emit_move_insn, at expr.cc:4010 with -O -mxop
-mavx512f
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Keywords: ice-on-valid-code
  Severity: normal
  Priority: P3
 Component: target
  Assignee: unassigned at gcc dot gnu.org
  Reporter: zsojka at seznam dot cz
  Target Milestone: ---
  Host: x86_64-pc-linux-gnu
Target: x86_64-pc-linux-gnu

Created attachment 52380
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52380&action=edit
reduced testcase

Compiler output:
$ x86_64-pc-linux-gnu-gcc -O -mxop -mavx512f testcase.c 
during RTL pass: expand
testcase.c: In function 'foo':
testcase.c:7:12: internal compiler error: in emit_move_insn, at expr.cc:4010
7 |   return v << c;
  |  ~~^~~~
0x6ca000 emit_move_insn(rtx_def*, rtx_def*)
/repo/gcc-trunk/gcc/expr.cc:4010
0xf7c505 force_reg(machine_mode, rtx_def*)
/repo/gcc-trunk/gcc/explow.cc:688
0x17a8aba ix86_vector_duplicate_value
/repo/gcc-trunk/gcc/config/i386/i386-expand.cc:14768
0x17d00f2 ix86_expand_vector_init(bool, rtx_def*, rtx_def*)
/repo/gcc-trunk/gcc/config/i386/i386-expand.cc:15888
0x1e76e71 gen_vec_initv64qiqi(rtx_def*, rtx_def*)
/repo/gcc-trunk/gcc/config/i386/sse.md:25960
0x1e76e71 gen_ashlv16qi3(rtx_def*, rtx_def*, rtx_def*)
/repo/gcc-trunk/gcc/config/i386/sse.md:24160
0x1240ffe expand_binop_directly
/repo/gcc-trunk/gcc/optabs.cc:1442
0x123ea21 expand_binop(machine_mode, optab_tag, rtx_def*, rtx_def*, rtx_def*,
int, optab_methods)
/repo/gcc-trunk/gcc/optabs.cc:1529
0xf81954 expand_shift_1
/repo/gcc-trunk/gcc/expmed.cc:2661
0xf89083 expand_variable_shift(tree_code, machine_mode, rtx_def*, tree_node*,
rtx_def*, int)
/repo/gcc-trunk/gcc/expmed.cc:2713
0xf9c3bd expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
expand_modifier)
/repo/gcc-trunk/gcc/expr.cc:9931
0xfa2ce7 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
/repo/gcc-trunk/gcc/expr.cc:10504
0xe6709c expand_expr
/repo/gcc-trunk/gcc/expr.h:301
0xe6709c expand_return
/repo/gcc-trunk/gcc/cfgexpand.cc:3793
0xe6709c expand_gimple_stmt_1
/repo/gcc-trunk/gcc/cfgexpand.cc:3902
0xe6709c expand_gimple_stmt
/repo/gcc-trunk/gcc/cfgexpand.cc:4028
0xe6cd8e expand_gimple_basic_block
/repo/gcc-trunk/gcc/cfgexpand.cc:6069
0xe6e987 execute
/repo/gcc-trunk/gcc/cfgexpand.cc:6795
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ x86_64-pc-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-amd64/bin/x86_64-pc-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--with-cloog --with-ppl --with-isl --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
--with-ld=/usr/bin/x86_64-pc-linux-gnu-ld
--with-as=/usr/bin/x86_64-pc-linux-gnu-as --disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.1 20220208 (experimental) (GCC)

[Bug middle-end/104450] New: [12 Regression] ICE: verify_flow_info failed: BB 2 cannot throw but has an EH edge with -O -fnon-call-exceptions -fsanitize=thread -mavx512f

2022-02-08 Thread zsojka at seznam dot cz via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104450

Bug ID: 104450
   Summary: [12 Regression] ICE: verify_flow_info failed: BB 2
cannot throw but has an EH edge with -O
-fnon-call-exceptions -fsanitize=thread -mavx512f
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Keywords: ice-on-valid-code
  Severity: normal
  Priority: P3
 Component: middle-end
  Assignee: unassigned at gcc dot gnu.org
  Reporter: zsojka at seznam dot cz
  Target Milestone: ---
  Host: x86_64-pc-linux-gnu
Target: x86_64-pc-linux-gnu

Created attachment 52379
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52379&action=edit
reduced testcase

Compiler output:
$ x86_64-pc-linux-gnu-gcc -O -fnon-call-exceptions -fsanitize=thread -mavx512f
testcase.c 
testcase.c: In function 'foo':
testcase.c:8:1: error: BB 2 cannot throw but has an EH edge
8 | foo (void)
  | ^~~
during GIMPLE pass: isel
testcase.c:8:1: internal compiler error: verify_flow_info failed
0xe7189e verify_flow_info()
/repo/gcc-trunk/gcc/cfghooks.cc:284
0x127adea execute_function_todo
/repo/gcc-trunk/gcc/passes.cc:2096
0x127b2fe execute_todo
/repo/gcc-trunk/gcc/passes.cc:2138
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ x86_64-pc-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-amd64/bin/x86_64-pc-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--with-cloog --with-ppl --with-isl --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
--with-ld=/usr/bin/x86_64-pc-linux-gnu-ld
--with-as=/usr/bin/x86_64-pc-linux-gnu-as --disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.1 20220208 (experimental) (GCC)

[Bug middle-end/104449] New: [9/10/11/12 Regression] ICE: verify_gimple failed: dead statement in EH table with -fexceptions -fsanitize=address -fstack-check=generic

2022-02-08 Thread zsojka at seznam dot cz via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104449

Bug ID: 104449
   Summary: [9/10/11/12 Regression] ICE: verify_gimple failed:
dead statement in EH table with -fexceptions
-fsanitize=address -fstack-check=generic
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Keywords: ice-on-valid-code
  Severity: normal
  Priority: P3
 Component: middle-end
  Assignee: unassigned at gcc dot gnu.org
  Reporter: zsojka at seznam dot cz
  Target Milestone: ---
  Host: x86_64-pc-linux-gnu
Target: x86_64-pc-linux-gnu

Created attachment 52378
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52378&action=edit
reduced testcase

Compiler output:
$ x86_64-pc-linux-gnu-gcc -fexceptions -fsanitize=address -fstack-check=generic
testcase.c
testcase.c: In function 'foo':
testcase.c:2:1: error: dead statement in EH table
2 | foo (void)
  | ^~~
# _4 = VDEF <.MEM_2>
_5 = __builtin_alloca_with_align (64, 32);
during GIMPLE pass: asan0
testcase.c:2:1: internal compiler error: verify_gimple failed
0x13d156d verify_gimple_in_cfg(function*, bool)
/repo/gcc-trunk/gcc/tree-cfg.cc:5561
0x127adc7 execute_function_todo
/repo/gcc-trunk/gcc/passes.cc:2084
0x127b2fe execute_todo
/repo/gcc-trunk/gcc/passes.cc:2138
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ x86_64-pc-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-amd64/bin/x86_64-pc-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--with-cloog --with-ppl --with-isl --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
--with-ld=/usr/bin/x86_64-pc-linux-gnu-ld
--with-as=/usr/bin/x86_64-pc-linux-gnu-as --disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.1 20220208 (experimental) (GCC)

[Bug target/104422] nvptx: for-3.exe fail with driver 390.x

2022-02-08 Thread vries at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104422

--- Comment #6 from Tom de Vries  ---
(In reply to Tom de Vries from comment #5)
> Still on GT1030, does not reproduce with 470.x, neither the minimal nor the
> complete for-3.c.

And the same for 510.x.

So, I'm parking this for now.  This may well be the umul bug that nvidia
decided it didn't want to fix on the 390.x driver branch.

It may be something else, but we'll only known after reducing the test-case at
ptx level, which might be difficult and time-intensive for an openmp test-case.

[Bug rtl-optimization/104153] [12 Regression] ICE due to recent ifcvt changes

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104153

--- Comment #10 from CVS Commits  ---
The master branch has been updated by Robin Dapp :

https://gcc.gnu.org/g:d0d4601ccde3c4849f6e7244035f1a899d608cb7

commit r12-7114-gd0d4601ccde3c4849f6e7244035f1a899d608cb7
Author: Robin Dapp 
Date:   Tue Feb 8 16:11:20 2022 +0100

ifcvt: Fix PR104153 and PR104198.

This is a bugfix for r12-6747-gaa8cfe785953a0 which caused an ICE
on or1k (PR104153) and broke SPARC bootstrap (PR104198).

cond_exec_get_condition () returns the jump condition directly and we
now pass it to the backend.  The or1k backend modified the condition
in-place (other backends do that as well) but this modification is not
reverted when the sequence in question is discarded.  Therefore we copy
the RTX instead of using it directly.

The SPARC problem is due to the SPARC backend recreating the initial
condition when being passed a CC comparison.  This causes the sequence
to read from an already overwritten condition operand.  Generally, this
could also happen on other targets.  The workaround is to always first
emit to a temporary.  In a second run of noce_convert_multiple_sets_1
we know which sequences actually require the comparison and will use no
temporaries if all sequences after the current one do not require it.

PR rtl-optimization/104198
PR rtl-optimization/104153

gcc/ChangeLog:

* ifcvt.cc (noce_convert_multiple_sets_1): Copy rtx instead of
using it directly.  Rework comparison handling and always
perform a second pass.

gcc/testsuite/ChangeLog:

* gcc.dg/pr104198.c: New test.

[Bug rtl-optimization/104198] [12 regression] ifcvt change breaks 64-bit SPARC bootstrap

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104198

--- Comment #16 from CVS Commits  ---
The master branch has been updated by Robin Dapp :

https://gcc.gnu.org/g:d0d4601ccde3c4849f6e7244035f1a899d608cb7

commit r12-7114-gd0d4601ccde3c4849f6e7244035f1a899d608cb7
Author: Robin Dapp 
Date:   Tue Feb 8 16:11:20 2022 +0100

ifcvt: Fix PR104153 and PR104198.

This is a bugfix for r12-6747-gaa8cfe785953a0 which caused an ICE
on or1k (PR104153) and broke SPARC bootstrap (PR104198).

cond_exec_get_condition () returns the jump condition directly and we
now pass it to the backend.  The or1k backend modified the condition
in-place (other backends do that as well) but this modification is not
reverted when the sequence in question is discarded.  Therefore we copy
the RTX instead of using it directly.

The SPARC problem is due to the SPARC backend recreating the initial
condition when being passed a CC comparison.  This causes the sequence
to read from an already overwritten condition operand.  Generally, this
could also happen on other targets.  The workaround is to always first
emit to a temporary.  In a second run of noce_convert_multiple_sets_1
we know which sequences actually require the comparison and will use no
temporaries if all sequences after the current one do not require it.

PR rtl-optimization/104198
PR rtl-optimization/104153

gcc/ChangeLog:

* ifcvt.cc (noce_convert_multiple_sets_1): Copy rtx instead of
using it directly.  Rework comparison handling and always
perform a second pass.

gcc/testsuite/ChangeLog:

* gcc.dg/pr104198.c: New test.

[Bug target/104448] New: [10/11/12 Regression] ICE: in initialize, at function-abi.cc:108 with -mavx5124vnniw / -mavx5124fmaps -mno-xsave -mabi=ms

2022-02-08 Thread zsojka at seznam dot cz via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104448

Bug ID: 104448
   Summary: [10/11/12 Regression] ICE: in initialize, at
function-abi.cc:108 with -mavx5124vnniw /
-mavx5124fmaps -mno-xsave -mabi=ms
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Keywords: ice-on-valid-code
  Severity: normal
  Priority: P3
 Component: target
  Assignee: unassigned at gcc dot gnu.org
  Reporter: zsojka at seznam dot cz
  Target Milestone: ---
  Host: x86_64-pc-linux-gnu
Target: x86_64-pc-linux-gnu

Compiler output: (empty source file)
$ echo > testcase.c
$ x86_64-pc-linux-gnu-gcc -mavx5124vnniw -mno-xsave -mabi=ms testcase.c 
testcase.c: internal compiler error: in initialize, at function-abi.cc:108
0x6dff4d predefined_function_abi::initialize(unsigned int, HARD_REG_SET const&)
/repo/gcc-trunk/gcc/function-abi.cc:108
0xcf5695 backend_init
/repo/gcc-trunk/gcc/toplev.cc:1785
0xcf5695 do_compile
/repo/gcc-trunk/gcc/toplev.cc:2140
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
$ x86_64-pc-linux-gnu-gcc -mavx5124fmaps -mno-xsave -mabi=ms testcase.c 
testcase.c: internal compiler error: in initialize, at function-abi.cc:108
0x6dff4d predefined_function_abi::initialize(unsigned int, HARD_REG_SET const&)
/repo/gcc-trunk/gcc/function-abi.cc:108
0xcf5695 backend_init
/repo/gcc-trunk/gcc/toplev.cc:1785
0xcf5695 do_compile
/repo/gcc-trunk/gcc/toplev.cc:2140
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

$ x86_64-pc-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=/repo/gcc-trunk/binary-latest-amd64/bin/x86_64-pc-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/repo/gcc-trunk/binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64/bin/../libexec/gcc/x86_64-pc-linux-gnu/12.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /repo/gcc-trunk//configure --enable-languages=c,c++
--enable-valgrind-annotations --disable-nls --enable-checking=yes,rtl,df,extra
--with-cloog --with-ppl --with-isl --build=x86_64-pc-linux-gnu
--host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
--with-ld=/usr/bin/x86_64-pc-linux-gnu-ld
--with-as=/usr/bin/x86_64-pc-linux-gnu-as --disable-libstdcxx-pch
--prefix=/repo/gcc-trunk//binary-trunk-r12-7089-20220208123931-g0103c2e4082-checking-yes-rtl-df-extra-amd64
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.0.1 20220208 (experimental) (GCC)

[Bug go/104290] [12 Regression] trunk 20220126 fails to build libgo on i686-gnu

2022-02-08 Thread schwab--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104290

--- Comment #7 from Andreas Schwab  ---
If you make all-target-libgo all dependencies are respected.

[Bug c/104447] New: [9/10/11/12 Regression] ICE: maximum number of LRA assignment passes is achieved (30)

2022-02-08 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104447

Bug ID: 104447
   Summary: [9/10/11/12 Regression] ICE: maximum number of LRA
assignment passes is achieved (30)
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gs...@t-online.de
  Target Milestone: ---

With versions r8+ and file ./gcc.target/i386/pr55512-4.c :


$ gcc-12-20220206 -c pr55512-4.c -O2 -pg -fchecking
during RTL pass: reload
pr55512-4.c: In function 'bar':
pr55512-4.c:14:1: internal compiler error: maximum number of LRA assignment
passes is achieved (30)
   14 | }
  | ^
0xa93650 lra_assign(bool&)
../../gcc/lra-assigns.cc:1694
0xa8e73c lra(_IO_FILE*)
../../gcc/lra.cc:2395
0xa473f9 do_reload
../../gcc/ira.cc:5940
0xa473f9 execute
../../gcc/ira.cc:6126

[Bug c/104446] New: [9/10/11/12 Regression] ICE in trunc_int_for_mode, at explow.cc:59

2022-02-08 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104446

Bug ID: 104446
   Summary: [9/10/11/12 Regression] ICE in trunc_int_for_mode, at
explow.cc:59
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gs...@t-online.de
  Target Milestone: ---

With file ./gcc.target/i386/pr65588.c :


$ gcc-12-20220206 -c pr65588.c -O2 -m32 -mrtd -finstrument-functions
during RTL pass: combine
pr65588.c: In function 't':
pr65588.c:10:19: internal compiler error: in trunc_int_for_mode, at
explow.cc:59
   10 | int t () { a = 0; }
  |   ^
0x8b5d13 trunc_int_for_mode(long, machine_mode)
../../gcc/explow.cc:59
0x8b5d28 trunc_int_for_mode(poly_int<1u, long>, machine_mode)
../../gcc/explow.cc:86
0x8aa928 gen_int_mode(poly_int<1u, long>, machine_mode)
../../gcc/emit-rtl.cc:542
0xbc3d78 for_each_inc_dec_find_inc_dec
../../gcc/rtlanal.cc:3711
0xbc3d78 for_each_inc_dec(rtx_def*, int (*)(rtx_def*, rtx_def*, rtx_def*,
rtx_def*, rtx_def*, void*), void*)
../../gcc/rtlanal.cc:3750
0x17597af try_combine
../../gcc/combine.cc:3346
0x175f3cc combine_instructions
../../gcc/combine.cc:1269
0x175f3cc rest_of_handle_combine
../../gcc/combine.cc:14922
0x175f3cc execute
../../gcc/combine.cc:14967

[Bug c/104445] New: [12 Regression] ICE in vect_create_partial_epilog, at tree-vect-loop.cc:5098

2022-02-08 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104445

Bug ID: 104445
   Summary: [12 Regression] ICE in vect_create_partial_epilog, at
tree-vect-loop.cc:5098
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gs...@t-online.de
  Target Milestone: ---

Changed between 20210711 and 20210718, at -O3 or -Ofast :


$ cat z1.c
signed char a;
signed char f (int i, int j)
{
  signed char c;
  while (i != 0)
  {
a ^= j;
++c;
++i;
  }
  return c;
}


$ gcc-12-20220206 -c z1.c -m32 -O3 -mavx -mno-mmx
during GIMPLE pass: vect
z1.c: In function 'f':
z1.c:2:13: internal compiler error: in vect_create_partial_epilog, at
tree-vect-loop.cc:5098
2 | signed char f (int i, int j)
  | ^
0xe32e69 vect_create_partial_epilog
../../gcc/tree-vect-loop.cc:5095
0xe3bd5f vect_transform_cycle_phi(_loop_vec_info*, _stmt_vec_info*, gimple**,
_slp_tree*, _slp_instance*)
../../gcc/tree-vect-loop.cc:7795
0x190fcad vect_transform_stmt(vec_info*, _stmt_vec_info*,
gimple_stmt_iterator*, _slp_tree*, _slp_instance*)
../../gcc/tree-vect-stmts.cc:11276
0xe4b65f vect_transform_loop(_loop_vec_info*, gimple*)
../../gcc/tree-vect-loop.cc:9799
0xe7d565 vect_transform_loops
../../gcc/tree-vectorizer.cc:1004
0xe7d713 vect_transform_loops
../../gcc/tree-vectorizer.cc:1022
0xe7db86 try_vectorize_loop_1
../../gcc/tree-vectorizer.cc:1133
0xe7db86 try_vectorize_loop
../../gcc/tree-vectorizer.cc:1164
0xe7e0c4 execute
../../gcc/tree-vectorizer.cc:1278

[Bug go/104290] [12 Regression] trunk 20220126 fails to build libgo on i686-gnu

2022-02-08 Thread svante.signell at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104290

--- Comment #6 from Svante Signell  ---
OK, forget about the gotools. The problem is that libgo is built _before_
libatomic and libbacktrace. A Debian error??

[Bug tree-optimization/104444] New: Missing constant folding in shift expression.

2022-02-08 Thread cassio.neri at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10

Bug ID: 10
   Summary: Missing constant folding in shift expression.
   Product: gcc
   Version: 11.2.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: cassio.neri at gmail dot com
  Target Milestone: ---

#include 

inline bool f(uint32_t m, int n) {
  return (m >> n) != 0;
}

bool g(int n) {
  return f(1 << 24, n);
}

g can be optimised to "return n <= 24". LLVM does that but gcc doesn't.

The example above drove me to another missing optimisation opportunity based on
undefined behaviour. (Perhaps a matter for other report?)

bool h(uint32_t m, int n) {
  return (n >= 0 && n < 32) || (m >> n) != 0;
}

If (n >= 0 && n < 32) is false, then (m >> n) is UB (in C++, probably also in
C). Therefore, h can be optimised to "return true" but gcc doesn't do that
(neither does LLVM).

See here: https://godbolt.org/z/hx9vGe6Kj

If confirmed, these bugs could be added to
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=19987

Potentially related:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95817
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94789#c1

[Bug target/104422] nvptx: for-3.exe fail with driver 390.x

2022-02-08 Thread vries at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104422

--- Comment #5 from Tom de Vries  ---
Still on GT1030, does not reproduce with 470.x, neither the minimal nor the
complete for-3.c.

[Bug c++/104379] [9/10/11 Regression] -Wshadow warning given three times

2022-02-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104379

Jakub Jelinek  changed:

   What|Removed |Added

Summary|[9/10/11/12 Regression] |[9/10/11 Regression]
   |-Wshadow warning given  |-Wshadow warning given
   |three times |three times

--- Comment #9 from Jakub Jelinek  ---
Fixed on the trunk so far.

Note, GCC 11 and older doesn't have the warning-control.c* infrastructure, so
all we could do there is TREE_NO_WARNING.

[Bug c++/104379] [9/10/11/12 Regression] -Wshadow warning given three times

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104379

--- Comment #8 from CVS Commits  ---
The master branch has been updated by Jakub Jelinek :

https://gcc.gnu.org/g:71e6353e1b03021bc8bbcf4bd67a5f14d09b5fb1

commit r12-7113-g71e6353e1b03021bc8bbcf4bd67a5f14d09b5fb1
Author: Jakub Jelinek 
Date:   Tue Feb 8 20:17:55 2022 +0100

c++: Don't emit repeated -Wshadow warnings for templates/ctors [PR104379]

The following patch suppresses extraneous -Wshadow warnings.
On the testcase without the patch we emit 14 -Wshadow warnings,
with the patch just 4.  It is enough to warn once e.g. during parsing of
the
template or the abstract ctor, while previously we'd warn also on the
clones
of the ctors and on instantiation.
In GCC 8 and earlier we didn't warn because check_local_shadow did
  /* Inline decls shadow nothing.  */
  if (DECL_FROM_INLINE (decl))
return;

2022-02-08  Jakub Jelinek  

PR c++/104379
* name-lookup.cc (check_local_shadow): When diagnosing shadowing
of a member or global declaration, add warning suppression for
the decl and don't warn again on it.

* g++.dg/warn/Wshadow-18.C: New test.

[Bug c++/104403] [12 Regression] ICE while optimizing lambda that returns address of a static variable hidden in a switch

2022-02-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104403

Jakub Jelinek  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #4 from Jakub Jelinek  ---
Fixed.

[Bug target/102140] [12 Regression] ICE: in extract_constrain_insn, at recog.c:2670 (insn does not satisfy its constraints) with -Og -fipa-cp -fno-tree-ccp -fno-tree-ter

2022-02-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102140

Jakub Jelinek  changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #7 from Jakub Jelinek  ---
Fixed.

[Bug c++/104403] [12 Regression] ICE while optimizing lambda that returns address of a static variable hidden in a switch

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104403

--- Comment #3 from CVS Commits  ---
The master branch has been updated by Jakub Jelinek :

https://gcc.gnu.org/g:1755141a9ea0dddabb52776cddc4c9325eed27c6

commit r12-7112-g1755141a9ea0dddabb52776cddc4c9325eed27c6
Author: Jakub Jelinek 
Date:   Tue Feb 8 20:15:42 2022 +0100

c++: Remove superflous assert [PR104403]

I've added the assert because start_decl diagnoses such vars for C++20 and
earlier:
  if (current_function_decl && VAR_P (decl)
  && DECL_DECLARED_CONSTEXPR_P (current_function_decl)
  && cxx_dialect < cxx23)
but as can be seen, we cam trigger the assert in older standards e.g.
during
non-manifestly constant evaluation.  Rather than refining the assert that
DECL_EXPRs for such vars don't appear for C++20 and older if they are
inside
of functions declared constexpr this patch just removes the assert, the
code rejects encountering those vars in constant expressions anyway.

2022-02-08  Jakub Jelinek  

PR c++/104403
* constexpr.cc (cxx_eval_constant_expression): Don't assert
DECL_EXPRs
of TREE_STATIC vars may only appear in -std=c++23.

* g++.dg/cpp0x/lambda/lambda-104403.C: New test.

[Bug target/102140] [12 Regression] ICE: in extract_constrain_insn, at recog.c:2670 (insn does not satisfy its constraints) with -Og -fipa-cp -fno-tree-ccp -fno-tree-ter

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102140

--- Comment #6 from CVS Commits  ---
The master branch has been updated by Jakub Jelinek :

https://gcc.gnu.org/g:0c3e491a4e5ae74bfbed6d167d403d262b5a4adc

commit r12-7111-g0c3e491a4e5ae74bfbed6d167d403d262b5a4adc
Author: Jakub Jelinek 
Date:   Tue Feb 8 20:14:30 2022 +0100

rs6000: Fix up vspltis_shifted [PR102140]

The following testcase ICEs, because
(const_vector:V4SI [
(const_int 0 [0]) repeated x3
(const_int -2147483648 [0x8000])
])
is recognized as valid easy_vector_constant in between split1 pass and
end of RA.
The problem is that such constants need to be split, and the only
splitter for that is:
(define_split
  [(set (match_operand:VM 0 "altivec_register_operand")
(match_operand:VM 1 "easy_vector_constant_vsldoi"))]
  "VECTOR_UNIT_ALTIVEC_OR_VSX_P (mode) && can_create_pseudo_p ()"
There is only a single splitting pass before RA, so after that finishes,
if something gets matched in between that and end of RA (after that
can_create_pseudo_p () would be no longer true), it will never be
successfully split and we ICE at final.cc time or earlier.

The i386 backend (and a few others) already use
(cfun->curr_properties & PROP_rtl_split_insns)
as a test for split1 pass finished, so that some insns that should be split
during split1 and shouldn't be matched afterwards are properly guarded.

So, the following patch does that for vspltis_shifted too.

2022-02-08  Jakub Jelinek  

PR target/102140
* config/rs6000/rs6000.cc (vspltis_shifted): Return false also if
split1 pass has finished already.

* gcc.dg/pr102140.c: New test.

[Bug middle-end/104285] openmp offload linker issue

2022-02-08 Thread xw111luoye at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104285

--- Comment #1 from Ye Luo  ---
Here is a minimal reproducer.
https://github.com/ye-luo/openmp-target/tree/master/tests/linking/two_identical_templates

$ g++ -fopenmp -foffload=nvptx-none -O3 -c test_a.cpp 
$ g++ -fopenmp -foffload=nvptx-none -c test_a.cpp 
$ g++ -fopenmp -foffload=nvptx-none -c test_b.cpp 
$ g++ -fopenmp -foffload=nvptx-none  main.cpp test_a.o test_b.o 
lto1: fatal error: test_a.o: section _Z8test_mapIfEvv$_omp_fn$0.2375 is missing
compilation terminated.
mkoffload: fatal error: x86_64-pc-linux-gnu-accel-nvptx-none-gcc returned 1
exit status
compilation terminated.
lto-wrapper: fatal error:
/soft/gcc/gcc-12-dev-2022-02-08/libexec/gcc/x86_64-pc-linux-gnu/12.0.1//accel/nvptx-none/mkoffload
returned 1 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status

$ g++ -fopenmp -foffload=disable -c test_a.cpp
$ g++ -fopenmp -foffload=disable -c test_b.cpp
g++ -fopenmp -foffload=disable main.cpp test_a.o test_b.o

Using be862bf1f612c884597ace4cbfdec972a0bf0eef from master

[Bug c++/104418] [C++17+] Error inheriting base class constructors by using-declaration

2022-02-08 Thread fchelnokov at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104418

--- Comment #7 from Fedor Chelnokov  ---
Thanks. I submitted Clang bug:
https://github.com/llvm/llvm-project/issues/53653

[Bug target/100354] [9/10/11/12 regression] aarch64: non-deligitimized UNSPEC UNSPEC_TLS (76) found in variable location

2022-02-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100354

Jakub Jelinek  changed:

   What|Removed |Added

 CC||ktkachov at gcc dot gnu.org,
   ||rearnsha at gcc dot gnu.org,
   ||rsandifo at gcc dot gnu.org

--- Comment #7 from Jakub Jelinek  ---
It could be e.g. done by having the targetm.const_not_ok_for_debug_p target
hook not return true for the UNSPEC_TLS case and have some new target hook that
would handle emitting debug info for an UNSPEC.

Or a way to just quiet the note (I'll repeat it is -fchecking only) would be to
use as the operand of UNSPEC_TLS not const0_rtx as it does, but some magic
SYMBOL_REF with SYMBOL_REF_TLS_MODEL non-zero on it.  Say like:
--- gcc/config/aarch64/aarch64.md.jj2022-01-11 23:11:21.682300103 +0100
+++ gcc/config/aarch64/aarch64.md   2022-02-08 19:51:00.581676457 +0100
@@ -6833,7 +6833,8 @@ (define_insn "ldr_got_tiny_sidi"

 (define_insn "aarch64_load_tp_hard"
   [(set (match_operand:DI 0 "register_operand" "=r")
-   (unspec:DI [(const_int 0)] UNSPEC_TLS))]
+   (unspec:DI [(match_operand 1 "aarch64_tls_le_symref" "S")]
+  UNSPEC_TLS))]
   ""
   "mrs\\t%0, tpidr_el0"
   [(set_attr "type" "mrs")]
--- gcc/config/aarch64/aarch64.cc.jj2022-02-04 14:36:54.262615676 +0100
+++ gcc/config/aarch64/aarch64.cc   2022-02-08 19:46:58.206051731 +0100
@@ -18474,7 +18474,9 @@ aarch64_load_tp (rtx target)
 target = gen_reg_rtx (Pmode);

   /* Can return in any reg.  */
-  emit_insn (gen_aarch64_load_tp_hard (target));
+  rtx sym = gen_rtx_SYMBOL_REF (Pmode, "");
+  SYMBOL_REF_FLAGS (sym) = TLS_MODEL_LOCAL_EXEC << SYMBOL_FLAG_TLS_SHIFT;
+  emit_insn (gen_aarch64_load_tp_hard (target, sym));
   return target;
 }

[Bug libstdc++/84568] libstdc++-v3 configure checks for atomic operations fail on riscv

2022-02-08 Thread palmer at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84568

--- Comment #10 from palmer at gcc dot gnu.org ---
(In reply to Jonathan Wakely from comment #7)
> (In reply to Jonathan Wakely from comment #6)
> > (In reply to Jonathan Wakely from comment #5)
> > > (In reply to palmer from comment #3)
> > > > It looks like LLVM already has inline atomics, so presumably the same 
> > > > issues
> > > > would arise when mixing libstdc++ libraries compiled with LLVM and GCC.
> > > 
> > > Yup.
> > 
> > But not just "when mixing libstdc++ libraries". When mixing pretty much any
> > C++ code that uses libstdc++ headers.
> 
> Oh actually, sorry, that's wrong. The atomic policy for libstdc++ is set at
> configure time, based on the GCC building it. We define a macro, and that is
> fixed for the lifetime of that libstdc++ installation. So it doesn't matter
> if you compile those same headers with Clang, which _could_ use atomic
> built-ins, the atomic policy is still decided by the macro which doesn't
> change after installation.
> 
> So it's only a problem when mixing user code compiled with old and new
> libstdc++ headers.
> 
> And I've been confusing the _GLIBCXX_ATOMIC_BUILTINS macro with the
> _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY macro.

I hadn't even noticed the _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY macro, thanks!

> If _GLIBCXX_ATOMIC_BUILTINS changes from undefined to 1, I think that's OK.
> Old code will still call the non-inline functions in libstdc++.so, but those
> will now be consistent with the inline ones that new code is calling.

My specific worry was users mixing in routines from two different versions of
libstdc++: for example, maybe there's some statically linked executable that
puts a shared pointer into a mmap'd region, which it then expects to work when 

After signing off last night I realized that none of that would work anyway,
though, as even with the same library on both ends users would end up with a
different mutex and thus races.  So I think that one isn't worth worrying
about.

[snip, I'm mixing two replies here]

> Thanks. Changing that will cause an ABI break in the headers (and so affect
> user code, not just the libstdc++.so library).
> 
> Clang and GCC will still be compatible, because the macros are still set
> once by configure when building libstdc++.

>From my reading of this, GCC and clang will build libstdc++ binaries with
incompatible ABIs: clang has inline atomics, so the 2-byte CAS check will
succeed and we'll end up with libstdcxx_atomic_lock_policy=atomic .  I don't
actually have a clang build around to test that with, though, and I'm not sure
if folks are shipping clang-built libstdc++ anywhere (and if so, are expecting
it to be compatible with a GCC-built libstdc++).

> One solution would be to override the checks in libstdc++-v3/acinclude.m4 so
> that _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY is also #undef for RISC-V, even after
> the atomic built-ins are supported. That would preserve the ABI, but would
> mean ref-counting in libstdc++ is sub-optimal.
> 
> Or let the default change, and vendors who want to preserve the old ABI can
> configure with --with-libstdcxx-lock-policy=mutex to override the default.

I guess I'm not really sure here: normally I'd say we're stuck with the default
being ABI compatible, but I don't know the rules in libstdc++.  I'm assuming
that forcing the default to be mutex could still allow users who want atomic to
configure with --with-libstdcxx-lock-policy=atomic, so at least there's a path
forward.  IIUC users will get link errors when moving between the two flavors
(the explicit template instantiations will have different integer values), so
at least there's a way for distros to make sure they've re-built everything if
they want to change.

I could also imagine a much more complicated third option: essentially
upgrading the mutex to an RW-like lock and allowing the atomic-based routines
to proceed concurrently.  I poked around the locking code a bit have no idea if
this would even be possible, it's all complicated enough that it seems like at
best a bad idea.

I guess this is really a distro sort of question, but I'd lean towards forcing
the default to mutex on RISC-V, thus keeping ABI compatibility.  Then at least
the distros can pick if they want to have a flag day around this.

[Bug target/100354] [9/10/11/12 regression] aarch64: non-deligitimized UNSPEC UNSPEC_TLS (76) found in variable location

2022-02-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100354

--- Comment #6 from Jakub Jelinek  ---
In this particular case it is:
(note 38 19 20 (var_location p (unspec:DI [
(const_int 0 [0])
] UNSPEC_TLS)) NOTE_INSN_VAR_LOCATION)
where p's value should be equal to that __builtin_thread_pointer () aka the
base of the TLS region.

I wonder if it could be represented as DW_OP_lit0 DW_OP_form_tls_address,
one would need to test that in debugger.
And if it works, figure out some target independent way or perhaps a target
hook that would propagate this case from the target dependent UNSPEC_TLS to
dwarf2out.cc that it could emit such location.

[Bug c++/104410] [11 Regression] Internal error using default-initialized constexpr bool in requires clause

2022-02-08 Thread ppalka at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104410

Patrick Palka  changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|ASSIGNED|RESOLVED

--- Comment #7 from Patrick Palka  ---
Fixed for GCC 11.3/12.

[Bug go/104290] [12 Regression] trunk 20220126 fails to build libgo on i686-gnu

2022-02-08 Thread ian at airs dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104290

--- Comment #5 from Ian Lance Taylor  ---
> The only issue to resolve is how to make sure libatomic and libbacktrace 
> builds in build/i686-gnu before libgo/gotools.

That question doesn't sound right.  The gotools are built for the target.  They
shouldn't depend on build/i686-gnu, which is built for the host.  The gotools
should depend on the target libatomic and the target libbacktrace, and they do.

What problem are you trying to solve?

[Bug libstdc++/104443] common_iterator::operator-> is not correctly implemented

2022-02-08 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104443

Jonathan Wakely  changed:

   What|Removed |Added

 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2022-02-08

[Bug libstdc++/104443] New: common_iterator::operator-> is not correctly implemented

2022-02-08 Thread de34 at live dot cn via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104443

Bug ID: 104443
   Summary: common_iterator::operator-> is not correctly
implemented
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: de34 at live dot cn
  Target Milestone: ---

When the adapted iterator type I is a pointer type or has operator->,
std::common_iterator::operator-> is required to return the iterator by
reference ([common.iter.access]/(5.1), and std::get for std::variant always
returns reference).

However, currently libstdc++'s implementation returns the iterator by value in
these cases, because "return _M_it;" is used and the return type is specified
by decltype(auto). "return (_M_it);" should be used instead.

Currently only libc++ correctly implements both common_iterator::operator-> and iterator_traits>::pointer. See
https://gcc.godbolt.org/z/1Tn5cGrhh.

[Bug c++/104410] [11 Regression] Internal error using default-initialized constexpr bool in requires clause

2022-02-08 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104410

--- Comment #6 from CVS Commits  ---
The releases/gcc-11 branch has been updated by Patrick Palka
:

https://gcc.gnu.org/g:411db3b4cf8655ecb5b7d666318546c73f2d156b

commit r11-9544-g411db3b4cf8655ecb5b7d666318546c73f2d156b
Author: Patrick Palka 
Date:   Tue Feb 8 09:11:29 2022 -0500

c++: satisfaction value of type const bool [PR104410]

Here constant evaluation of the atomic constraint use_func_v
sensibly yields an INTEGER_CST of type const bool, but the assert in
satisfaction_value expects unqualified bool.  So let's just relax the
assert to accept cv-qualified bool.

PR c++/104410

gcc/cp/ChangeLog:

* constraint.cc (satisfaction_value): Relax assert to accept
cv-qualified bool.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-pr104410.C: New test.

(cherry picked from commit 7ff201d85fad11ba6365a5612124b75b385a97bd)

[Bug go/104290] [12 Regression] trunk 20220126 fails to build libgo on i686-gnu

2022-02-08 Thread schwab--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104290

--- Comment #4 from Andreas Schwab  ---
Makefile.def already has the required dependencies:

dependencies = { module=all-target-libgo; on=all-target-libbacktrace; };
dependencies = { module=all-target-libgo; on=all-target-libffi; };
dependencies = { module=all-target-libgo; on=all-target-libatomic; };

[Bug go/104290] [12 Regression] trunk 20220126 fails to build libgo on i686-gnu

2022-02-08 Thread svante.signell at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104290

--- Comment #3 from Svante Signell  ---
With the proposed patches everything builds fine. The only issue to resolve is
how to make sure libatomic and libbacktrace builds in build/i686-gnu before
libgo/gotools.

Any ideas? I'm not sure if this is a Debian or upstream problem.

After a failed build I did:
make -C build configure-target-libatomic
make -C build/i686-gnu/libatomic/

make -C build configure-target-libbacktrace
make -C build/i686-gnu/libbacktrace/

debian/rules build
fakeroot debian/rules binary
All debs built fine.

Additionally make -C build/i686-gnu/libgo check reports in
build/i686-gnu/libgo/libgo.sum

=== libgo Summary ===

# of expected passes181
# of unexpected failures9

Thanks!

[Bug target/103147] [12 Regression] ICE in register_tuple_type with include "arm_neon.h" and -fpack-struct

2022-02-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103147

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org,
   ||jonathan.wright at arm dot com,
   ||wirkus at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek  ---
Note, -fpack-struct is an ABI changing option, so it should be used with extra
care.
Anyway, I guess the backends (both aarch64 and arm) need to decide what exactly
they want.
Either for these internal lang_hooks.types.simulate_record_decl created types
temporarily rest to default the -fpack-struct stuff, or allow them to have
smaller alignment, or increase the alignment afterwards.
Because those
  tree t = lang_hooks.types.simulate_record_decl (input_location,
  tuple_type_name,
  make_array_slice (&field,
1));
  gcc_assert (TYPE_MODE_RAW (t) == TYPE_MODE (t)
  && TYPE_ALIGN (t) == alignment);
and
  ls64_arm_data_t = lang_hooks.types.simulate_record_decl (input_location,
 tuple_type_name,
 make_array_slice (&field, 1));

  gcc_assert (TYPE_MODE (ls64_arm_data_t) == V8DImode);
  gcc_assert (TYPE_MODE_RAW (ls64_arm_data_t) == TYPE_MODE (ls64_arm_data_t));
  gcc_assert (TYPE_ALIGN (ls64_arm_data_t) == 64);
assertions otherwise of course fail.
Now, seems the arm backend actually doesn't assert this.
Note, when those types were defined in arm_neon.h, -fpack-struct usedd to be
applied to those.

The changes were done in r12-4907-g8197ab94b47c814632d758dd36a121ad4114ff70
and r12-5955-gfdcddba8f29ea3878851b8b4cd37d0fd3476d3bf

[Bug libstdc++/103904] [defect fix] Please backport P2325R3 to 10 and 11

2022-02-08 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103904

Jonathan Wakely  changed:

   What|Removed |Added

 Ever confirmed|0   |1
   Assignee|unassigned at gcc dot gnu.org  |ppalka at gcc dot 
gnu.org
 Status|UNCONFIRMED |ASSIGNED
   Target Milestone|--- |10.4
   Last reconfirmed||2022-02-08

--- Comment #10 from Jonathan Wakely  ---
I think we should backport it except for the removal of the default
constructors for {back_,front_,}insert_iterator, ostream_iterator and
basic_istream_view. If we keep those default constructible on the release
branches I think the chance of breaking any code is minimal.

[Bug libstdc++/104442] New: atomic::wait incorrectly loops in case of spurious notification when __waiter is shared

2022-02-08 Thread poulhies at adacore dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104442

Bug ID: 104442
   Summary: atomic::wait incorrectly loops in case of spurious
notification when __waiter is shared
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: poulhies at adacore dot com
  Target Milestone: ---

Created attachment 52377
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52377&action=edit
patch fixing the issue

We are observing a deadlock in 100334.cc on vxworks.

This is caused by :

template
  void
  _M_do_wait_v(_Tp __old, _ValFn __vfn)
  {
__platform_wait_t __val;
if (__base_type::_M_do_spin_v(__old, __vfn, __val))
   return;

do
  {
__base_type::_M_w._M_do_wait(__base_type::_M_addr, __val);
  }
while (__detail::__atomic_compare(__old, __vfn()));
  }

When several thread are sharing the waiter (as in 100334.cc), the notify_one()
will wake all threads blocked in the _M_do_wait() above. The thread whose data
changed exits the loop correctly, but the others are looping back in
_M_do_wait() with the same arguments. As the waiter's value has changed since
the previous iteration but not __val, the method directly returns (as if it had
detected a notification) and the loop continues.

On GNU/Linux, the test is PASS because the main thread is still scheduled and
will do a .store(1) on all atoms, unblocking all the busy-waiting thread (but
the thread doing a busywait can still be observed with gdb).

On vxworks, the main thread is never scheduled again (I think there's no
preemption at the same prio level) and the busy-wait starves the system.

The attached patch is a possible fix. It moves the spin() call inside the loop,
updating the __val at every iteration. A better fix is probably possible but
may require some refactoring (a bit more than I'm comfortable with).

I've checked the patch for regression on gcc-master for x86_64. It also fixes
the test on gcc-11 for aarch64-vxworks7.

[Bug libstdc++/103904] [defect fix] Please backport P2325R3 to 10 and 11

2022-02-08 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103904

--- Comment #9 from Jonathan Wakely  ---
(In reply to Hannes Hauswedell from comment #8)
> Hi, I wanted to ask politely whether you have discussed this issue and came
> to a conclusion?

No, because the current priority is gcc 12.

[Bug target/104422] nvptx: for-3.exe fail with driver 390.x

2022-02-08 Thread vries at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104422

--- Comment #4 from Tom de Vries  ---
(In reply to Tom de Vries from comment #3)
> Reproduces both with and without GOMP_NVPTX_JIT=-O0.

Pff, that was an artefact of having bumped the default ptx isa to 6.3.

So, let's try again ...

Reproduced with 390.147 driver on pascal card, GT 1030, gcc build from master
commit "[nvptx] Unbreak build, add PTX_ISA_SM70".  Doens't reproduce with
GOMP_NVPTX_JIT=-O0.

Minimal test-case:
...
#define N 1500

#pragma omp declare target
int a[N];

__attribute__((noinline, noclone)) void
f3_ds_normal ()
{
  volatile int s3 = 1;
#pragma omp distribute simd 
  for (int i = 0; i < N; i += s3)
a[i] += 7;
}
#pragma omp end declare target

int
main ()
{
  for (int i = 0; i < N; i++)
a[i] = i - 29;

#pragma omp target update to(a)

#pragma omp target teams
  f3_ds_normal ();

#pragma omp target update from(a)

  for (int i = 0; i < N; i++)
if (a[i] != i - 22)
  __builtin_abort ();

  return 0;
}
...

[Bug target/104441] [12 Regression] vzeroupper is placed at the wrong place

2022-02-08 Thread hjl.tools at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104441

--- Comment #2 from H.J. Lu  ---
Created attachment 52376
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52376&action=edit
A patch

I am testing this.

[Bug libstdc++/103904] [defect fix] Please backport P2325R3 to 10 and 11

2022-02-08 Thread h2+bugs at fsfe dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103904

--- Comment #8 from Hannes Hauswedell  ---
Hi, I wanted to ask politely whether you have discussed this issue and came to
a conclusion?

It if it is still being discussed, can you at least "confirm" this issue and
put it on some list for the next patch-level releases? Otherwise, it will be
forgotten. And the longer we wait with a decision, the less likely it will be
that it can be backported.

Thank you!

[Bug target/104345] [12 Regression] "nvptx: Transition nvptx backend to STORE_FLAG_VALUE = 1" patch made some code generation worse

2022-02-08 Thread tschwinge at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104345

--- Comment #9 from Thomas Schwinge  ---
OK!  Putting your "nvptx: Add support for 64-bit mul.hi (and other)
instructions" on top, that considerably changes (simplifies!) the generated
'__muldc3' PTX code; the regression disappears.  :-)

(I have, so far, only manually tested
'libgomp.oacc-c-c++-common/reduction-cplx-dbl.c'.  I'll report later in the
unlikely case that any other/new issues should appear.)


(And, will later test your "nvptx: Tweak constraints on copysign instructions"
on top, too.)

  1   2   >