[Bug preprocessor/89808] An option to disable warning "#pragma once in main file"

2021-03-30 Thread jbassett271 at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89808

Justin Bassett  changed:

   What|Removed |Added

 CC||jbassett271 at gmail dot com

--- Comment #11 from Justin Bassett  ---
An additional use case: to test that header files can compile in isolation, one
could compile the header file with -fsyntax-only ( g++ -xc++ -fsyntax-only
myheader.hpp ). However, this emits the "#pragma once in main file" warning,
which is undesirable, especially because it makes -Werror impossible. This
means that a tool for checking header file isolation would have to emit a new
file to check header isolation.

[Bug c++/99223] [modules] stdl header-unit ICE

2021-03-30 Thread alexander.lelyakin at googlemail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99223

--- Comment #4 from Alexander Lelyakin  ---
Currently these two sequences produce same error:
 internal compiler error: in install_entity, at cp/module.cc:7464

Which is duplicate of 99241.

Should be closed.

[Bug c++/99222] [modules] system header-unit ICEs

2021-03-30 Thread alexander.lelyakin at googlemail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99222

Alexander Lelyakin  changed:

   What|Removed |Added

 CC||alexander.lelyakin@googlema
   ||il.com

--- Comment #1 from Alexander Lelyakin  ---
This is not more reproducible for more than month. Should be closed.

[Bug c++/99246] [modules] ICE in write_location, at cp/module.cc:15687

2021-03-30 Thread alexander.lelyakin at googlemail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99246

--- Comment #4 from Alexander Lelyakin  ---
This report is marked as resolved, but it is stable reproducible all the time.

/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header bit
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header istream
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header cmath
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header locale
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header bitset
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header shared_mutex
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header new
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header ciso646
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header memory
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header fstream
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header thread
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header regex

In module imported at /usr/local/include/c++/11.0.1/sstream:38:1,
included from /usr/local/include/c++/11.0.1/regex:46:
/usr/local/include/c++/11.0.1/istream: note: unable to represent further
imported source locations
/usr/local/include/c++/11.0.1/regex: internal compiler error: in
write_location, at cp/module.cc:15593
0x6e02cf module_state::write_location(bytes_out&, unsigned int)
../../gcc/gcc/cp/module.cc:15593
0xa60ff3 trees_out::core_vals(tree_node*)
../../gcc/gcc/cp/module.cc:5900
0xa64464 trees_out::tree_node_vals(tree_node*)
../../gcc/gcc/cp/module.cc:7050
0xa64464 trees_out::tree_value(tree_node*)
../../gcc/gcc/cp/module.cc:8887
0xa604f4 trees_out::tree_node(tree_node*)
../../gcc/gcc/cp/module.cc:9085
0xa6484a trees_out::write_var_def(tree_node*)
../../gcc/gcc/cp/module.cc:11472
0xa65ae5 module_state::write_cluster(elf_out*, depset**, unsigned int,
depset::hash&, unsigned int*, unsigned int*)
../../gcc/gcc/cp/module.cc:14648
0xa6743e module_state::write(elf_out*, cpp_reader*)
../../gcc/gcc/cp/module.cc:17720
0xa6801f finish_module_processing(cpp_reader*)
../../gcc/gcc/cp/module.cc:19831
0x9fb4cb c_parse_final_cleanups()
../../gcc/gcc/cp/decl2.c:5175
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

g++ (GCC) 11.0.1 20210330 (experimental)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[Bug c++/99284] [modules] ICE in key_mergeable, at cp/module.cc:10441

2021-03-30 Thread alexander.lelyakin at googlemail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99284

--- Comment #2 from Alexander Lelyakin  ---
Not reproduced anymore.

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Alexandre Oliva via Gcc
On Mar 30, 2021, JeanHeyd Meneide  wrote:

>   Taking the correction into account

*nod*

> What you've presented here is your word ("This
> accusation is outright false, beyond any possible doubt."),

True, I didn't claim to be offering evidence, and that didn't seem
necessary since all the supporting evidence you'd brought was hearsay.
I can't link to the message that is presumably removed, and I suppose I
could get permission to share the email in which he issued the request,
but please be honest: would you believe it?

> they were NOT allowed to attack people like this and go this far and
> being banned by moderation, RMS taking explicit actions to UNDO that
> moderation and explicitly, in the internal mailing list, state
> (paraphrased): 'I have put a new moderator in. Have at it.'

This description suggests we're not even talking about the same events.
My description was about a doxxing web site/email posted no more than a
week ago.

Your description appears to resemble events of 2019: the illegitimate
censorious moderation that was imposed on a GNU mailing list, against
GNU and mailing list policies, after someone abused their autonomy to
grant moderation privileges to a group that started suppressing views
they disagreed with, while allowing personal attacks they supported to
go through.  List rules were restored and censorship ceased with the
legitimate installation of a larger group of moderators with more
diverse stances, that applied list rules and blocked inappropriate posts
while allowing through civil criticism on all sides.  Richard was
criticized for insisting on enabling the debate to carry on, but he
insisted on the principled stance of free speech, and then some, to
allow for what some perceived as personal attacks against him.


Now, you appear to believe a very different interpretation of these
facts.  I can't imagine that showing public posts will prove anything,
since the difference is in the interpretation and attribution of
motivations and allegiances, rather than on facts.  As law and history
have taught us, proving innocence or honesty are often impossible tasks;
it is the burden of the accuser to offer enough evidence to sustain an
accusation, and all you've brought is hearsay.  Popular, widespread
hateful hearsay, but still hearsay.


> where someone who was already banned

No such thing happened.  That's yet another distortion.

There was an attempt to attach shocking labels to an honest man.

The labels failed to stick, though some people still believe them.

Part of the problem is the reasoning that, if so many people are
parroting the same false allegations, there must be truth to them.

When any one of them is proven wrong, with the great effort required to
overcome preconceptions, the goal post is moved onto all of the others
that appear to remain, because the preconceptions still mistake them for
granted, and the accused remains guilty for having taken multiple shots.
That's not the way civilizations have long carried out justice.

-- 
Alexandre Oliva, happy hacker  https://FSFLA.org/blogs/lxo/
   Free Software Activist GNU Toolchain Engineer
Vim, Vi, Voltei pro Emacs -- GNUlius Caesar


[Bug c++/99815] [11 Regression] ICE: in placeholder_type_constraint_dependent_p, at cp/pt.c:28193

2021-03-30 Thread ppalka at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99815

Patrick Palka  changed:

   What|Removed |Added

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

--- Comment #3 from Patrick Palka  ---
Fixed.

[Bug c++/88115] Incorrect result from alignof in templates, if also using __alignof__.

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88115

--- Comment #12 from CVS Commits  ---
The master branch has been updated by Patrick Palka :

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

commit r11-7921-ga3bf6ce7f2e17f2c977c13df23eb718e7b433dcd
Author: Patrick Palka 
Date:   Tue Mar 30 22:57:11 2021 -0400

c++: Adjust mangling of __alignof__ [PR88115]

r11-4926 made __alignof__ get mangled differently from alignof,
encoding __alignof__ as a vendor extended operator.  But this
mangling is problematic for the reasons mentioned in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88115#c6.

This patch changes our mangling of __alignof__ to instead use the
new "vendor extended expression" syntax that's proposed in
https://github.com/itanium-cxx-abi/cxx-abi/issues/112.  Clang does
the same thing already, so after this patch Clang and GCC agree
about the mangling of __alignof__(type) and __alignof__(expr).

gcc/cp/ChangeLog:

PR c++/88115
* mangle.c (write_expression): Adjust the mangling of
__alignof__.

include/ChangeLog:

PR c++/88115
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_VENDOR_EXPR.

libiberty/ChangeLog:

PR c++/88115
* cp-demangle.c (d_dump, d_make_comp, d_expression_1)
(d_count_templates_scopes): Handle DEMANGLE_COMPONENT_VENDOR_EXPR.
(d_print_comp_inner): Likewise.
: Revert r11-4926
change.
: Likewise.
* testsuite/demangle-expected: Adjust __alignof__ tests.

gcc/testsuite/ChangeLog:

PR c++/88115
* g++.dg/cpp0x/alignof7.C: Adjust expected mangling.

[Bug c++/99844] New: ICE: unexpected expression 'B' of kind template_parm_index

2021-03-30 Thread hewillk at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99844

Bug ID: 99844
   Summary: ICE: unexpected expression 'B' of kind
template_parm_index
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: hewillk at gmail dot com
  Target Milestone: ---

Related to fixed PR 99745 and PR 99757.

https://godbolt.org/z/5qW5a1Mnq

template 
struct S {
  constexpr explicit(B) S() {}
};

constexpr S s;


:3:25: internal compiler error: unexpected expression 'B' of kind
template_parm_index
3 |   constexpr explicit(B) S() {}
  | ^
0x1cfb6a9 internal_error(char const*, ...)
???:0
0x9164c7 tsubst(tree_node*, tree_node*, int, tree_node*)
???:0
0x959fc9 instantiate_class_template(tree_node*)
???:0
0x77fbc7 start_decl_1(tree_node*, bool)
???:0
0x7a728f start_decl(cp_declarator const*, cp_decl_specifier_seq*, int,
tree_node*, tree_node*, tree_node**)
???:0
0x8e12ad c_parse_file()
???:0
0xa600a2 c_common_parse_file()
???:0
Please submit a full bug report,
with preprocessed source if appropriate.

[Bug c++/99815] [11 Regression] ICE: in placeholder_type_constraint_dependent_p, at cp/pt.c:28193

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99815

--- Comment #2 from CVS Commits  ---
The master branch has been updated by Patrick Palka :

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

commit r11-7920-g0bbf0edbfc782f8e4e416d5fbd1b52a515adb585
Author: Patrick Palka 
Date:   Tue Mar 30 22:54:37 2021 -0400

c++: placeholder type constraint and argument pack [PR99815]

When checking dependence of a placeholder type constraint, if the first
template argument of the constraint is an argument pack, we need to
expand it in order to properly separate the implicit 'auto' argument
from the rest.

gcc/cp/ChangeLog:

PR c++/99815
* pt.c (placeholder_type_constraint_dependent_p): Expand
argument packs to separate the first non-pack argument
from the rest.

gcc/testsuite/ChangeLog:

PR c++/99815
* g++.dg/cpp2a/concepts-placeholder5.C: New test.

[Bug tree-optimization/99823] -funroll-all-loops bugs when using contexpr variable

2021-03-30 Thread ustcw0ng at mail dot ustc.edu.cn via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99823

--- Comment #2 from apple  ---
(In reply to Richard Biener from comment #1)
> -funroll-all-loops applies to the RTL loop unroller, the GIMPLE level
> concludes:
> 
> Estimating sizes for loop 1
>  BB: 3, after_exit: 0
>   size:   1 _1 = MEM[(int (*) (int) &)__for_begin_21];
>   size:   5 _13 = _1 (s_20);
>   size:   1 __for_begin_14 = __for_begin_21 + 8;
>   size:   1 ivtmp_4 = ivtmp_11 - 1;
>Induction variable computation will be folded away.
>   size:   2 if (ivtmp_4 != 0)
>Exit condition will be eliminated in peeled copies.
>Exit condition will be eliminated in last copy.
>Constant conditional.
>  BB: 5, after_exit: 1
> size: 10-3, last_iteration: 10-3
>   Loop size: 10
>   Estimated size after unrolling: 14
> Not unrolling loop 1: contains call and code would grow.
> 
> so it concludes unrolling isn't profitable (but it would turn indirect into
> direct calls).

Anyway, I should mention here that clang can unroll it without this flag and
turn out constexpr.cpp equal to unroll.cpp. And you can try to insert "#pragma
GCC unroll 2“ the loop finally unrolled, even in this pragma, constexpr.cpp is
not equal to unroll.cpp. But this is technically another issue

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread JeanHeyd Meneide via Gcc
Dear Alexandre,

As stated here, shortly after I sent my message
(https://gcc.gnu.org/pipermail/gcc/2021-March/235197.html):

> Apologies, a correction here. I should have more carefully read
> it, but this paragraph:
>
> >  My problem is Dr. Richard M. Stallman stands credibly and
> > factually accused of Doxxing and GCC contributor/participant and
> > knowingly manipulating the project for his own personal reasons.
>
> This should be "RMS explicitly sanctioned, encouraged, and
> blessed the Doxxing of an individual". Apologies, he did not do the
> doxxing himself; this was a fat finger on my part. Please take that
> into account; the rest is accurate.

  Taking the correction into account, no, the accusation is not
even close to false. What you've presented here is your word ("This
accusation is outright false, beyond any possible doubt."), with a
shortened version of what happened and no evidence, and that does not
match the quoted responses from Stallman and other people who were
present in both the public mailing list discussion and the internal
mailing list. I was given quoted evidence of, after people being told
they were NOT allowed to attack people like this and go this far and
being banned by moderation, RMS taking explicit actions to UNDO that
moderation and explicitly, in the internal mailing list, state
(paraphrased): 'I have put a new moderator in. Have at it.'

 That the same individuals (who Stallman, again, explicitly and
knowingly) unshackled were then banned for continuing to do things
that were against the Community Guidelines and grossly inappropriate
(including the Doxxing). Stallman was not born yesterday, neither were
any of the moderators or contributors involved: Stallman deliberately
overturned moderator decisions and that decision went poorly after he
explicitly signaled to people that they should Go All Out.

 If you (or anyone else) have evidence to the contrary, logs,
screenshots, etc. that counteract what I know and I have already
received, then I would LOVE to be proven wrong and have ABSOLUTELY no
problem walking back every word I said and giving Richard M. Stallman
an apology and respect as well as apologizing to the mailing list for
believing to be led astray. If you feel the exact words should not be
shared publicly, you can e-mail me or message me privately; I have
honored everyone's right to privacy, and I will continue to do so.

 I must be explicitly clear here that the current body of evidence
gives me my current conviction. There is no planet, no galaxy, no
UNIVERSE, where someone who was already banned for going **way**
beyond acceptable behavior, and then brought back with their
punishment undone with the *explicit go-ahead to go forward* and a
*new moderator for that purpose*, would not take that as a signal to
be even nastier. If you are in a Leadership position and your thought
process here was "well, things will go better the second time" after
doing those actions, then you absolutely do not deserve to be in a
Leadership position, and you absolutely should not have stewardship
over me or my contributions. Especially if this is not your first time
on a mailing list and this is not your first time being a leader.

All my best,
JeanHeyd


[Bug c++/99843] New: Making a function a friend of a class will hide function constructor priority if has constructor(n) attribute

2021-03-30 Thread itirg1 at optusnet dot com.au via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99843

Bug ID: 99843
   Summary: Making a function a friend of a class will hide
function constructor priority if has constructor(n)
attribute
   Product: gcc
   Version: 9.3.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: itirg1 at optusnet dot com.au
  Target Milestone: ---

When declaring a function a friend of a class and that function uses the
__attribute__((constructor(priority))) attribute, the priority is lost. I have
only tested this on the arm-none-eabi-g++ on windows.

In the code below I made a quick demo of the problem, all of the initialisation
functions correctly have a section called .init_array.(5 digit priority number)
containing a pointer to the function except for the function that was made a
friend which is placed in .init_array which as a result the linker script will
place after the numbered ones.

F:\Test>arm-none-eabi-g++ --version
arm-none-eabi-g++ (GNU Arm Embedded Toolchain 9-2020-q3-update) 9.3.1 20200408
(release)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

F:\Test>cat testinit.cpp
// Initialization order test

void Init101(void) __attribute__((constructor(101)));
void Init101(void)
{
while(1);
}

static void Init102(void) __attribute__((constructor(102)));
static void Init102(void)
{
while(1);
}

namespace Something
{

void Init103(void) __attribute__((constructor(103)));
void Init103(void)
{
while(1);
}

static void Init104(void) __attribute__((constructor(104)));
static void Init104(void)
{
while(1);
}

class SomeClass
{
friend void Init105(void);

private:
int foo;
public:
int bar;
};

SomeClass * AClassPtr = nullptr;

void Init105(void) __attribute__((constructor(105)));
void Init105(void)
{
if (AClassPtr == nullptr)
{
AClassPtr = new SomeClass;
}
AClassPtr->foo = 219;
}

void Init106(void) __attribute__((constructor(106)));
void Init106(void)
{
while(1);
}

}

F:\Test>arm-none-eabi-g++ -mcpu=cortex-m0 -c -fno-exceptions testinit.cpp

F:\Test>arm-none-eabi-objdump -h -r -t testinit.o

testinit.o: file format elf32-littlearm

Sections:
Idx Name  Size  VMA   LMA   File off  Algn
  0 .text 004c      0034  2**2
  CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  1 .data       0080  2**0
  CONTENTS, ALLOC, LOAD, DATA
  2 .bss  0004      0080  2**2
  ALLOC
  3 .init_array.00101 0004      0080  2**2
  CONTENTS, ALLOC, LOAD, RELOC, DATA
  4 .init_array.00102 0004      0084  2**2
  CONTENTS, ALLOC, LOAD, RELOC, DATA
  5 .init_array.00103 0004      0088  2**2
  CONTENTS, ALLOC, LOAD, RELOC, DATA
  6 .init_array.00104 0004      008c  2**2
  CONTENTS, ALLOC, LOAD, RELOC, DATA
  7 .init_array   0004      0090  2**2
  CONTENTS, ALLOC, LOAD, RELOC, DATA
  8 .init_array.00106 0004      0094  2**2
  CONTENTS, ALLOC, LOAD, RELOC, DATA
  9 .comment  004d      0098  2**0
  CONTENTS, READONLY
 10 .ARM.attributes 002c      00e5  2**0
  CONTENTS, READONLY

SYMBOL TABLE:
 ldf *ABS*   testinit.cpp
 ld  .text   .text
 ld  .data   .data
 ld  .bss    .bss
 ld  .init_array.00101   .init_array.00101
0006 l F .text  0006 _ZL7Init102v
 ld  .init_array.00102   .init_array.00102
 ld  .init_array.00103   .init_array.00103
0012 l F .text  0006 _ZN9SomethingL7Init104Ev
 ld  .init_array.00104   .init_array.00104
 ld  .init_array .init_array
 ld  .init_array.00106   .init_array.00106
 ld  .comment    .comment
 ld  .ARM.attributes .ARM.attributes
 g F .text  0006 _Z7Init101v
000c g F .text  0006 _ZN9Something7Init103Ev
 g O .bss   0004 _ZN9Something9AClassPtrE
0018 g F .text 

[Bug tree-optimization/63660] -Wmaybe-uninitialized false positive (uninit pass limits)

2021-03-30 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63660

Martin Sebor  changed:

   What|Removed |Added

 CC||msebor at gcc dot gnu.org
  Known to fail|4.8.3, 4.9.2, 5.0   |10.2.0, 11.0, 4.8.4, 4.9.4,
   ||5.5.0, 6.4.0, 7.2.0, 8.3.0,
   ||9.1.0
   Last reconfirmed|2014-10-28 00:00:00 |2021-3-30

--- Comment #4 from Martin Sebor  ---
Reconfirmed with GCC 11.  The limits don't come into play here.  There is an
uninitialized use in a PHI in the IL:

   [local count: 1073741824]:
  # xj_35 = PHI 
  # .MEM_55 = PHI <.MEM_54(53), .MEM_77(21)>
  if (m_3 > 63)
goto ; [51.12%]
  else
goto ; [48.88%]
  ...
   [local count: 262422500]:
  # .MEM_88 = VDEF <.MEM_64>
  x_25->j = xj_35;

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Alexandre Oliva via Gcc
On Mar 30, 2021, JeanHeyd Meneide via Gcc  wrote:

>  My problem is Dr. Richard M. Stallman stands credibly and
> factually accused of Doxxing and GCC contributor/participant and
> knowingly manipulating the project for his own personal reasons.

This accusation is outright false, beyond any possible doubt.


A misguided person thought that reciprocating the doxxing against RMS
was a good way to defend him.  It's not.

The message went through because there is no censorship regime in effect.

RMS asked the unacceptable post to be deleted from the archives hosted
in GNU servers as soon as he learned about it.

I did not check whether that was done.  If you have any evidence that it
wasn't, please let me know.


That you got confirmation of a false claim from multiple developers you
talked to should now have you doubting other of their allegations.

If you look into them outside the attacking coalition, you *will* find
them to be built on just as flaky foundations.


-- 
Alexandre Oliva, happy hacker  https://FSFLA.org/blogs/lxo/
   Free Software Activist GNU Toolchain Engineer
Vim, Vi, Voltei pro Emacs -- GNUlius Caesar


[Bug c++/99831] ICE: in reshape_init, at cp/decl.c:6720

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99831

--- Comment #8 from Marek Polacek  ---
The problem is that post-r277865 in defaulted_late_check we call
synthesize_method here:

  if (kind == sfk_comparison)
{
  /* If the function was declared constexpr, check that the definition
 qualifies.  Otherwise we can define the function lazily.  */
  if (DECL_DECLARED_CONSTEXPR_P (fn) && !DECL_INITIAL (fn))
synthesize_method (fn);
  return;
}

and that results in garbage collection, which then frees {} that we created
when parsing the braced-list in string<"a">{}.  Then of course accessing the
freed data fails.

[Bug target/99718] [11 regression] ICE in new test case gcc.target/powerpc/pr98914.c for 32 bits

2021-03-30 Thread luoxhu at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99718

luoxhu at gcc dot gnu.org changed:

   What|Removed |Added

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

--- Comment #21 from luoxhu at gcc dot gnu.org ---
Fixed on mater.

[Bug c++/99445] [11 Regression] ICE in hashtab_chk_error, at hash-table.c:137 since r11-7011-g6e0a231a4aa2407b

2021-03-30 Thread jason at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99445

Jason Merrill  changed:

   What|Removed |Added

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

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Andrew Sutton via Gcc
Are you still responding to me? Your response reads like a thinly veiled
threat. Angry friends on a jihad? Sounds serious.

On Tue, Mar 30, 2021, 7:14 PM Christopher Dimech  wrote:

>
> I have some friends in this movement who have been getting rather angry
> recently.  There is a lot of anger in the world,
> in fact, in politics.  Our political movement is not the only one
> suffering from anger at the moment.  But some of my angry
> friends, have come to the conclusion that they’re on a jihad for free
> software.
>
> That way won’t work. If a campaign of coercive compliance is carried just
> a moment too far, willingness to use free
> software among rational people will decline to a point which is dangerous
> to freedom.
>
> -
> Christopher Dimech
> General Administrator - Naiad Informatics - GNU Project (Geocomputation)
> - Geophysical Simulation
> - Geological Subsurface Mapping
> - Disaster Preparedness and Mitigation
> - Natural Resource Exploration and Production
> - Free Software Advocacy
>
>
> *Sent:* Wednesday, March 31, 2021 at 9:55 AM
> *From:* "Andrew Sutton" 
> *To:* "Christopher Dimech" 
> *Cc:* "Joseph Myers" , "GCC Development" <
> gcc@gcc.gnu.org>, "Nathan Sidwell" 
> *Subject:* Re: Remove RMS from the GCC Steering Committee
> Sorry for the confusion, but was this response directed to me? It seems
> entirely unrelated to what I wrote.
>
> On Tue, Mar 30, 2021, 5:35 PM Christopher Dimech  wrote:
>
>>
>> Seriously.  When you want something to happen within society, it is
>> complex.  Just
>> because you want to push something - an ideology - you chant about it
>> every day,
>> does not mean things will go your way.
>>
>> Perhaps you can start donating money to Antifa!
>>
>>
>>
>>
>>
>> *Sent:* Wednesday, March 31, 2021 at 9:09 AM
>> *From:* "Andrew Sutton" 
>> *To:* "Christopher Dimech" 
>> *Cc:* "Joseph Myers" , "GCC Development" <
>> gcc@gcc.gnu.org>, "Nathan Sidwell" 
>> *Subject:* Re: Remove RMS from the GCC Steering Committee
>> I guess I'll add my two cents. It seems everyone else is...
>>
>> I'm not a maintainer or frequent contributor, but I did implement
>> concepts for C++, and I'd like to continue contributing, time permitting.
>> My company (as in, I own it) also does some work on GCC, implementing new
>> and experimental features like contracts, which we intend to upstream,
>> pending review. Some modules-related stuff too (I hope).
>>
>> Maybe my response is a little different because I'm writing as a business
>> owner and not a contributor.
>>
>> 
>>
>> I understand that RMS is not actually on the steering committee and not
>> an active contributor, and the SC web page should be updated to reflect
>> that if it hasn't already.
>>
>> I agree with Nathan.
>>
>> The SC needs to be forward-looking --- you can't steer effectively if
>> you're always looking in the rear-view mirror. My understanding is that GCC
>> put RMS behind it a long time ago. And for the better.
>>
>> Part of the SC's job is (or should be) considering recruitment and
>> retention for this community, including corporate participation. This idea
>> that we have to somehow revere a person who has managed to make himself
>> controversial for reasons entirely unrelated to his ideology on free
>> software actively works against both of those goals.
>>
>> Undeniably so. If RMS were actually in the SC, I would have serious
>> reservations about committing my employees time to this community. His
>> documented behavior readily violates my company's code of conduct. At best,
>> I'd risk burn out employees in a toxic environment. At worst, I could end
>> up as a defendant in a sexual harassment case. And this 100% not hyperbole.
>>
>> (Thanks to everyone who makes GCC a good community to participate in.)
>>
>> I think it's perfectly reasonable for GCC to acknowledge RMS' past
>> contributions, both ideological and code-wise, but it's time to move on.
>> Nothing good comes from lionizing a man who purportedly asked teenage girls
>> to eat candy out of his hand.
>>
>>
>>
>> On Tue, Mar 30, 2021, 2:14 PM Christopher Dimech via Gcc 
>> wrote:
>>
>>>
>>> > Sent: Wednesday, March 31, 2021 at 5:45 AM
>>> > From: "Joseph Myers" 
>>> > To: "JeanHeyd Meneide" 
>>> > Cc: "GCC Development" , "Nathan Sidwell" <
>>> nat...@acm.org>
>>> > Subject: Re: Remove RMS from the GCC Steering Committee
>>> >
>>> > On Tue, 30 Mar 2021, JeanHeyd Meneide via Gcc wrote:
>>> >
>>> > >  So, it boils down to this for me: either GCC is a place where
>>> all
>>> > > contributions are welcome, or GCC is a place of hypocrisy, where
>>> > > contributions are welcome except when Stallman (or someone else in a
>>> > > position of power) lobbies a non-technical, non-factual argument
>>> > > against you and jumps from their high tower to slam down on
>>> > > rank-and-file contributors and participants. You cannot have it both
>>> > > ways.
>>> >
>>> > All contributions are welcome.  One of the key functions of the SC is
>>> > actually 

[PATCH] rs6000: MMA test case ICEs using -O3

2021-03-30 Thread Peter Bergner via Gcc-patches
The mma_assemble_input_operand predicate does not accept reg+reg indexed
addresses which can lead to ICEs.  The problem is that the quad_address_p
function only accepts reg+offset addresses that are valid for quad word
accesses, but not reg+reg addresses which are also valid for quad word
accesses when dealing with vector types.  The solution used here is to
call memory_operand, which uses rs6000_legitimate_address_p to ensure
the address is valid.  For reg+offset addresses, it uses quad_address_p like
before, but for reg+reg addresses, it calls legitimate_indexed_address_p
addresses which fixes this specific ICE.

This passed bootstrap and regtesting on powerpc64le-linux with no regressions.
I also compiled some non-trivial DGEMM and SGEMM test cases that use our
MMA builtins and I don't see any generated code differences.

Ok for trunk?

The same bad test in mma_assemble_input_operand exists in GCC 10, but I
have been unable to get it to ICE there with this test case.  I assume
we still want to fix it there too?  If so, ok for GCC 10 after some trunk
burn in?

Peter


gcc/
PR target/99842
* config/rs6000/predicates.md:

gcc/testsuite/
PR target/99842
* g++.target/powerpc/pr99842.C: New.

diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index 859af75dfbd..e48c6eee19e 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -1171,8 +1171,7 @@
 (define_special_predicate "mma_assemble_input_operand"
   (match_test "(mode == V16QImode
&& (vsx_register_operand (op, mode)
-   || (MEM_P (op)
-   && quad_address_p (XEXP (op, 0), mode, false"))
+   || memory_operand (op, mode)))"))
 
 ;; Return 1 if this operand is valid for an MMA disassemble insn.
 (define_predicate "mma_disassemble_output_operand"
diff --git a/gcc/testsuite/g++.target/powerpc/pr99842.C 
b/gcc/testsuite/g++.target/powerpc/pr99842.C
new file mode 100644
index 000..d84de3b4570
--- /dev/null
+++ b/gcc/testsuite/g++.target/powerpc/pr99842.C
@@ -0,0 +1,188 @@
+/* PR target/99842 */
+/* { dg-require-effective-target power10_ok } */
+/* { dg-options "-O3 -mdejagnu-cpu=power10 -w" } */
+
+/* Verify we do not ICE on the following source.  */
+
+enum { a, b, c, d };
+template  struct e;
+template  struct e {
+  typedef h f;
+};
+template  struct ac;
+template  struct ac : ac {};
+template  struct l;
+template  class n;
+template  class o;
+template  class ag;
+template  class af;
+template  struct ad;
+template  struct an {
+  typedef n::ai, ac::aj> f;
+};
+template  struct am { typedef o f; };
+template ::ao,
+  typename = typename ac::av>
+struct ak;
+template  struct ak {
+  typedef typename am::f f;
+};
+template  struct aq;
+template  struct aq { typedef ar at; };
+template  ap bf(const typename ad::f *);
+template  ap aw(typename ad::f *ax) { return bf(ax); 
}
+typedef __attribute__((altivec(vector__))) double au;
+template <> struct ad { typedef double f; };
+template <> au bf(const double *ax) { return __builtin_vec_vsx_ld(0, ax); }
+template  struct az {};
+template  class o : public l {
+public:
+  typedef typename ac::ah ah;
+  template  al +=(const o &);
+};
+template  struct l {};
+template  struct ac> {
+  typedef typename ba::ah ah;
+  enum { ai, aj };
+};
+template 
+class af
+: public ak<
+  af, const n>,
+ n, bd>,
+  int, int>::f {};
+template  struct be;
+template  void bi(bj, bg bm, g) {
+  typename an::f bk(bm);
+}
+template  void bl(bj, bg bm, g bp) {
+  be::bn(a, bm, bp);
+}
+template  struct bo;
+class bs {
+public:
+  bs(double *, int);
+  double ()(int, int) { return bq[br]; }
+  template  bw bt(int i, int j) {
+double  = operator()(i, j);
+return aw();
+  }
+  double *bq;
+  int br;
+};
+class ca : public bs {
+public:
+  ca(double *by, int bz) : bs(by, bz) {}
+};
+template  class ce : public am::f {
+protected:
+  template  void cb(l) {
+af, const n>,
+   n>
+cc;
+bl(0, cc, az());
+  }
+  template  void ch(long);
+  template  void ch(l cf) { cb(cf); }
+};
+template 
+struct ac> {
+  typedef cg ah;
+  typedef int av;
+};
+template 
+class n : public ce> {
+public:
+  template  n(ab p) { n::template ch(p); }
+};
+template  struct ac> {
+  typedef ba ao;
+  typedef typename e::f ah;
+  typedef typename aq::av, typename ac::av, bc>::at av;
+};
+template  class cm;
+template 
+class ag
+: public cm::av, typename ac::av, int>::at> 
{
+};
+template 
+class cm : public ak, n>>::f {};
+template 
+template 
+al ::operator+=(const o &) {
+  af, const n>,
+ n>
+  co;
+  bi(0, co, int());
+}
+enum { cp };
+template  struct cq;
+template  struct cr {
+  enum { q };
+  enum { ae = cq::at };
+};
+template <> struct cq {
+  enum { at = d };
+};
+struct t {
+  template  static void bn(ba, bb, s) {
+typedef typename bb::ah x;
+x u;
+bo::bn(0, 0, ca(0, 0), ca(, 1), 0, 0, 0);
+  }
+};

Remove RMS from the GCC Steering Committee

2021-03-30 Thread Ville Voutilainen via Gcc
Giacomo wrote:
>Stallman cannot betray Free Software AND get away with it.
>So to me (and to many others) Stallman is a sort of a living warranty.

That's fine. He  doesn't need to be in the GCC SC to do that.
He can continue to provide guidance on the spirit of Free Software
without having an SC position, or any official leadership position.
The people in the GCC SC are very reasonable people; I have worked
with some of them, and they will listen to reasonable arguments.
RMS doesn't have veto powers anyway, and doesn't need them.

The proposed removal from the SC doesn't prevent RMS from
giving the aforementioned guidance in any way, nor does it even
make it any more difficult. In fact, that removal shouldn't have
any effect on his ability to give such guidance, nor does it actually
have any effect on what the consequences of his guidance will be.

The warranty you speak of does not boil down to a particular individual
being there in the SC. That's by RMS's own design; the copyright and the license
give you that warranty, not the SC presence of any single person.
And a removal from an SC doesn't equal the removal from the set
of people who can meaningfully contribute. That is certainly, I would
think, not the intent of anyone who has spoken in favor of the removal.

There is certainly a fair amount of heat in this discussion. Whether
the proposed removal has the effects it seeks, I don't know. But
I don't buy the surreptitious suggestions that the proposed removal
somehow spells doom for the continued availability of GCC as Free Software,
or for the spirit of Free Software in general. In my anecdotal case,
it doesn't. I have fairly good reasons to think that it doesn't spell such
doom for quite many other contributors to these projects, some far
more frequently active than me.

I am, Yours Most Sincerely,
Ville Voutilainen
an occasional libstdc++ contributor
a less-frequently occasional g++ contributor


[Bug target/99842] MMA test case ICEs using -O3

2021-03-30 Thread bergner at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99842

Peter Bergner  changed:

   What|Removed |Added

 Target||powerpc64le-linux
 Ever confirmed|0   |1
  Known to fail||11.0
   Assignee|unassigned at gcc dot gnu.org  |bergner at gcc dot 
gnu.org
   Last reconfirmed||2021-03-30
 Status|UNCONFIRMED |ASSIGNED
   Target Milestone|--- |11.0

--- Comment #1 from Peter Bergner  ---
Mine.  The problem is that the mma_assemble_input_operand predicate is
rejecting valid reg+reg indexed addresses in the MEMs in the above rtl.  The
predicate is calling quad_address_p() which accepts reg+offset addresses (with
constrained offset values), but doesn't allow reg+reg addresses, which are
valid.

Replacing the MEM_P() && quad_address_p() test with a call to memory_operand()
fixes the ICE, since it calls down to rs6000_legitimate_address_p(), which
calls quad_address_p() to validate reg+offset addresses, but also allows
reg+reg addresses.  I'll submit a patch with that fix.

[Bug target/99842] New: MMA test case ICEs using -O3

2021-03-30 Thread bergner at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99842

Bug ID: 99842
   Summary: MMA test case ICEs using -O3
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
  Assignee: unassigned at gcc dot gnu.org
  Reporter: bergner at gcc dot gnu.org
  Target Milestone: ---

A reduced test case from Eigen using MMA builtins ICEs using -O3:

bergner@pike:~/gcc/BUGS/$ g++ -w -S -O3 -mcpu=power10 bug.ii 
bug.ii: In function ‘n< , , m, ,
,  >::n(ab) [with ab = af, const n >, n >; cg = double; int
 = -1; int m = 1; int  = 3; int  = 0; int
 = 1]’:
bug.ii:90:59: error: could not split insn
   90 |   template  n(ab p) { n::template ch(p); }
  |   ^
(insn:TI 28 335 29 (set (reg:OO 32 0 [orig:125 _28 ] [125])
(unspec:OO [
(mem:V16QI (plus:DI (reg/f:DI 26 26 [orig:223 MEM 
[(struct ca *)_253] ] [223])
(reg:DI 27 27 [222])) [0 MEM  [(void *)_25]+0 S16
A8])
(mem:V16QI (plus:DI (reg/f:DI 26 26 [orig:223 MEM 
[(struct ca *)_253] ] [223])
(reg:DI 27 27 [222])) [0 MEM  [(void *)_25]+0 S16
A8])
] UNSPEC_MMA_ASSEMBLE)) 2080 {*vsx_assemble_pair}
 (expr_list:REG_EQUIV (mem/c:OO (plus:DI (reg/f:DI 31 31 [217])
(const_int 160 [0xa0])) [6 MEM[(__vector_pair *)_173]+0 S32
A256])
(nil)))
during RTL pass: final
bug.ii:90:59: internal compiler error: in final_scan_insn_1, at final.c:3092
0x101fa5fb _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
/home/bergner/gcc/gcc-fsf-mainline-base/gcc/rtl-error.c:108
0x10a2b5cb final_scan_insn_1
/home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:3092
0x10a2c613 final_scan_insn(rtx_insn*, _IO_FILE*, int, int, int*)
/home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:3171
0x10a2c9b3 final_1
/home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:2022
0x10a2dc57 rest_of_handle_final
/home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:4676
0x10a2dc57 execute
/home/bergner/gcc/gcc-fsf-mainline-base/gcc/final.c:4754

[Bug c++/99790] [8/9/10 Regression] internal compiler error: in expand_expr_real_2 since r7-3811

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99790

--- Comment #7 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

https://gcc.gnu.org/g:7cdd30b43a63832d6f908b2dd64bd19a0817cd7b

commit r10-9626-g7cdd30b43a63832d6f908b2dd64bd19a0817cd7b
Author: Jakub Jelinek 
Date:   Tue Mar 30 18:15:32 2021 +0200

c++: Fix ICE on PTRMEM_CST in lambda in inline var initializer [PR99790]

The following testcase ICEs (since the addition of inline var support),
because the lambda contains PTRMEM_CST but finish_function is called for
the
lambda quite early during parsing it (from finish_lambda_function) when
the containing class is still incomplete.  That means that during
genericization cplus_expand_constant keeps the PTRMEM_CST unmodified, but
later nothing lowers it when the class is finalized.
Using sizeof etc. on the class in such contexts is rejected by both g++ and
clang++, and when the PTRMEM_CST appears e.g. in static var initializers
rather than in functions, we handle it correctly because
c_parse_final_cleanups
-> lower_var_init will handle those cplus_expand_constant when all classes
are already finalized.

The following patch fixes it by calling cplus_expand_constant again during
gimplification, as we are now unconditionally unit at a time, I'd think
everything that could be completed will be before we start gimplification.

2021-03-30  Jakub Jelinek  

PR c++/99790
* cp-gimplify.c (cp_gimplify_expr): Handle PTRMEM_CST.

* g++.dg/cpp1z/pr99790.C: New test.

[Bug tree-optimization/99777] [11 Regression] ICE in build2, at tree.c:4869 with -O3

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99777

--- Comment #6 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

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

commit r10-9625-gafe9a630eae114665e77402ea083201c9d406e99
Author: Jakub Jelinek 
Date:   Mon Mar 29 12:35:32 2021 +0200

fold-const: Fix ICE in extract_muldiv_1 [PR99777]

extract_muldiv{,_1} is apparently only prepared to handle scalar integer
operations, the callers ensure it by only calling it if the divisor or
one of the multiplicands is INTEGER_CST and because neither multiplication
nor division nor modulo are really supported e.g. for pointer types,
nullptr
type etc.  But the CASE_CONVERT handling doesn't really check if it isn't
a cast from some other type kind, so on the testcase we end up trying to
build MULT_EXPR in POINTER_TYPE which ICEs.  A few years ago Marek has
added ANY_INTEGRAL_TYPE_P checks to two spots, but the code uses
TYPE_PRECISION which means something completely different for vector types,
etc.
So IMNSHO we should just punt on conversions from non-integrals or
non-scalar integrals.

2021-03-29  Jakub Jelinek  

PR tree-optimization/99777
* fold-const.c (extract_muldiv_1): For conversions, punt on casts
from
types other than scalar integral types.

* g++.dg/torture/pr99777.C: New test.

[Bug debug/99334] Generated DWARF unwind table issue while on instructions where rbp is pointing to callers stack frame

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99334

--- Comment #11 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

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

commit r10-9624-gf5df18504c1790413f293bfb50d40faa7f1ea860
Author: Jakub Jelinek 
Date:   Sat Mar 27 00:20:42 2021 +0100

dwarf2cfi: Defer queued register saves some more [PR99334]

On the testcase in the PR with
-fno-tree-sink -O3 -fPIC -fomit-frame-pointer -fno-strict-aliasing
-mstackrealign
we have prologue:
 <_func_with_dwarf_issue_>:
   0:   4c 8d 54 24 08  lea0x8(%rsp),%r10
   5:   48 83 e4 f0 and$0xfff0,%rsp
   9:   41 ff 72 f8 pushq  -0x8(%r10)
   d:   55  push   %rbp
   e:   48 89 e5mov%rsp,%rbp
  11:   41 57   push   %r15
  13:   41 56   push   %r14
  15:   41 55   push   %r13
  17:   41 54   push   %r12
  19:   41 52   push   %r10
  1b:   53  push   %rbx
  1c:   48 83 ec 20 sub$0x20,%rsp
and emit
 0014  CIE
  Version:   1
  Augmentation:  "zR"
  Code alignment factor: 1
  Data alignment factor: -8
  Return address column: 16
  Augmentation data: 1b
  DW_CFA_def_cfa: r7 (rsp) ofs 8
  DW_CFA_offset: r16 (rip) at cfa-8
  DW_CFA_nop
  DW_CFA_nop

0018 0044 001c FDE cie=
pc=..01d5
  DW_CFA_advance_loc: 5 to 0005
  DW_CFA_def_cfa: r10 (r10) ofs 0
  DW_CFA_advance_loc: 9 to 000e
  DW_CFA_expression: r6 (rbp) (DW_OP_breg6 (rbp): 0)
  DW_CFA_advance_loc: 13 to 001b
  DW_CFA_def_cfa_expression (DW_OP_breg6 (rbp): -40; DW_OP_deref)
  DW_CFA_expression: r15 (r15) (DW_OP_breg6 (rbp): -8)
  DW_CFA_expression: r14 (r14) (DW_OP_breg6 (rbp): -16)
  DW_CFA_expression: r13 (r13) (DW_OP_breg6 (rbp): -24)
  DW_CFA_expression: r12 (r12) (DW_OP_breg6 (rbp): -32)
...
unwind info for that.  The problem is when async signal
(or stepping through in the debugger) stops after the pushq %rbp
instruction and before movq %rsp, %rbp, the unwind info says that
caller's %rbp is saved there at *%rbp, but that is not true, caller's
%rbp is either still available in the %rbp register, or in *%rsp,
only after executing the next instruction - movq %rsp, %rbp - the
location for %rbp is correct.  So, either we'd need to temporarily
say:
  DW_CFA_advance_loc: 9 to 000e
  DW_CFA_expression: r6 (rbp) (DW_OP_breg7 (rsp): 0)
  DW_CFA_advance_loc: 3 to 0011
  DW_CFA_expression: r6 (rbp) (DW_OP_breg6 (rbp): 0)
  DW_CFA_advance_loc: 10 to 001b
or to me it seems more compact to just say:
  DW_CFA_advance_loc: 12 to 0011
  DW_CFA_expression: r6 (rbp) (DW_OP_breg6 (rbp): 0)
  DW_CFA_advance_loc: 10 to 001b

I've tried instead to deal with it through REG_FRAME_RELATED_EXPR
from the backend, but that failed miserably as explained in the PR,
dwarf2cfi.c has some rules (Rule 16 to Rule 19) that are specific to the
dynamic stack realignment using drap register that only the i386 backend
does right now, and by using REG_FRAME_RELATED_EXPR or REG_CFA* notes we
can't emulate those rules.  The following patch instead does the deferring
of the hard frame pointer save rule in dwarf2cfi.c Rule 18 handling and
emits it on the (set hfp sp) assignment that must appear shortly after it
and adds assertion that it is the case.

The difference before/after the patch on the assembly is:
--- pr99334.s~  2021-03-26 15:42:40.881749380 +0100
+++ pr99334.s   2021-03-26 17:38:05.729161910 +0100
@@ -11,8 +11,8 @@ _func_with_dwarf_issue_:
andq$-16, %rsp
pushq   -8(%r10)
pushq   %rbp
-   .cfi_escape 0x10,0x6,0x2,0x76,0
movq%rsp, %rbp
+   .cfi_escape 0x10,0x6,0x2,0x76,0
pushq   %r15
pushq   %r14
pushq   %r13
i.e. does just what we IMHO need, after pushq %rbp %rbp
still contains parent's frame value and so the save rule doesn't
need to be overridden there, ditto at the start of the next insn
before the side-effect took effect, and we override it only after
it when %rbp already has the right value.

If some other target adds dynamic stack realignment in the future and
the offset 0 case wouldn't be true there, the code can be adjusted so that
it works on all the drap architectures, I'm pretty sure the code would
need other adjustments too.

For the rule 18 and for the (set hfp sp) after it we already have asserts
for 

[Bug c++/99705] [10 Regression] ICE in expand_expr_real_1 since r10-3661

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99705

--- Comment #6 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

https://gcc.gnu.org/g:1c82b47137ab4212b7618da3458d2949b2dff1a3

commit r10-9623-g1c82b47137ab4212b7618da3458d2949b2dff1a3
Author: Jakub Jelinek 
Date:   Fri Mar 26 09:35:26 2021 +0100

c++: Fix ICE with nsdmi [PR99705]

When adding P0784R7 constexpr new support, we still didn't have
P1331R2 implemented and so I had to change also build_vec_delete_1
- instead of having uninitialized tbase temporary later initialized
by MODIFY_EXPR I've set the DECL_INITIAL for it - because otherwise
it would be rejected during constexpr evaluation which didn't like
uninitialized vars.  Unfortunately, that change broke the following
testcase.
The problem is that these temporaries (not just tbase but tbase was
the only one with an initializer) are created during NSDMI parsing
and current_function_decl is NULL at that point.  Later when we
clone body of constructors, auto_var_in_fn_p is false for those
(as they have NULL DECL_CONTEXT) and so they aren't duplicated,
and what is worse, the DECL_INITIAL isn't duplicated either nor processed,
and during expansion we ICE because the code from DECL_INITIAL of that
var refers to the abstract constructor's PARM_DECL (this) rather than
the actual constructor's one.

So, either we can just revert those build_vec_delete_1 changes (as done
in the second patch - in attachment), or, as the first patch does, we can
copy the temporaries during bot_manip like we copy the temporaries of
TARGET_EXPRs.  To me that looks like a better fix because e.g. if
break_out_of_target_exprs is called for the same NSDMI multiple times,
sharing the temporaries looks just wrong to me.  If the temporaries
are declared as BIND_EXPR_VARS of some BIND_EXPR (which is the case
of the tbase variable built by build_vec_delete_1 and is the only way
how the DECL_INITIAL can be walked by *walk_tree*), then we need to
copy it also in the BIND_EXPR BIND_EXPR_VARS chain, other temporaries
(those that don't need DECL_INITIAL) often have just DECL_EXPR and no
corresponding BIND_EXPR.
Note, ({ }) are rejected in nsdmis, so all we run into are temporaries
the FE creates artificially.

2021-03-26  Jakub Jelinek  

PR c++/99705
* tree.c (bot_manip): Remap artificial automatic temporaries
mentioned
in DECL_EXPR or in BIND_EXPR_VARS.

* g++.dg/cpp0x/new5.C: New test.

[Bug c++/99745] ICE when parameter pack not expanded in bit field

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99745

--- Comment #5 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

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

commit r10-9622-gf8780caf07340f5d5e55cf5fb1b2be07cabab1ea
Author: Jakub Jelinek 
Date:   Thu Mar 25 21:06:09 2021 +0100

c++: Diagnose bare parameter packs in bitfield widths [PR99745]

The following invalid tests ICE because we don't diagnose (and drop) bare
parameter packs in bitfield widths.

2021-03-25  Jakub Jelinek  

PR c++/99745
* decl2.c (grokbitfield): Diagnose bitfields containing bare
parameter
packs and don't set DECL_BIT_FIELD_REPRESENTATIVE in that case.

* g++.dg/cpp0x/variadic181.C: New test.

[Bug c++/99650] ICE when trying to form reference to void in structured binding

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99650

--- Comment #6 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

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

commit r10-9621-gd5e379e3fe19362442b5d0ac608fb8ddf67fecd3
Author: Jakub Jelinek 
Date:   Tue Mar 23 10:23:42 2021 +0100

c++: Diagnose references to void in structured bindings [PR99650]

We ICE on the following testcase, because std::tuple_element<...,...>::type
is void and for structured bindings we therefore need to create
void & or void && which is invalid.  We created such REFERENCE_TYPE and
later ICEd in the middle-end.
The following patch fixes it by diagnosing that.

2021-03-23  Jakub Jelinek  

PR c++/99650
* decl.c (cp_finish_decomp): Diagnose void initializers when
using tuple_element and get.

* g++.dg/cpp1z/decomp55.C: New test.

[Bug debug/99388] Invalid debug info for __fp16

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99388

--- Comment #4 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

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

commit r10-9620-gd3dd3703f1d42b14c88b91e51a2a775fe00a2974
Author: Jakub Jelinek 
Date:   Sun Mar 21 17:27:39 2021 +0100

dwarf2out: Fix debug info for 2 byte floats [PR99388]

Aarch64, ARM and a couple of other architectures have 16-bit floats,
HFmode.
As can be seen e.g. on
void
foo (void)
{
  __fp16 a = 1.0;
  asm ("nop");
  a = 2.0;
  asm ("nop");
  a = 3.0;
  asm ("nop");
}
testcase, GCC mishandles this on the dwarf2out.c side by assuming all
floating point types have sizes in multiples of 4 bytes, so what GCC emits
is it says that e.g. the DW_OP_implicit_value will be 2 bytes but then
doesn't emit anything and so anything emitted after it is treated by
consumers as the value and then they get out of sync.
real_to_target which insert_float uses indeed fills it that way, but
putting
into an array of long 32 bits each time, but for the half floats it puts
everything into the least significant 16 bits of the first long no matter
what endianity host or target has.

The following patch fixes it.  With the patch the -g -O2 -dA output changes
(in a cross without .uleb128 support):
.byte   0x9e// DW_OP_implicit_value
.byte   0x2 // uleb128 0x2
+   .2byte  0x3c00  // fp or vector constant word 0
.byte   0x7 // DW_LLE_start_end (*.LLST0)
.8byte  .LVL1   // Location list begin address (*.LLST0)
.8byte  .LVL2   // Location list end address (*.LLST0)
.byte   0x4 // uleb128 0x4; Location expression size
.byte   0x9e// DW_OP_implicit_value
.byte   0x2 // uleb128 0x2
+   .2byte  0x4000  // fp or vector constant word 0
.byte   0x7 // DW_LLE_start_end (*.LLST0)
.8byte  .LVL2   // Location list begin address (*.LLST0)
.8byte  .LFE0   // Location list end address (*.LLST0)
.byte   0x4 // uleb128 0x4; Location expression size
.byte   0x9e// DW_OP_implicit_value
.byte   0x2 // uleb128 0x2
+   .2byte  0x4200  // fp or vector constant word 0
.byte   0   // DW_LLE_end_of_list (*.LLST0)

Bootstrapped/regtested on x86_64-linux, aarch64-linux and
armv7hl-linux-gnueabi, ok for trunk?

I fear the CONST_VECTOR case is still broken, while HFmode elements of
vectors
should be fine (it uses eltsize of the element sizes) and likewise SFmode
could
be fine, DFmode vectors are emitted as two 32-bit ints regardless of
endianity
and I'm afraid it can't be right on big-endian.  But I haven't been able to
create a testcase that emits a CONST_VECTOR, for e.g. unused vector vars
with constant operands we emit CONCATN during expansion and thus ...
DW_OP_*piece for each element of the vector and for
DW_TAG_call_site_parameter we give up (because we handle CONST_VECTOR only
in loc_descriptor, not mem_loc_descriptor).

2021-03-21  Jakub Jelinek  

PR debug/99388
* dwarf2out.c (insert_float): Change return type from void to
unsigned, handle GET_MODE_SIZE (mode) == 2 and return element size.
(mem_loc_descriptor, loc_descriptor, add_const_value_attribute):
Adjust callers.

[Bug c/99588] variable set but not used warning on static _Atomic assignment

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99588

--- Comment #7 from CVS Commits  ---
The releases/gcc-10 branch has been updated by Jakub Jelinek
:

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

commit r10-9619-gb1fc1f1c4b2e9005c40ed476b067577da2d2ce84
Author: Jakub Jelinek 
Date:   Fri Mar 19 22:54:31 2021 +0100

c: Fix up -Wunused-but-set-* warnings for _Atomics [PR99588]

As the following testcases show, compared to -D_Atomic= case we have many
-Wunused-but-set-* warning false positives.
When an _Atomic variable/parameter is read, we call mark_exp_read on it in
convert_lvalue_to_rvalue, but build_atomic_assign does not.
For consistency with the non-_Atomic case where we mark_exp_read the lhs
for lhs op= ... but not for lhs = ..., this patch does that too.
But furthermore we need to pattern match the trees emitted by _Atomic
store,
so that _Atomic store itself is not marked as being a variable read, but
when the result of the store is used, we mark it.

2021-03-19  Jakub Jelinek  

PR c/99588
* c-typeck.c (mark_exp_read): Recognize what build_atomic_assign
with modifycode NOP_EXPR produces and mark the _Atomic var as read
if found.
(build_atomic_assign): For modifycode of NOP_EXPR, use
COMPOUND_EXPRs
rather than STATEMENT_LIST.  Otherwise call mark_exp_read on lhs.
Set TREE_SIDE_EFFECTS on the TARGET_EXPR.

* gcc.dg/Wunused-var-5.c: New test.
* gcc.dg/Wunused-var-6.c: New test.

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Joseph Myers
On Tue, 30 Mar 2021, Giacomo Tesio wrote:

> That being said (and for full disclosure), I also consider his return to
> the FSF fair, because the shitstorm that caused his resign two years
> ago was built on top of a severe misrepresentation of his words, as
> described here https://jorgemorais.gitlab.io/justice-for-rms/ and
> admitted also by the people arguing against his return (see the
> various edits at https://rms-open-letter.github.io/appendix ).

I explicitly stated in my comments that my agreement with Nathan's 
conclusion is *not* based on the views RMS has expressed, whether on that 
occasion or on any other.

> But I'd want Stallman in GCC's SC for a totally different reason:
> 
> On Tue, 30 Mar 2021 18:50:52 +0200 Martin Jambor wrote:
> 
> > Nobody suggested that GCC would be relicensed and certainly not to a
> > non-free license.  If you decide to contribute your port upstream, it
> > will be safe with us, regardless of who will or will not be on the
> > steering committee

The GCC SC doesn't have the power to relicense GCC; that lies with the 
FSF.  We can correct clear licensing mistakes where the underlying 
licensing policy is already established (e.g. if someone forgets to put 
the runtime exception in a file in a target library) and there are certain 
cases with delegated relicensing powers (e.g. copying documentation for 
target hooks between GFDL and GPL files).  But in general relicensing 
depends on the FSF and that doesn't depend on who is on the SC.

(The original owner of code who assigned it to the FSF can also license 
copies of the code they contributed (not anyone else's changes to that 
code) under different licenses if they so wish, in accordance with the 
terms of the standard assignment agreements.  The standard assignment 
agreements also prevent the FSF from distributing the code under 
proprietary terms.)

> On Tue, 30 Mar 2021 17:45:24 + Joseph Myers wrote:
> > One of the key functions of the SC is actually saying no to RMS.
> 
> My bad experiences with Google and SFC makes me ask: "about what?"

Any time he comes up with an idea, technical or otherwise, that doesn't 
make sense (he's too far removed from actually following GCC development 
or use to be able to judge that effectively himself).  If an idea makes 
sense, of course we'll let him know that we'll consider patches.  (It's 
only likely to be in very routine cases that someone on the SC just makes 
the requested change themselves, e.g. if he points out somewhere in the 
GCC documentation saying "Linux" that should be "GNU/Linux" in accordance 
with GNU conventions.)

-- 
Joseph S. Myers
jos...@codesourcery.com


[committed] analyzer: remove old decl of region::dump_to_pp

2021-03-30 Thread David Malcolm via Gcc-patches
This was made redundant in the GCC 11 rewrite of state
(808f4dfeb3a95f50f15e71148e5c1067f90a126d).

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to trunk as d0b7c821754e2b16e9e84d877082105799adf238.

gcc/analyzer/ChangeLog:
* region.h (region::dump_to_pp): Remove old decl.
---
 gcc/analyzer/region.h | 5 -
 1 file changed, 5 deletions(-)

diff --git a/gcc/analyzer/region.h b/gcc/analyzer/region.h
index ea24b38b6a1..175a82a0cb2 100644
--- a/gcc/analyzer/region.h
+++ b/gcc/analyzer/region.h
@@ -128,11 +128,6 @@ public:
  pretty_printer *pp) const;
   label_text get_desc (bool simple=true) const;
 
-  void dump_to_pp (const region_model ,
-  pretty_printer *pp,
-  const char *prefix,
-  bool is_last_child) const;
-
   virtual void dump_to_pp (pretty_printer *pp, bool simple) const = 0;
   void dump (bool simple) const;
 
-- 
2.26.2



[committed] analyzer: only call get_diagnostic_tree when it's needed

2021-03-30 Thread David Malcolm via Gcc-patches
impl_sm_context::get_diagnostic_tree could be expensive, and
I find myself needing to put a breakpoint on it to debug
PR analyzer/99771, so only call it if we're about to use
the result.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to trunk as r11-7917-g0f9aa35c79a0fe195d5076375b5794246cf44819.

gcc/analyzer/ChangeLog:
* sm-file.cc (fileptr_state_machine::on_stmt): Only call
get_diagnostic_tree if the result will be used.
* sm-malloc.cc (malloc_state_machine::on_stmt): Likewise.
(malloc_state_machine::on_deallocator_call): Likewise.
(malloc_state_machine::on_realloc_call): Likewise.
(malloc_state_machine::on_realloc_call): Likewise.
* sm-sensitive.cc
(sensitive_state_machine::warn_for_any_exposure): Likewise.
* sm-taint.cc (taint_state_machine::on_stmt): Likewise.
---
 gcc/analyzer/sm-file.cc  |  2 +-
 gcc/analyzer/sm-malloc.cc| 10 +++---
 gcc/analyzer/sm-sensitive.cc |  8 +---
 gcc/analyzer/sm-taint.cc |  4 +++-
 4 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/gcc/analyzer/sm-file.cc b/gcc/analyzer/sm-file.cc
index 7a81c8ff632..d64c313e31c 100644
--- a/gcc/analyzer/sm-file.cc
+++ b/gcc/analyzer/sm-file.cc
@@ -344,7 +344,6 @@ fileptr_state_machine::on_stmt (sm_context *sm_ctxt,
if (is_named_call_p (callee_fndecl, "fclose", call, 1))
  {
tree arg = gimple_call_arg (call, 0);
-   tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
 
sm_ctxt->on_transition (node, stmt, arg, m_start, m_closed);
 
@@ -356,6 +355,7 @@ fileptr_state_machine::on_stmt (sm_context *sm_ctxt,
 
if (sm_ctxt->get_state (stmt, arg) == m_closed)
  {
+   tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
sm_ctxt->warn (node, stmt, arg,
   new double_fclose (*this, diag_arg));
sm_ctxt->set_next_state (stmt, arg, m_stop);
diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc
index ef250c80915..ae03b068a88 100644
--- a/gcc/analyzer/sm-malloc.cc
+++ b/gcc/analyzer/sm-malloc.cc
@@ -1674,11 +1674,11 @@ malloc_state_machine::on_stmt (sm_context *sm_ctxt,
   if (TREE_CODE (op) == MEM_REF)
{
  tree arg = TREE_OPERAND (op, 0);
- tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
 
  state_t state = sm_ctxt->get_state (stmt, arg);
  if (unchecked_p (state))
{
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
  sm_ctxt->warn (node, stmt, arg,
 new possible_null_deref (*this, diag_arg));
  const allocation_state *astate = as_a_allocation_state (state);
@@ -1686,12 +1686,14 @@ malloc_state_machine::on_stmt (sm_context *sm_ctxt,
}
  else if (state == m_null)
{
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
  sm_ctxt->warn (node, stmt, arg,
 new null_deref (*this, diag_arg));
  sm_ctxt->set_next_state (stmt, arg, m_stop);
}
  else if (freed_p (state))
{
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
  const allocation_state *astate = as_a_allocation_state (state);
  sm_ctxt->warn (node, stmt, arg,
 new use_after_free (*this, diag_arg,
@@ -1738,7 +1740,6 @@ malloc_state_machine::on_deallocator_call (sm_context 
*sm_ctxt,
   if (argno >= gimple_call_num_args (call))
 return;
   tree arg = gimple_call_arg (call, argno);
-  tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
 
   state_t state = sm_ctxt->get_state (call, arg);
 
@@ -1752,6 +1753,7 @@ malloc_state_machine::on_deallocator_call (sm_context 
*sm_ctxt,
   if (!astate->m_deallocators->contains_p (d))
{
  /* Wrong allocator.  */
+ tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
  pending_diagnostic *pd
= new mismatching_deallocation (*this, diag_arg,
astate->m_deallocators,
@@ -1766,6 +1768,7 @@ malloc_state_machine::on_deallocator_call (sm_context 
*sm_ctxt,
   else if (state == d->m_freed)
 {
   /* freed -> stop, with warning.  */
+  tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
   sm_ctxt->warn (node, call, arg,
 new double_free (*this, diag_arg, d->m_name));
   sm_ctxt->set_next_state (call, arg, m_stop);
@@ -1773,6 +1776,7 @@ malloc_state_machine::on_deallocator_call (sm_context 
*sm_ctxt,
   else if (state == m_non_heap)
 {
   /* non-heap -> stop, with warning.  */
+  tree diag_arg = sm_ctxt->get_diagnostic_tree (arg);
   sm_ctxt->warn (node, call, arg,
 new free_of_non_heap (*this, diag_arg,
   d->m_name));
@@ -1806,7 +1810,6 @@ 

[committed] analyzer testsuite: fix typo

2021-03-30 Thread David Malcolm via Gcc-patches
gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/symbolic-1.c: Fix typo.
---
 gcc/testsuite/gcc.dg/analyzer/symbolic-1.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcc/testsuite/gcc.dg/analyzer/symbolic-1.c 
b/gcc/testsuite/gcc.dg/analyzer/symbolic-1.c
index 9d228e6331c..feab9ce3a2d 100644
--- a/gcc/testsuite/gcc.dg/analyzer/symbolic-1.c
+++ b/gcc/testsuite/gcc.dg/analyzer/symbolic-1.c
@@ -1,6 +1,6 @@
 #include "analyzer-decls.h"
 
-/* The example from store2.h  */
+/* The example from store.h  */
 
 void test_1 (char a, char b, char c, char d, char e, char f,
 int i, int j)
-- 
2.26.2



Re: [PATCH v9] Practical improvement to libgcc complex divide

2021-03-30 Thread Patrick McGehearty via Gcc-patches

Thank you for your interest in this project.

On 3/27/2021 6:18 PM, Bernhard Reutner-Fischer wrote:

On Fri, 26 Mar 2021 23:14:41 +
Patrick McGehearty via Gcc-patches  wrote:


Changes in Version 9 since Version 8:

Revised code to meet gcc coding standards in all files, especially
 with respect to adding spaces around operations and removing
 excess () in #define macro definitions.

Did you gather cycle counter diffs for current against new for the
normal and some edge cases?

I don't see additional value in looking at cycle counters in addition
to the timing information I presented. I prefer wall clock time to
cycle counters, perhaps because cycle counters are less reliably
implemented on some platforms (that's a separate discussion, though).
Every platform will have different counters and different timing.

Let me run through a rough operation count analysis of the double
precision case. I will also postulate instruction latencies
that might be typical of a recent processor. Real processors
will different somewhat but not by large amounts.

The current method uses Smith's method. Showing half of that method:
  if (fabs(c) < fabs(d))
    {
  ratio = c / d;
  denom = (c * ratio) + d;
  xx = ((a * ratio) + b) / denom;
  yy = ((b * ratio) - a) / denom;
    }


It requires:
two fabs computations (typically 1 cycle each)
one floating point compare (typically 2 cycles)
1 branch decision (50-50 prediction reliabilty)
    (1 cycle if predicted, 9 cycles if not predicted; ave=5)
3 multiplys, 3 divides, 3 add/subtract operations
  (assume 5 cycle latency for add/mul and 15 cycle for divide)
    (75 cycles)
Total: 84 cycles (typical average, old method)

I omit the NAN analysis as that is unchanged.

The cost of the new method is data dependent.
First, assume all scaling tests are false and ratio does not underflow.
Further, assume that data is consistently in those ranges, to allow
all branch predictions except the first to be predicted.
I'll also assume we have an excellent branch predictor mechanism
that can handle predicting

Then we have:
5 additional fabs, and 4 additional compare and branches (all predicted)
and one || operations for 18 additional cycles.
[This optimistic count assumes fabs(a,b) > RMIN, allowing
us to bypass the fabs < RMAX2 tests.

New total: 84+18 = 102 (optimistic average, new method)

If we can't bypass the fabs < RMAX2 tests, we need to add
four more fabs, and four && operations, and four compare
operations for 12 more cycles.
Possible total: 84+18+12 = 114

Finally, if we hit a scaling operation, then we have four
multiply operations for an additional 20 cycles plus
we've mispredicted the branch for 9 more.
114+28 = 144 cycles.
This analysis is not particularly accurate. It does not account for
some architectures having several floating point units or for
speculative execution hiding latency or many other variations in
computer architecture. Still, its good enough for a ballpark estimate
that says the typical case will be around 15-25% slower and the most
extreme cases will be around 70% slower.

When we look at the patch writeup, I report that for double precision,
the "moderate set" which represents the typical case, we see 4% to 24%
measured slowdown. The "full set" which represents having a
substantial number of values which might cause branch predictors to go
wrong as costing 38% to 56% overhead. Apparently my 'back of the
envelope' analysis above is not too far off.

Oh, I failed to cover the case where fabs(ratio) < RMIN.
That happens in the full set about 1-2% of the time.
It requires two additional divide operations for an extra
30 cycles, plus maybe 10 cycles for the mispredicted branch.
That might bump up the worst case to be about double the
normal case. That's acceptable when you consider that slow
path prevents the code from returning a completely wrong result.

As a quick aside, the test for ratio underflowing reduces the error
rate by a factor of 4 from 1.70% to 0.35% in the full exponent range
data set with about half the total overhead of the new method. Adding
all the other tests and scaling code reduces errors larger than 12
bits to roughly 1 in 10 million and 18 bits or larger to roughly 1 in
100 million. Those remaining errors are due to the issue of
subtraction cancellation, which is a harder problem than avoiding
underflow/overflow issues.




Can you please share data for -Os between current and your proposed new?

As for data for -Os for current and proposed new, it's not very interesting.
There are no differences as complex divide is not inlined by gcc.
Instead, there is a simple call to __divdc3.
I checked for inlining with gcc 4.8, gcc8.3, and gcc11.0.1 as well as with
a compiler that has my code changes.

If one uses -fcx-fortran-rules then Smith's method for complex divide is 
inlined with -Os.
If one uses -fcx-limited-range then the naive method for complex divide 
is inlined with -Os.

The new code does not change 

[Bug analyzer/99771] Analyzer diagnostics should not say ""

2021-03-30 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99771

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

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

commit r11-7917-g0f9aa35c79a0fe195d5076375b5794246cf44819
Author: David Malcolm 
Date:   Fri Mar 26 13:26:15 2021 -0400

analyzer: only call get_diagnostic_tree when it's needed

impl_sm_context::get_diagnostic_tree could be expensive, and
I find myself needing to put a breakpoint on it to debug
PR analyzer/99771, so only call it if we're about to use
the result.

gcc/analyzer/ChangeLog:
* sm-file.cc (fileptr_state_machine::on_stmt): Only call
get_diagnostic_tree if the result will be used.
* sm-malloc.cc (malloc_state_machine::on_stmt): Likewise.
(malloc_state_machine::on_deallocator_call): Likewise.
(malloc_state_machine::on_realloc_call): Likewise.
(malloc_state_machine::on_realloc_call): Likewise.
* sm-sensitive.cc
(sensitive_state_machine::warn_for_any_exposure): Likewise.
* sm-taint.cc (taint_state_machine::on_stmt): Likewise.

[Bug rtl-optimization/96264] [10 Regression] wrong code with -Os -fno-forward-propagate -fschedule-insns -fno-tree-ter

2021-03-30 Thread vmakarov at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96264

--- Comment #17 from Vladimir Makarov  ---
(In reply to Peter Bergner from comment #16)
> (In reply to seurer from comment #15)
> > It still fails on gcc 10, though
> 
> Vlad, can we get this backported to GCC 10?  Maybe in time for GCC 10.3?

Nobody complained about this patch since its commit.  So I believe we can
backport it and the patch should be safe for GCC 10 branch.

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Giacomo Tesio
Hi everybody, thanks for your feedbacks.

I've to say I'm a bit confused, but maybe we have different sources and
experience so we have different perspective on the matter.

Let's start with something I want to clarify:

On Tue, 30 Mar 2021 13:07:07 -0400 JeanHeyd Meneide wrote:

>  You state it here and many others say it throughout the thread
> that Stallman is the only reason they contribute to GCC, or similar
> Free Software projects. This deeply concerns me

I'm sorry, but apperently I was not clear.

I do NOT follow RMS as a prophet or something. He does NOT "lead" me.
We do not agree on several relevant political issues (even some
important one related to Free Software!) and I find statements like
https://stallman.org/notes/2016-jul-oct.html#31_October_2016_(Down's_syndrome)
plain disgusting.

So I'm NOT, in any way, a RMS fanboy.

That being said (and for full disclosure), I also consider his return to
the FSF fair, because the shitstorm that caused his resign two years
ago was built on top of a severe misrepresentation of his words, as
described here https://jorgemorais.gitlab.io/justice-for-rms/ and
admitted also by the people arguing against his return (see the
various edits at https://rms-open-letter.github.io/appendix ).


But I'd want Stallman in GCC's SC for a totally different reason:

On Tue, 30 Mar 2021 18:50:52 +0200 Martin Jambor wrote:

> Nobody suggested that GCC would be relicensed and certainly not to a
> non-free license.  If you decide to contribute your port upstream, it
> will be safe with us, regardless of who will or will not be on the
> steering committee

When I joined the Harvey project they were all fun and welcoming.
When I asked how and where to write my copyright statement, I was
answered by the seasoned and well known Google's engineer that a few
years later completely removed my name from the project without
removing the contributions.

Harvey is copylefted too (GPLv2) and as you know, this sort of
behaviour would trigger GPL termination, but Harvey is part of
Software Freedom Conservancy and the violation of my copyright
likely occurred during the working hours of the above engineer.

So they were the good guys and the most powerful guys, together.
I had no hope in a US court (and I'm Italian and... let say "not rich").


They taught me a valuable lesson, though.

In the long run, even the good guys betray your trust if they have a
reason to and they think they can get away with that.


Stallman cannot betray Free Software AND get away with it.

So to me (and to many others) Stallman is a sort of a living warranty.

Unless, obviously, you have reasons that I ignore to not trust him on
his loyalty to the Free Software vision and movement. Do you have any?

For example when I read

On Tue, 30 Mar 2021 17:45:24 + Joseph Myers wrote:
> One of the key functions of the SC is actually saying no to RMS.

My bad experiences with Google and SFC makes me ask: "about what?"


So if you (all) have good reason to think that RMS could betray
Free Software, well... THAT would be a good argument to put on the
table!


But note that to many of us, GCC is not just a great compiler suite!
More importantly, it's a Free Software compiler suite.

This means that its core value, its main "selling point", is not how
cool it is, but how it is designed, developed and distributed to
maximise software freedom.

IOW, I can imagine scenarios where some features should NOT be
introduced to reach this political goal which is MORE important
than the technical goal of compiler suite

To this aim, I'd prefer to see RMS in the GCC's SC.
Because to me GCC is not just "open source", it's not just matter of
seeing the source: it's Free Software, it should be designed and
developed TO maximize software freedom!

That's a fundamental difference that still stay between Free Software
and Open Source.


On Tue, 30 Mar 2021 18:56:02 +0200 Markus Böck wrote:

> At least I would hope that most countries are in pursuit
> or see value in having an inclusive environment where no one has to
> feel treated unfairly due to either their gender, race or other
> things.

I want to clarify that I hope this too. Really. 
And in fact thousands of people of very different races and genders
worldwide expressed their support for RMS and FSF by signing
https://rms-support-letter.github.io/
Some of them are my close friends, but I will not, obviously, doxe them.

However you can find very variegate people arguing on the web for RMS
from all of genders and races. Just a few valuable examples are 
Leah Rowe https://mobile.twitter.com/n4of7/status/1374844604101591047 and
Mary Kate Fain https://mobile.twitter.com/mkay_fain/status/1374766567544737793


On Tue, 30 Mar 2021 18:56:02 +0200 Markus Böck wrote:

> I am also of the opinion that legally wrong does not equal morally
> wrong. RMS does not have to have committed a crime for the developers
> of GCC, the SC or whoever, to feel like he is not representing their
> values as a 

[Bug c++/99833] [8/9/10/11 Regression] structured binding + if init + generic lambda = internal compiler error

2021-03-30 Thread ppalka at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99833

Patrick Palka  changed:

   What|Removed |Added

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

Re: [PATCH] c++: placeholder type constraint and argument packs [PR99815]

2021-03-30 Thread Jason Merrill via Gcc-patches

On 3/30/21 4:35 PM, Patrick Palka wrote:

When checking dependence of a placeholder type constraint, if the first
template argument of the constraint is an argument pack, we need to
expand it so that we properly separate the implicit 'auto' argument from
the rest.

Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for
trunk?


OK.


gcc/cp/ChangeLog:

PR c++/99815
* pt.c (placeholder_type_constraint_dependent_p): Expand
argument packs to separate the first non-pack argument
from the rest.

gcc/testsuite/ChangeLog:

PR c++/99815
* g++.dg/cpp2a/concepts-placeholder5.C: New test.
---
  gcc/cp/pt.c   |  5 +++
  .../g++.dg/cpp2a/concepts-placeholder5.C  | 32 +++
  2 files changed, 37 insertions(+)
  create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C

diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index a056ecefd1d..dc6f2f37f9b 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -28189,6 +28189,11 @@ placeholder_type_constraint_dependent_p (tree t)
tree id = unpack_concept_check (t);
tree args = TREE_OPERAND (id, 1);
tree first = TREE_VEC_ELT (args, 0);
+  if (ARGUMENT_PACK_P (first))
+{
+  args = expand_template_argument_pack (args);
+  first = TREE_VEC_ELT (args, 0);
+}
gcc_checking_assert (TREE_CODE (first) == WILDCARD_DECL
   || is_auto (first));
for (int i = 1; i < TREE_VEC_LENGTH (args); ++i)
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C 
b/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C
new file mode 100644
index 000..eaea41a36eb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C
@@ -0,0 +1,32 @@
+// PR c++/99815
+// { dg-do compile { target c++20 } }
+
+template 
+struct is_same { static constexpr bool value = false; };
+
+template 
+struct is_same { static constexpr bool value = true; };
+
+template 
+concept C = is_same::value; // { dg-error "wrong number" }
+
+template  void f() {
+  C auto x = 0; // { dg-error "constraints" }
+}
+
+template void f(); // { dg-bogus "" }
+template void f(); // { dg-message "required from here" }
+template void f<>(); // { dg-message "required from here" }
+template void f(); // { dg-message "required from here" }
+
+template  void g() {
+  C auto x = 0; // { dg-error "constraints" }
+}
+
+template void g<>(); // { dg-bogus "" }
+template void g(); // { dg-message "required from here" }
+
+template  void h() {
+  C auto x = 0; // { dg-error "constraints" }
+  C auto y = 0;
+}





[Bug c++/99833] [8/9/10/11 Regression] structured binding + if init + generic lambda = internal compiler error

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99833

--- Comment #3 from Marek Polacek  ---
Reduced:

namespace std {
template  struct integral_constant {
  static constexpr int value = __v;
};
template  struct tuple_size;
template  struct tuple_element;
template 
using __tuple_element_t = typename tuple_element<__i, _Tp>::type;
template  class tuple;
template  tuple(_UTypes...) -> tuple<_UTypes...>;
template  class tuple<_T1, _T2> {
public:
  template  tuple(_U1, _U2);
};
template 
struct tuple_size>
: integral_constant {};
template 
struct tuple_element<__i, tuple<_Head, _Tail...>>
: tuple_element<__i - 1, tuple<_Tail...>> {};
template 
struct tuple_element<0, tuple<_Head, _Tail...>> {
  typedef _Head type;
};
template 
__tuple_element_t<__i, tuple<_Elements...>> get(tuple<_Elements...>);
} // namespace std
void f(auto x) {
  [&](auto...) {
auto y = std::tuple{"", x};
if constexpr (auto [_, z] = y; requires { z; })
  ;
  }();
}
auto main() -> int { f(2); }

[Bug c++/99833] [8/9/10/11 Regression] structured binding + if init + generic lambda = internal compiler error

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99833

Marek Polacek  changed:

   What|Removed |Added

  Build|-std=c++20  |
 CC||ppalka at gcc dot gnu.org

--- Comment #2 from Marek Polacek  ---
Started with r11-372.  So may be a P1 :(.

Re: [PATCH] c++: Adjust mangling of __alignof__ [PR88115]

2021-03-30 Thread Jason Merrill via Gcc-patches

On 3/30/21 3:17 PM, Patrick Palka wrote:

We currently mangle __alignof__ as a vendor extended operator,
but that's problematic for the reasons mentioned in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88115#c6.

This patch changes the mangling of __alignof__ to instead use the
new "vendor extended expression" syntax that's proposed in
https://github.com/itanium-cxx-abi/cxx-abi/issues/112.  Clang does
the same thing already, so after this patch both GCC and Clang agree
about the mangling of __alignof__(type) and __alignof__(expr).

Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for
trunk?


OK.


gcc/cp/ChangeLog:

PR c++/88115
* mangle.c (write_expression): Adjust the mangling of
__alignof__.

include/ChangeLog:

PR c++/88115
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_VENDOR_EXPR.

libiberty/ChangeLog:

PR c++/88115
* cp-demangle.c (d_dump, d_make_comp, d_expression_1)
(d_count_templates_scopes): Handle DEMANGLE_COMPONENT_VENDOR_EXPR.
(d_print_comp_inner): Likewise.
: Revert r11-4926
change.
: Likewise.
* testsuite/demangle-expected: Adjust __alignof__ mangling
tests.

gcc/testsuite/ChangeLog:

PR c++/88115
* g++.dg/cpp0x/alignof7.C: Adjust expected mangling.
---
  gcc/cp/mangle.c   |  8 ++---
  gcc/testsuite/g++.dg/cpp0x/alignof7.C |  4 +--
  include/demangle.h|  3 ++
  libiberty/cp-demangle.c   | 47 +++
  libiberty/testsuite/demangle-expected |  4 +--
  5 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 0a9e5aa79a0..57ce9a6710f 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -3124,11 +3124,9 @@ write_expression (tree expr)
  if (abi_version_at_least (15))
{
  /* We used to mangle __alignof__ like alignof.  */
- write_string ("v111__alignof__");
- if (TYPE_P (TREE_OPERAND (expr, 0)))
-   write_type (TREE_OPERAND (expr, 0));
- else
-   write_expression (TREE_OPERAND (expr, 0));
+ write_string ("u11__alignof__");
+ write_template_arg (TREE_OPERAND (expr, 0));
+ write_char ('E');
  return;
}
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignof7.C 
b/gcc/testsuite/g++.dg/cpp0x/alignof7.C
index a4d7f24a4d7..2369b879392 100644
--- a/gcc/testsuite/g++.dg/cpp0x/alignof7.C
+++ b/gcc/testsuite/g++.dg/cpp0x/alignof7.C
@@ -18,5 +18,5 @@ template void f4(std::size_t);
  
  // { dg-final { scan-assembler "_Z2f1IiEvDTatT_E" } }

  // { dg-final { scan-assembler "_Z2f2IiEvDTaztlT_EE" } }
-// { dg-final { scan-assembler "_Z2f3IiEvDTv111__alignof__T_E" } }
-// { dg-final { scan-assembler "_Z2f4IiEvDTv111__alignof__tlT_EE" } }
+// { dg-final { scan-assembler "_Z2f3IiEvDTu11__alignof__T_EE" } }
+// { dg-final { scan-assembler "_Z2f4IiEvDTu11__alignof__XtlT_" } }
diff --git a/include/demangle.h b/include/demangle.h
index 23b47265d94..b45234e6887 100644
--- a/include/demangle.h
+++ b/include/demangle.h
@@ -408,6 +408,9 @@ enum demangle_component_type
   number which involves neither modifying the mangled string nor
   allocating a new copy of the literal in memory.  */
DEMANGLE_COMPONENT_LITERAL_NEG,
+  /* A vendor's builtin expression.  The left subtree holds the name of
+ the type, and the right subtree is a template argument list.  */
+  DEMANGLE_COMPONENT_VENDOR_EXPR,
/* A libgcj compiled resource.  The left subtree is the name of the
   resource.  */
DEMANGLE_COMPONENT_JAVA_RESOURCE,
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index d3e798455cc..a528b7b5ed3 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -815,6 +815,9 @@ d_dump (struct demangle_component *dc, int indent)
  case DEMANGLE_COMPONENT_LITERAL_NEG:
printf ("negative literal\n");
break;
+case DEMANGLE_COMPONENT_VENDOR_EXPR:
+  printf ("vendor expression\n");
+  break;
  case DEMANGLE_COMPONENT_JAVA_RESOURCE:
printf ("java resource\n");
break;
@@ -976,6 +979,7 @@ d_make_comp (struct d_info *di, enum 
demangle_component_type type,
  case DEMANGLE_COMPONENT_TRINARY_ARG1:
  case DEMANGLE_COMPONENT_LITERAL:
  case DEMANGLE_COMPONENT_LITERAL_NEG:
+case DEMANGLE_COMPONENT_VENDOR_EXPR:
  case DEMANGLE_COMPONENT_COMPOUND_NAME:
  case DEMANGLE_COMPONENT_VECTOR_TYPE:
  case DEMANGLE_COMPONENT_CLONE:
@@ -3345,6 +3349,7 @@ d_unresolved_name (struct d_info *di)
  ::= st 
  ::= 
::= 
+   ::= u  * E # vendor extended 
expression
  ::= 
  
 ::= 

@@ -3425,6 +3430,15 @@ d_expression_1 (struct d_info *di)
return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST,
  

Re: [PATCH] dwarf2out: Fix up ranges for -gdwarf-5 -gsplit-dwarf [PR99490]

2021-03-30 Thread Jason Merrill via Gcc-patches

On 3/12/21 3:20 AM, Jakub Jelinek wrote:

Hi!

For -gdwarf-4 -gsplit-dwarf we used to emit .debug_ranges section
(so in the binaries/shared libraries) with DW_AT_ranges from skeleton
units as well as .debug_info.dwo pointing to it through DW_FORM_sec_offset
(and DW_AT_GNU_ranges_base pointing into section, not sure for what
reason exactly).
When DWARF5 support was being added, we've started using .debug_rnglists
section, added DW_AT_rnglists_base to the DW_TAG_skeleton_unit, kept
DW_AT_ranges with DW_FORM_sec_offset in the skeleton and switched
over to DW_FORM_rnglistx for DW_AT_ranges in .debug_info.dwo.
But the DWARF5 spec actually means for the ranges section (at least
everything for those DW_AT_ranges in .debug_info.dwo) to sit
in .debug_rnglists.dwo section next to the .debug_info.dwo, rather than
having consumers look it up in the binary/shared library instead.
Based on some discussions in the DWARF discuss mailing list:
http://lists.dwarfstd.org/pipermail/dwarf-discuss-dwarfstd.org/2021-March/thread.html#4765
this patch mostly follows what LLVM emits for that right now:
1) small .debug_rnglists section (when needed) just to cover the
skeleton DW_AT_ranges (if present); the content of the section
uses the Split DWARFy DW_RLE_* codes with addrx encodings where
possible
2) DW_AT_ranges in the skeleton uses DW_FORM_sec_offset (difference
from LLVM which uses DW_FORM_rnglistx, which makes it larger
and ambiguous)
3) DW_AT_rnglists_base attribute is gone from the skeleton (again,
unlike LLVM where it is just confusing what exactly it means because
it is inherited; it would make sense if we emitted DW_FORM_rnglistx
in non-split DWARF, but unless ranges are shared, I'm afraid we'd
make DWARF larger with fewer relocations by that)
4) usually big .debug_rnglists.dwo section again with using DW_RLE_*x*
where possible
5) DW_AT_ranges with DW_FORM_rnglistx from .debug_info.dwo referring to
that .debug_rnglists.dwo ranges

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2021-03-12  Jakub Jelinek  

PR debug/99490
* dwarf2out.c (debug_ranges_dwo_section): New variable.
(DW_RANGES_IDX_SKELETON): Define.
(struct dw_ranges): Add begin_entry and end_entry members.
(DEBUG_DWO_RNGLISTS_SECTION): Define.
(add_ranges_num): Adjust r initializer for addition of *_entry
members.
(add_ranges_by_labels): For -gsplit-dwarf and force_direct,
set idx to DW_RANGES_IDX_SKELETON.
(index_rnglists): Don't set r->idx if it is equal to
DW_RANGES_IDX_SKELETON.  Initialize r->begin_entry and
r->end_entry for -gsplit-dwarf if those will be needed by
output_rnglists.
(output_rnglists): Add DWO argument.  If true, switch to
debug_ranges_dwo_section rather than debug_ranges_section.
Adjust l1/l2 label indexes.  Only output the offset table when
dwo is true and don't include in there the skeleton range
entry if present.  For -gsplit-dwarf, skip ranges that belong
to the other rnglists section.  Change return type from void
to bool and return true if there are any range entries for
the other section.  For dwarf_split_debug_info use
DW_RLE_startx_endx, DW_RLE_startx_length and DW_RLE_base_addressx
entries instead of DW_RLE_start_end, DW_RLE_start_length and
DW_RLE_base_address.
(init_sections_and_labels): Initialize debug_ranges_dwo_section
if -gsplit-dwarf and DWARF >= 5.  Adjust ranges_section_label
and range_base_label indexes.
(dwarf2out_finish): Call index_rnglists earlier before finalizing
.debug_addr.  Never emit DW_AT_rnglists_base attribute.  For
-gsplit-dwarf and DWARF >= 5 call output_rnglists up to twice
with different dwo arguments.
(dwarf2out_c_finalize): Clear debug_ranges_dwo_section.

--- gcc/dwarf2out.c.jj  2021-03-10 17:36:37.037537129 +0100
+++ gcc/dwarf2out.c 2021-03-11 12:50:00.402418873 +0100
@@ -171,6 +171,7 @@ static GTY(()) section *debug_line_str_s
  static GTY(()) section *debug_str_dwo_section;
  static GTY(()) section *debug_str_offsets_section;
  static GTY(()) section *debug_ranges_section;
+static GTY(()) section *debug_ranges_dwo_section;
  static GTY(()) section *debug_frame_section;
  
  /* Maximum size (in bytes) of an artificially generated label.  */

@@ -3152,11 +3153,17 @@ struct GTY(()) dw_ranges {
/* If this is positive, it's a block number, otherwise it's a
   bitwise-negated index into dw_ranges_by_label.  */
int num;
+  /* If idx is equal to DW_RANGES_IDX_SKELETON, it should be emitted
+ into .debug_rnglists section rather than .debug_rnglists.dwo
+ for -gsplit-dwarf and DWARF >= 5.  */
+#define DW_RANGES_IDX_SKELETON ((1U << 31) - 1)
/* Index for the range list for DW_FORM_rnglistx.  */
unsigned int idx : 31;
/* True if this range might be 

[Bug c++/99427] [modules] in system headers: non-constant condition for static assertion

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99427

Marek Polacek  changed:

   What|Removed |Added

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

--- Comment #5 from Marek Polacek  ---
Fixed then.  Thanks for checking!

[Bug c++/99227] [meta] [modules] Bugs relating to header-units of STL header files

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99227
Bug 99227 depends on bug 99427, which changed state.

Bug 99427 Summary: [modules] in system headers: non-constant condition for 
static assertion
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99427

   What|Removed |Added

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

[PATCH] c++: placeholder type constraint and argument packs [PR99815]

2021-03-30 Thread Patrick Palka via Gcc-patches
When checking dependence of a placeholder type constraint, if the first
template argument of the constraint is an argument pack, we need to
expand it so that we properly separate the implicit 'auto' argument from
the rest.

Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for
trunk?

gcc/cp/ChangeLog:

PR c++/99815
* pt.c (placeholder_type_constraint_dependent_p): Expand
argument packs to separate the first non-pack argument
from the rest.

gcc/testsuite/ChangeLog:

PR c++/99815
* g++.dg/cpp2a/concepts-placeholder5.C: New test.
---
 gcc/cp/pt.c   |  5 +++
 .../g++.dg/cpp2a/concepts-placeholder5.C  | 32 +++
 2 files changed, 37 insertions(+)
 create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C

diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index a056ecefd1d..dc6f2f37f9b 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -28189,6 +28189,11 @@ placeholder_type_constraint_dependent_p (tree t)
   tree id = unpack_concept_check (t);
   tree args = TREE_OPERAND (id, 1);
   tree first = TREE_VEC_ELT (args, 0);
+  if (ARGUMENT_PACK_P (first))
+{
+  args = expand_template_argument_pack (args);
+  first = TREE_VEC_ELT (args, 0);
+}
   gcc_checking_assert (TREE_CODE (first) == WILDCARD_DECL
   || is_auto (first));
   for (int i = 1; i < TREE_VEC_LENGTH (args); ++i)
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C 
b/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C
new file mode 100644
index 000..eaea41a36eb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-placeholder5.C
@@ -0,0 +1,32 @@
+// PR c++/99815
+// { dg-do compile { target c++20 } }
+
+template 
+struct is_same { static constexpr bool value = false; };
+
+template 
+struct is_same { static constexpr bool value = true; };
+
+template 
+concept C = is_same::value; // { dg-error "wrong number" }
+
+template  void f() {
+  C auto x = 0; // { dg-error "constraints" }
+}
+
+template void f(); // { dg-bogus "" }
+template void f(); // { dg-message "required from here" }
+template void f<>(); // { dg-message "required from here" }
+template void f(); // { dg-message "required from here" }
+
+template  void g() {
+  C auto x = 0; // { dg-error "constraints" }
+}
+
+template void g<>(); // { dg-bogus "" }
+template void g(); // { dg-message "required from here" }
+
+template  void h() {
+  C auto x = 0; // { dg-error "constraints" }
+  C auto y = 0;
+}
-- 
2.31.1.133.g84d06cdc06



[Bug c++/99427] [modules] in system headers: non-constant condition for static assertion

2021-03-30 Thread alexander.lelyakin at googlemail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99427

--- Comment #4 from Alexander Lelyakin  ---
Not reproduced anymore

Re: [PATCH, rs6000 V3] Update "prefix" attribute for Power10 [PR99133]

2021-03-30 Thread Segher Boessenkool
Hi!

On Tue, Mar 30, 2021 at 02:38:32PM -0500, Pat Haugen wrote:
> Update prefixed attribute for Power10.
> 
> This patch creates a new attribute, "maybe_prefixed", which is used to mark
> those instructions that may have a prefixed form. The existing "prefixed"
> attribute is now used to mark all instructions that are prefixed form.

It doesn't yet set maybe_prefixed on most insns that will need it?  What
does that mean for say movsi that can be plwz?

> +;; Whether this insn has a prefixed form and a non-prefixed form.
> +(define_attr "maybe_prefixed" "no,yes"
> +  (if_then_else (eq_attr "type" "load,fpload,vecload,store,fpstore,vecstore,
> +  integer,add")
> + (const_string "yes")
> + (const_string "no")))

Ah.  Okay :-)  It probably is better to set the maybe_prefixed attribute
explicitly, but this will do for now.  Status quo and all that.

I don't see how the "add" and "integer" cases can work...

>  (define_attr "prefixed" "no,yes"
>(cond [(ior (match_test "!TARGET_PREFIXED")
> -   (match_test "!NONJUMP_INSN_P (insn)"))
> +   (match_test "!NONJUMP_INSN_P (insn)")
> +   (eq_attr "maybe_prefixed" "no"))
>(const_string "no")

It's a cond, so you can have separate cases instead of ior, if that
reads better (the generated compiler code will be equivalent).  It can
help if you want to place some comments, for example ;-)


Okay for trunk.  Thank you!


Segher


[Bug c++/99833] [8/9/10/11 Regression] structured binding + if init + generic lambda = internal compiler error

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99833

Marek Polacek  changed:

   What|Removed |Added

   Last reconfirmed||2021-03-30
   Keywords||ice-on-valid-code
   Target Milestone|--- |8.5
 Status|UNCONFIRMED |NEW
Summary|structured binding + if |[8/9/10/11 Regression]
   |init + generic lambda = |structured binding + if
   |internal compiler error |init + generic lambda =
   ||internal compiler error
 CC||mpolacek at gcc dot gnu.org
 Ever confirmed|0   |1

--- Comment #1 from Marek Polacek  ---
Confirmed.

$ xg++-7 -c 99833.C -std=c++17 -fconcepts
# ok
$ xg++-8 -c 99833.C -std=c++17 -fconcepts
99833.C: In instantiation of ‘f(auto:1&&) [with auto:1 = int]:: [with auto:2 = {}]’:
99833.C:8:10:   required from ‘auto f(auto:1&&) [with auto:1 = int]’
99833.C:12:13:   required from here
99833.C:6:32: internal compiler error: in tsubst_decomp_names, at cp/pt.c:16673
 if constexpr (auto [_, z] = y; requires { z; })
^~
0xa44cc6 tsubst_decomp_names
/home/mpolacek/src/gcc8/gcc/cp/pt.c:16673
0xa46041 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:16837
0xa4b103 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:17512
0xa46e75 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:16961
0xa45012 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:16714
0xa475be tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:17014
0xa475be tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:17014
0xa45012 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:16714
0xa475be tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:17014
0xa68a40 instantiate_decl(tree_node*, bool, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:24161
0x90b1e3 maybe_instantiate_decl
/home/mpolacek/src/gcc8/gcc/cp/decl2.c:5211
0x90bb8a mark_used(tree_node*, int)
/home/mpolacek/src/gcc8/gcc/cp/decl2.c:5312
0x814c71 build_over_call
/home/mpolacek/src/gcc8/gcc/cp/call.c:8286
0x804e91 build_op_call_1
/home/mpolacek/src/gcc8/gcc/cp/call.c:4589
0x805053 build_op_call(tree_node*, vec**, int)
/home/mpolacek/src/gcc8/gcc/cp/call.c:4618
0xa9a847 finish_call_expr(tree_node*, vec**, bool,
bool, int)
/home/mpolacek/src/gcc8/gcc/cp/semantics.c:2567
0xa503bf tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:18594
0xa4b422 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:17530
0xa4512d tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:16728
0xa45012 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
/home/mpolacek/src/gcc8/gcc/cp/pt.c:16714

[PATCH] aarch64: Fix up *add3_poly_1 [PR99813]

2021-03-30 Thread Jakub Jelinek via Gcc-patches
Hi!

As mentioned in the PR, Uai constraint stands for
aarch64_sve_scalar_inc_dec_immediate
while Uav for
aarch64_sve_addvl_addpl_immediate.
Both *add3_aarch64 and *add3_poly_1 patterns use
  * return aarch64_output_sve_scalar_inc_dec (operands[2]);
  * return aarch64_output_sve_addvl_addpl (operands[2]);
in that order, but the former with Uai,Uav order, while the
latter with Uav,Uai instead.  This patch swaps the constraints
so that they match the output.

Bootstrapped/regtested on aarch64-linux, ok for trunk?

2021-03-30  Jakub Jelinek  
Richard Sandiford  

PR target/99813
* config/aarch64/aarch64.md (*add3_poly_1): Swap Uai and Uav
constraints on operands[2] and similarly 0 and rk constraints
on operands[1] corresponding to that.

* g++.target/aarch64/sve/pr99813.C: New test.

--- gcc/config/aarch64/aarch64.md.jj2021-02-25 23:07:07.851319165 +0100
+++ gcc/config/aarch64/aarch64.md   2021-03-30 11:13:35.994077470 +0200
@@ -2050,8 +2050,8 @@
   [(set
 (match_operand:GPI 0 "register_operand" "=r,r,r,r,r,r,")
 (plus:GPI
- (match_operand:GPI 1 "register_operand" "%rk,rk,rk,rk,rk,0,rk")
- (match_operand:GPI 2 "aarch64_pluslong_or_poly_operand" 
"I,r,J,Uaa,Uav,Uai,Uat")))]
+ (match_operand:GPI 1 "register_operand" "%rk,rk,rk,rk,0,rk,rk")
+ (match_operand:GPI 2 "aarch64_pluslong_or_poly_operand" 
"I,r,J,Uaa,Uai,Uav,Uat")))]
   "TARGET_SVE && operands[0] != stack_pointer_rtx"
   "@
   add\\t%0, %1, %2
--- gcc/testsuite/g++.target/aarch64/sve/pr99813.C.jj   2021-03-30 
11:22:13.430290522 +0200
+++ gcc/testsuite/g++.target/aarch64/sve/pr99813.C  2021-03-30 
11:22:55.526819721 +0200
@@ -0,0 +1,27 @@
+// PR target/99813
+/* { dg-do assemble { target aarch64_asm_sve_ok } } */
+/* { dg-options "-O3 -march=armv8.2-a+sve -fvect-cost-model=unlimited 
-fno-tree-dominator-opts -mtune=cortex-a72" } */
+
+long a, b;
+bool c[2][14][2][16], f[2][14][2][16];
+bool d;
+char e[2][4][2][6];
+void g() {
+  a = 0;
+  for (int h = 0; h < 2; ++h)
+for (int i = 0; i < 14; ++i)
+  for (int j = 0; j < 2; ++j)
+for (int k = 0; k < 16; ++k)
+  c[h][i][j][k] = 0;
+  d = 0;
+  for (int h; h < 2; ++h)
+for (int i = 0; i < 4; ++i)
+  for (int j = 0; j < 2; ++j)
+for (int k = 0; k < 6; ++k)
+  e[h][i][j][k] = 6;
+  for (int h = 0; h < 2; ++h)
+for (int i = 0; i < 14; ++i)
+  for (int j = 0; j < 2; ++j)
+for (int k = 0; k < 16; ++k)
+  f[h][i][j][k] = b = 9;
+}

Jakub



[Bug fortran/99839] [8/9/10/11 Regression] ICE in inline_matmul_assign, at fortran/frontend-passes.c:4234

2021-03-30 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99839

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

   Target Milestone|--- |8.5
Summary|ICE in  |[8/9/10/11 Regression] ICE
   |inline_matmul_assign, at|in inline_matmul_assign, at
   |fortran/frontend-passes.c:4 |fortran/frontend-passes.c:4
   |234 |234

[Bug c++/99841] (temporary) refs

2021-03-30 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99841

Andrew Pinski  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |INVALID

--- Comment #3 from Andrew Pinski  ---
(In reply to g.peterhoff from comment #2)
> That is not the problem. I only made using type = ... and type(x) in the
> ctor calls so that I can test different types. You like to throw that out -
> has no influence.

I think you misunderstood.
Take a look at:
mm_pair_t   m{type(1), type(2)};

there are two temps here created by type(1) and type(2).  The lifetime of those
temps normally end at the end of the statement, unless they are extended due to
the C++ rules of binding the temp to a reference.  In this case they are not
bound to a reference as the reference is not m but rather the constructor
arguments (this is why mm_t works while the others don't).

Adding -W -Wall -Werror to the command line we get the following
warnings/errors:

: In function 'int main()':
:33:24: error: '' is used uninitialized
[-Werror=uninitialized]
   33 | std::cout << m.first << std::endl;
  |^
:34:24: error: '' is used uninitialized
[-Werror=uninitialized]
   34 | std::cout << m.second << std::endl;
  |^~
:39:35: error: '' is used uninitialized
[-Werror=uninitialized]
   39 | std::cout << std::get<0>(m) << std::endl;
  |   ^
:40:35: error: '' is used uninitialized
[-Werror=uninitialized]
   40 | std::cout << std::get<1>(m) << std::endl;
  |   ^
:45:24: error: '' is used uninitialized
[-Werror=uninitialized]
   45 | std::cout << m.min << std::endl;
  |^~~
:46:24: error: '' is used uninitialized
[-Werror=uninitialized]
   46 | std::cout << m.max << std::endl;
  |^~~

- CUT 
Which is exactly what you expect when the temp rvalue does not gets its
timeline extended past the end of that statement.

[Bug fortran/99839] ICE in inline_matmul_assign, at fortran/frontend-passes.c:4234

2021-03-30 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99839

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 CC||anlauf at gcc dot gnu.org,
   ||tkoenig at gcc dot gnu.org
   Last reconfirmed||2021-03-30
 Ever confirmed|0   |1
   Priority|P3  |P4

--- Comment #1 from anlauf at gcc dot gnu.org ---
This one is funny.  Simply punting on non-numeric and non-logical results
works around the ICE.

diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 7d3eae67632..213530e46e1 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -4193,6 +4193,19 @@ inline_matmul_assign (gfc_code **c, int *walk_subtrees,
   if (m_case == none)
 return 0;

+  /* We only handle assignment to numeric or logical variables.  */
+  switch(expr1->ts.type)
+{
+case BT_INTEGER:
+case BT_LOGICAL:
+case BT_REAL:
+case BT_COMPLEX:
+  break;
+
+default:
+  return 0;
+}
+
   ns = insert_block ();

   /* Assign the type of the zero expression for initializing the resulting

Adding Thomas, who knows the code better.

[Bug target/99648] [11 regression] gcc.dg/torture/pr71522.c fails starting with r11-165 for 32 bits

2021-03-30 Thread seurer at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99648

--- Comment #4 from seurer at gcc dot gnu.org ---
Which RTL do you want to see?

[Bug fortran/99840] [9/10/11 Regression] ICE in gfc_simplify_matmul, at fortran/simplify.c:4777

2021-03-30 Thread kargl at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99840

kargl at gcc dot gnu.org changed:

   What|Removed |Added

 CC||kargl at gcc dot gnu.org

--- Comment #2 from kargl at gcc dot gnu.org ---
Patch.  Check if a or b is zero-sized.

diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 388aca7c38c..6c5259c648d 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -4728,7 +4728,9 @@ gfc_simplify_matmul (gfc_expr *matrix_a, gfc_expr
*matrix_b)
   int stride_a, offset_a, stride_b, offset_b;

   if (!is_constant_array_expr (matrix_a)
-  || !is_constant_array_expr (matrix_b))
+  || gfc_is_size_zero_array (matrix_a)
+  || !is_constant_array_expr (matrix_b)
+  || gfc_is_size_zero_array (matrix_b))
 return NULL;

   /* MATMUL should do mixed-mode arithmetic.  Set the result type.  */

[Bug target/99648] [11 regression] gcc.dg/torture/pr71522.c fails starting with r11-165 for 32 bits

2021-03-30 Thread seurer at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99648

--- Comment #3 from seurer at gcc dot gnu.org ---
The assembler isn't that long so here it is (from -Os):

.file   "pr71522.c"
.machine power8
.section".text"
.section.rodata.str1.1,"aMS",@progbits,1
.LC1:
.string "AAA"
.section.text.startup,"ax",@progbits
.align 2
.globl main
.type   main, @function
main:
.LFB0:
.cfi_startproc
lis 9,.LC0@ha
stwu 1,-48(1)
.cfi_def_cfa_offset 48
mflr 0
la 9,.LC0@l(9)
lis 4,.LC1@ha
la 4,.LC1@l(4)
lfd 0,0(9)
lfd 1,8(9)
lis 9,0x4151
ori 9,9,0x4141
addi 3,1,8
stw 0,52(1)
.cfi_offset 65, 4
stw 9,8(1)
lis 9,0x4141
ori 9,9,0x4120
stfd 0,32(1)
stfd 1,40(1)
stw 9,12(1)
lis 9,0x3e00
stw 9,16(1)
li 9,0
stw 9,20(1)
bl strcmp
cmpwi 0,3,0
beq 0,.L2
bl abort
.L2:
lwz 0,52(1)
addi 1,1,48
.cfi_def_cfa_offset 0
mtlr 0
.cfi_restore 65
blr
.cfi_endproc
.LFE0:
.size   main,.-main
.section.rodata.cst16,"aM",@progbits,16
.align 4
.LC0:
.long   1095844161
.long   1094795552
.long   1040187392
.long   0
.ident  "GCC: (GNU) 11.0.1 20210329 (experimental) [remotes/origin/HEAD
revision c277abd:ad0a649:953624089be3f51c2ebacba65be8521bf6ae8430]"
.gnu_attribute 4, 5
.section.note.GNU-stack,"",@progbits

[Bug c++/99283] [modules] ICE in assert_definition, at cp/module.cc:4608

2021-03-30 Thread alexander.lelyakin at googlemail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99283

--- Comment #16 from Alexander Lelyakin  ---
Still reproduces:

/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header system_error
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header type_traits
/usr/local/bin/g++ -std=c++20 -fmodules-ts -x c++-system-header ccomplex

In file included from /usr/local/include/c++/11.0.1/ios:42,
 from /usr/local/include/c++/11.0.1/istream:38,
 from /usr/local/include/c++/11.0.1/sstream:38,
 from /usr/local/include/c++/11.0.1/complex:45,
 from /usr/local/include/c++/11.0.1/ccomplex:39:
/usr/local/include/c++/11.0.1/bits/ios_base.h:205:69: internal compiler error:
in assert_definition, at cp/module.cc:4491
  205 |   template <> struct is_error_code_enum : public true_type {
};
  | ^
0x6e20eb trees_in::assert_definition(tree_node*, bool)
../../gcc/gcc/cp/module.cc:4491
0xa5db60 trees_in::odr_duplicate(tree_node*, bool)
../../gcc/gcc/cp/module.cc:11323
0xa6d21f trees_in::read_function_def(tree_node*, tree_node*)
../../gcc/gcc/cp/module.cc:11403
0xa6f711 module_state::read_cluster(unsigned int)
../../gcc/gcc/cp/module.cc:14806
0xa6fd8d module_state::load_section(unsigned int, binding_slot*)
../../gcc/gcc/cp/module.cc:18068
0xa6fe4f module_state::lazy_load(unsigned int, binding_slot*)
../../gcc/gcc/cp/module.cc:18726
0xa6a0d0 trees_in::tree_node(bool)
../../gcc/gcc/cp/module.cc:9661
0xa6aee6 trees_in::core_vals(tree_node*)
../../gcc/gcc/cp/module.cc:6662
0xa68937 trees_in::tree_node_vals(tree_node*)
../../gcc/gcc/cp/module.cc:7057
0xa68937 trees_in::tree_value()
../../gcc/gcc/cp/module.cc:8927
0xa68d6f trees_in::tree_node(bool)
../../gcc/gcc/cp/module.cc:9145
0xa6ab71 trees_in::core_vals(tree_node*)
../../gcc/gcc/cp/module.cc:6413
0xa68937 trees_in::tree_node_vals(tree_node*)
../../gcc/gcc/cp/module.cc:7057
0xa68937 trees_in::tree_value()
../../gcc/gcc/cp/module.cc:8927
0xa68d6f trees_in::tree_node(bool)
../../gcc/gcc/cp/module.cc:9145
0xa6ab71 trees_in::core_vals(tree_node*)
../../gcc/gcc/cp/module.cc:6413
0xa68937 trees_in::tree_node_vals(tree_node*)
../../gcc/gcc/cp/module.cc:7057
0xa68937 trees_in::tree_value()
../../gcc/gcc/cp/module.cc:8927
0xa68d6f trees_in::tree_node(bool)
../../gcc/gcc/cp/module.cc:9145
0xa6ab71 trees_in::core_vals(tree_node*)
../../gcc/gcc/cp/module.cc:6413
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

g++ (GCC) 11.0.1 20210330 (experimental)
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

commit 5f3c6027257118469a722816e228394b5978ddb0 (HEAD -> master, origin/trunk,
origin/master, origin/HEAD)
Author: Nathan Sidwell 
Date:   Tue Mar 30 09:45:59 2021 -0700

c++: duplicate const static members [PR 99283]

[Bug c++/99841] (temporary) refs

2021-03-30 Thread g.peterhoff--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99841

--- Comment #2 from g.peterh...@t-online.de ---
That is not the problem. I only made using type = ... and type(x) in the ctor
calls so that I can test different types. You like to throw that out - has no
influence.

[Bug fortran/99840] [9/10/11 Regression] ICE in gfc_simplify_matmul, at fortran/simplify.c:4777

2021-03-30 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99840

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever confirmed|0   |1
   Last reconfirmed||2021-03-30
  Known to fail||10.2.1, 11.0, 8.4.1, 9.3.1
   Priority|P3  |P4
 CC||anlauf at gcc dot gnu.org

--- Comment #1 from anlauf at gcc dot gnu.org ---
Confirmed.

This one is funny.  The TRANSPOSE seems to screw up the simplification.
Works without TRANSPOSE.

[Bug c++/99831] ICE: in reshape_init, at cp/decl.c:6720

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99831

Marek Polacek  changed:

   What|Removed |Added

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

[Bug lto/99828] inlining failed in call to ‘always_inline’ ‘memcpy’: --param max-inline-insns-auto limit reached

2021-03-30 Thread hubicka at ucw dot cz via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99828

--- Comment #5 from Jan Hubicka  ---
> Btw, one solution would be to drop __always_inline__ after always-inline
> inlining
> and thus make it reliably not present for IPA inlining.
Removing it would make you to lose those errors, but we can ignore it
for late inlining if we decide we do not really care about always
inlining indirect calls (that are not reliably inlined by early
inliner).

But I tried that at some point and broke kernel.

Note that we could also use syntactic aliase and consider two decls
unmergeable if they differ by always_inline attribute.  That should make
it to behave consistently...

Honza

[Bug c++/99841] (temporary) refs

2021-03-30 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99841

--- Comment #1 from Andrew Pinski  ---
The question is:
mm_pair_t   m{type(1), type(2)};

I think GCC is correct here, type(1) is a temp and it does not bind to a field
directly, it goes through a constructure and therefor the temp goes away right
after the statement is done.

[Bug c++/99831] ICE: in reshape_init, at cp/decl.c:6720

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99831

--- Comment #7 from Marek Polacek  ---
There was en error + ICE, but since r11-5752 we only have the ICE.
Looks like the ICE started with r277865.

Re: [PATCH] [X86_64]: Enable support for next generation AMD Zen3 CPU

2021-03-30 Thread Jan Hubicka
Hi,
this patch backports the initial support to gcc10 branch.  Since the
trunk and branch diverged there is non-trivial change to cpuinfo
discovery.  I do;

--- a/libgcc/config/i386/cpuinfo.c
+++ b/libgcc/config/i386/cpuinfo.c
@@ -111,6 +111,12 @@ get_amd_cpu (unsigned int family, unsigned int model)
   if (model >= 0x30)
 __cpu_model.__cpu_subtype = AMDFAM17H_ZNVER2;
   break;
+case 0x19:
+  __cpu_model.__cpu_type = AMDFAM19H;
+  /* AMD family 19h version 1.  */
+  if (model <= 0x0f)
+   __cpu_model.__cpu_subtype = AMDFAM19H_ZNVER3;
+  break;
 default:
   break;
 }

While your patch also sets ZNVER3 for case where VAES is supporte that
would require backporting more of logic detecting VAES.  Is that
necessary? I see it may make znver3 to be defaulted on future znver4 if
it stays with amdfam19, but we did not do this before.

Bootstrapped/regtested x86_64-linux.  With -march=native on znver3
machine we get right flags, but trunk in addition passes:

-mno-amx-bf16
-mno-amx-int8
-mno-amx-tile
-mno-avxvnni
-mno-hreset
-mno-kl
-mno-serialize
-mno-tsxldtrk
-mno-uintr
-mno-widekl

Which are options we did not backported.
Atop of that I plan to backport the tuning patches with exception of
gather which seems bit controversal and can wait for gcc11.

Honza

2021-03-30  Jan Hubicka  

Backport

Venkataramanan Kumar  
Sharavan Kumar  
* common/config/i386/cpuinfo.h (get_amd_cpu) recognize znver3.
* common/config/i386/i386-common.c (processor_names): Add
znver3.
(processor_alias_table): Add znver3 and AMDFAM19H entry.
* common/config/i386/i386-cpuinfo.h (processor_types): Add
AMDFAM19H.
(processor_subtypes): AMDFAM19H_ZNVER3.
* config.gcc (i[34567]86-*-linux* | ...): Likewise.
* config/i386/driver-i386.c: (host_detect_local_cpu): Let
-march=native recognize znver3 processors.
* config/i386/i386-c.c (ix86_target_macros_internal): Add
znver3.
* config/i386/i386-options.c (m_znver3): New definition.
(m_ZNVER): Include m_znver3.
(processor_cost_table): Add znver3.
* config/i386/i386.c (ix86_reassociation_width): Likewise.
* config/i386/i386.h (TARGET_znver3): New definition.
(enum processor_type): Add PROCESSOR_ZNVER3.
* config/i386/i386.md (define_attr "cpu"): Add znver3.
* config/i386/x86-tune-sched.c: (ix86_issue_rate): Likewise.
(ix86_adjust_cost): Likewise.
* config/i386/x86-tune.def (X86_TUNE_AVOID_256FMA_CHAINS:
Likewise.
* config/i386/znver1.md: Add new reservations for znver3.
* doc/extend.texi: Add details about znver3.
* doc/invoke.texi: Likewise.

gcc/testsuite/ChangeLog:

2021-03-30  Jan Hubicka  

* gcc.target/i386/funcspec-56.inc: Handle new march.

libgcc/ChangeLog:

2021-03-30  Jan Hubicka  

* config/i386/cpuinfo.c (get_amd_cpu): Support amdfam19.
* config/i386/cpuinfo.h (enum processor_types): Add AMDFAM19H.
(enum processor_subtypes): Add AMDFAM19H_ZNVER3.

diff --git a/gcc/common/config/i386/i386-common.c 
b/gcc/common/config/i386/i386-common.c
index 1e4d25f052a..97335d42af1 100644
--- a/gcc/common/config/i386/i386-common.c
+++ b/gcc/common/config/i386/i386-common.c
@@ -1582,7 +1582,8 @@ const char *const processor_names[] =
   "btver1",
   "btver2",
   "znver1",
-  "znver2"
+  "znver2",
+  "znver3"
 };
 
 /* Guarantee that the array is aligned with enum processor_type.  */
@@ -1775,6 +1776,16 @@ const pta processor_alias_table[] =
   | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES
   | PTA_SHA | PTA_LZCNT | PTA_POPCNT | PTA_CLWB | PTA_RDPID
   | PTA_WBNOINVD},
+  {"znver3", PROCESSOR_ZNVER2, CPU_ZNVER2,
+PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+  | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
+  | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2
+  | PTA_BMI | PTA_BMI2 | PTA_F16C | PTA_FMA | PTA_PRFCHW
+  | PTA_FXSR | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE
+  | PTA_RDRND | PTA_MOVBE | PTA_MWAITX | PTA_ADX | PTA_RDSEED
+  | PTA_CLZERO | PTA_CLFLUSHOPT | PTA_XSAVEC | PTA_XSAVES
+  | PTA_SHA | PTA_LZCNT | PTA_POPCNT | PTA_CLWB | PTA_RDPID
+  | PTA_WBNOINVD | PTA_VAES | PTA_VPCLMULQDQ | PTA_PKU},
   {"btver1", PROCESSOR_BTVER1, CPU_GENERIC,
 PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
   | PTA_SSSE3 | PTA_SSE4A | PTA_ABM | PTA_CX16 | PTA_PRFCHW
diff --git a/gcc/config.gcc b/gcc/config.gcc
index d093b6b7f79..6fcdd771d4c 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -662,7 +662,7 @@ pentium4 pentium4m pentiumpro prescott lakemont"
 # 64-bit x86 processors supported by --with-arch=.  Each processor
 # MUST be separated by exactly one space.
 x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \
-bdver3 bdver4 znver1 znver2 btver1 btver2 k8 k8-sse3 opteron \
+bdver3 bdver4 

[Bug other/99496] [11 regression] g++.dg/modules/xtreme-header-3_c.C ICEs after r11-7557

2021-03-30 Thread seurer at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99496

seurer at gcc dot gnu.org changed:

   What|Removed |Added

 Status|WAITING |RESOLVED
 Resolution|--- |FIXED

--- Comment #16 from seurer at gcc dot gnu.org ---
I just double checked and these are all fixed now.  Thanks!

[Bug fortran/99819] [9/10/11 Regression] ICE in gfc_defer_symbol_init, at fortran/trans-decl.c:841

2021-03-30 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99819

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 Ever confirmed|0   |1
   Last reconfirmed||2021-03-30
 Status|UNCONFIRMED |NEW

--- Comment #1 from anlauf at gcc dot gnu.org ---
Confirmed.  I believe there are tons of duplicates of this one.

[PATCH, rs6000 V3] Update "prefix" attribute for Power10 [PR99133]

2021-03-30 Thread Pat Haugen via Gcc-patches
Update prefixed attribute for Power10.

This patch creates a new attribute, "maybe_prefixed", which is used to mark
those instructions that may have a prefixed form. The existing "prefixed"
attribute is now used to mark all instructions that are prefixed form.

This patch differs from the prior version in that it doesn't modify the
existing settings of the "prefixed" attribute but just adds the new attribute
and sets/tests it appropriately.

Bootstrap/regtest on powerpc64le (Power10) and powerpc64 (Power8 32/64) with no
new regressions. Ok for trunk?

-Pat


2021-03-30  Pat Haugen  

gcc/
PR target/99133
* config/rs6000/altivec.md (xxspltiw_v4si, xxspltiw_v4sf_inst,
xxspltidp_v2df_inst, xxsplti32dx_v4si_inst, xxsplti32dx_v4sf_inst,
xxblend_, xxpermx_inst, xxeval): Mark prefixed.
* config/rs6000/mma.md (mma_, mma_,
mma_, mma_, mma_, mma_,
mma_, mma_, mma_, mma_):
Likewise.
* config/rs6000/rs6000.c (rs6000_final_prescan_insn): Adjust test. 
* config/rs6000/rs6000.md (define_attr "maybe_prefixed"): New.
(define_attr "prefixed"): Update initializer.
diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index 27a269b9e72..21f1cc6f15b 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -826,7 +826,8 @@ (define_insn "xxspltiw_v4si"
 UNSPEC_XXSPLTIW))]
  "TARGET_POWER10"
  "xxspltiw %x0,%1"
- [(set_attr "type" "vecsimple")])
+ [(set_attr "type" "vecsimple")
+  (set_attr "prefixed" "yes")])
 
 (define_expand "xxspltiw_v4sf"
   [(set (match_operand:V4SF 0 "register_operand" "=wa")
@@ -845,7 +846,8 @@ (define_insn "xxspltiw_v4sf_inst"
 UNSPEC_XXSPLTIW))]
  "TARGET_POWER10"
  "xxspltiw %x0,%1"
- [(set_attr "type" "vecsimple")])
+ [(set_attr "type" "vecsimple")
+  (set_attr "prefixed" "yes")])
 
 (define_expand "xxspltidp_v2df"
   [(set (match_operand:V2DF 0 "register_operand" )
@@ -864,7 +866,8 @@ (define_insn "xxspltidp_v2df_inst"
 UNSPEC_XXSPLTID))]
   "TARGET_POWER10"
   "xxspltidp %x0,%1"
-  [(set_attr "type" "vecsimple")])
+  [(set_attr "type" "vecsimple")
+   (set_attr "prefixed" "yes")])
 
 (define_expand "xxsplti32dx_v4si"
   [(set (match_operand:V4SI 0 "register_operand" "=wa")
@@ -893,7 +896,8 @@ (define_insn "xxsplti32dx_v4si_inst"
 UNSPEC_XXSPLTI32DX))]
   "TARGET_POWER10"
   "xxsplti32dx %x0,%2,%3"
-  [(set_attr "type" "vecsimple")])
+  [(set_attr "type" "vecsimple")
+   (set_attr "prefixed" "yes")])
 
 (define_expand "xxsplti32dx_v4sf"
   [(set (match_operand:V4SF 0 "register_operand" "=wa")
@@ -921,7 +925,8 @@ (define_insn "xxsplti32dx_v4sf_inst"
 UNSPEC_XXSPLTI32DX))]
   "TARGET_POWER10"
   "xxsplti32dx %x0,%2,%3"
-  [(set_attr "type" "vecsimple")])
+  [(set_attr "type" "vecsimple")
+   (set_attr "prefixed" "yes")])
 
 (define_insn "xxblend_"
   [(set (match_operand:VM3 0 "register_operand" "=wa")
@@ -931,7 +936,8 @@ (define_insn "xxblend_"
UNSPEC_XXBLEND))]
   "TARGET_POWER10"
   "xxblendv %x0,%x1,%x2,%x3"
-  [(set_attr "type" "vecsimple")])
+  [(set_attr "type" "vecsimple")
+   (set_attr "prefixed" "yes")])
 
 (define_expand "xxpermx"
   [(set (match_operand:V2DI 0 "register_operand" "+wa")
@@ -975,7 +981,8 @@ (define_insn "xxpermx_inst"
 UNSPEC_XXPERMX))]
   "TARGET_POWER10"
   "xxpermx %x0,%x1,%x2,%x3,%4"
-  [(set_attr "type" "vecsimple")])
+  [(set_attr "type" "vecsimple")
+   (set_attr "prefixed" "yes")])
 
 (define_expand "vstrir_"
   [(set (match_operand:VIshort 0 "altivec_register_operand")
@@ -3623,7 +3630,8 @@ (define_insn "xxeval"
 UNSPEC_XXEVAL))]
"TARGET_POWER10"
"xxeval %0,%1,%2,%3,%4"
-   [(set_attr "type" "vecsimple")])
+   [(set_attr "type" "vecsimple")
+(set_attr "prefixed" "yes")])
 
 (define_expand "vec_unpacku_hi_v16qi"
   [(set (match_operand:V8HI 0 "register_operand" "=v")
diff --git a/gcc/config/rs6000/mma.md b/gcc/config/rs6000/mma.md
index a00d3a3de26..1f6fc03d2ac 100644
--- a/gcc/config/rs6000/mma.md
+++ b/gcc/config/rs6000/mma.md
@@ -540,7 +540,8 @@ (define_insn "mma_"
MMA_VVI4I4I8))]
   "TARGET_MMA"
   " %A0,%x1,%x2,%3,%4,%5"
-  [(set_attr "type" "mma")])
+  [(set_attr "type" "mma")
+   (set_attr "prefixed" "yes")])
 
 (define_insn "mma_"
   [(set (match_operand:XO 0 "fpr_reg_operand" "=")
@@ -553,7 +554,8 @@ (define_insn "mma_"
MMA_AVVI4I4I8))]
   "TARGET_MMA"
   " %A0,%x2,%x3,%4,%5,%6"
-  [(set_attr "type" "mma")])
+  [(set_attr "type" "mma")
+   (set_attr "prefixed" "yes")])
 
 (define_insn "mma_"
   [(set (match_operand:XO 0 "fpr_reg_operand" "=")
@@ -565,7 +567,8 @@ (define_insn "mma_"
MMA_VVI4I4I2))]
   "TARGET_MMA"
   " %A0,%x1,%x2,%3,%4,%5"
-  [(set_attr "type" "mma")])
+  [(set_attr "type" "mma")
+   (set_attr "prefixed" "yes")])
 
 (define_insn "mma_"
   [(set (match_operand:XO 0 "fpr_reg_operand" "=")

[Bug c++/99841] New: (temporary) refs

2021-03-30 Thread g.peterhoff--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99841

Bug ID: 99841
   Summary: (temporary) refs
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: g.peterh...@t-online.de
  Target Milestone: ---

please see https://godbolt.org/z/Ez1K7eofr
gcc gives different (false?) results than clang/icc. If you set O0 or remove
O-option gives same results.

Re: Looking at UNSUPPORTED dejagnu tests for a port...

2021-03-30 Thread Jonathan Wakely via Gcc
On Tue, 30 Mar 2021 at 20:23, Alan Lehotsky  wrote:
>
> I’m doing some final polishing on a gcc 8.3 upgrade and taking a look at the 
> unsupported tests.   Most of them are completely sensible (my port doesn’t 
> support trampolines, for example).  But gcc.c-torture/execute/pr78622.c is 
> marked as unsupported.  That appears to be due to the line
>
>{ dg-require-effective-target c99_runtime }
>
> I’m using newlib, and if I manually compile the test case with or without an 
> explicit —std=c99, it compiles and links without error.
> Do I need to set something in the baseboards file or in a local .exp file to 
> indicate that c99 is okay?

That effective-target is defined by this check:

# Return 1 if the target provides a full C99 runtime.

proc check_effective_target_c99_runtime { } {
return [check_cached_effective_target c99_runtime {
global srcdir

set file [open "$srcdir/gcc.dg/builtins-config.h"]
set contents [read $file]
close $file
append contents {
#ifndef HAVE_C99_RUNTIME
#error !HAVE_C99_RUNTIME
#endif
}
check_no_compiler_messages_nocache c99_runtime assembly $contents
}]
}

So it comes from the gcc/testsuite/gcc.dg/builtins-config.h header, which says:

/* Define HAVE_C99_RUNTIME if the entire C99 runtime is available on
   the target system.  The value of HAVE_C99_RUNTIME should be the
   same as the value of TARGET_C99_FUNCTIONS in the GCC machine
   description.  (Perhaps GCC should predefine a special macro
   indicating whether or not TARGET_C99_FUNCTIONS is set, but it does
   not presently do that.)  */

and then later:

/* Newlib has the "f" variants of the math functions, but not the "l"
   variants.  TARGET_C99_FUNCTIONS is only defined if all C99
   functions are present.  Therefore, on systems using newlib, tests
   of builtins will fail the "l" variants, and we should therefore not
   define HAVE_C99_RUNTIME.  Including  gives us a way of
   seeing if _NEWLIB_VERSION is defined.  Including  would work
   too, but the GLIBC math inlines cause us to generate inferior code,
   which causes the test to fail, so it is not safe.  Including 
   also fails because the include search paths are ordered such that GCC's
   version will be found before the newlib version.  Similarly, uClibc
   lacks the C99 functions.  */


[Bug c++/99831] ICE: in reshape_init, at cp/decl.c:6720

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99831

--- Comment #6 from Marek Polacek  ---
Even shorter:

// PR c++/99831

template  struct S {
  constexpr S(const char ()[N]) : value{} { }
  char value[N];
};
template  struct string {
  constexpr bool operator==(const string &) const = default;
};
template  void operator+(string) {
  char value[1];
  S{value};
}
static_assert(string<"a">{} == string<"a">{});

[Bug fortran/99817] [10/11 Regression] ICE in create_function_arglist, at fortran/trans-decl.c:2838 (etc.)

2021-03-30 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99817

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 CC||anlauf at gcc dot gnu.org,
   ||burnus at gcc dot gnu.org

--- Comment #3 from anlauf at gcc dot gnu.org ---
The ICE happens in

Program received signal SIGSEGV, Segmentation fault.
create_function_arglist (sym=)
at ../../gcc-trunk/gcc/fortran/trans-decl.c:2838
2838  hidden_typelist = TREE_CHAIN (hidden_typelist);
(gdb) 

git blame points to:

commit 212f4988f37ccf788c8c72b1dc952980bc9be3b7
Author: Tobias Burnus 
Date:   Tue Mar 23 15:45:36 2021 +0100

Fortran: Fix func decl mismatch [PR93660]

Adding Tobias.

[Bug target/99781] [11 Regression] ICE in partial_subreg_p, at rtl.h:3144

2021-03-30 Thread vmakarov at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99781

--- Comment #5 from Vladimir Makarov  ---
I've reproduced it too and started to work on it. I hope the fix will be ready
this week.

[Bug lto/99828] inlining failed in call to ‘always_inline’ ‘memcpy’: --param max-inline-insns-auto limit reached

2021-03-30 Thread rguenther at suse dot de via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99828

--- Comment #4 from rguenther at suse dot de  ---
On March 30, 2021 7:44:56 PM GMT+02:00, andi-gcc at firstfloor dot org
 wrote:
>https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99828
>
>--- Comment #3 from Andi Kleen  ---
>So what do you want to fix in the kernel? 
>
>Use a wrapper for taking the address of the memcpy?
>(I hope nothing in gcc would remove such a wrapper)

Remove the always_inline or also place it on the definition.

Looking at UNSUPPORTED dejagnu tests for a port...

2021-03-30 Thread Alan Lehotsky
I’m doing some final polishing on a gcc 8.3 upgrade and taking a look at the 
unsupported tests.   Most of them are completely sensible (my port doesn’t 
support trampolines, for example).  But gcc.c-torture/execute/pr78622.c is 
marked as unsupported.  That appears to be due to the line

   { dg-require-effective-target c99_runtime }

I’m using newlib, and if I manually compile the test case with or without an 
explicit —std=c99, it compiles and links without error.
Do I need to set something in the baseboards file or in a local .exp file to 
indicate that c99 is okay?



[PATCH] c++: Adjust mangling of __alignof__ [PR88115]

2021-03-30 Thread Patrick Palka via Gcc-patches
We currently mangle __alignof__ as a vendor extended operator,
but that's problematic for the reasons mentioned in
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88115#c6.

This patch changes the mangling of __alignof__ to instead use the
new "vendor extended expression" syntax that's proposed in
https://github.com/itanium-cxx-abi/cxx-abi/issues/112.  Clang does
the same thing already, so after this patch both GCC and Clang agree
about the mangling of __alignof__(type) and __alignof__(expr).

Bootstrapped and regtested on x86_64-pc-linux-gnu, does this look OK for
trunk?

gcc/cp/ChangeLog:

PR c++/88115
* mangle.c (write_expression): Adjust the mangling of
__alignof__.

include/ChangeLog:

PR c++/88115
* demangle.h (enum demangle_component_type): Add
DEMANGLE_COMPONENT_VENDOR_EXPR.

libiberty/ChangeLog:

PR c++/88115
* cp-demangle.c (d_dump, d_make_comp, d_expression_1)
(d_count_templates_scopes): Handle DEMANGLE_COMPONENT_VENDOR_EXPR.
(d_print_comp_inner): Likewise.
: Revert r11-4926
change.
: Likewise.
* testsuite/demangle-expected: Adjust __alignof__ mangling
tests.

gcc/testsuite/ChangeLog:

PR c++/88115
* g++.dg/cpp0x/alignof7.C: Adjust expected mangling.
---
 gcc/cp/mangle.c   |  8 ++---
 gcc/testsuite/g++.dg/cpp0x/alignof7.C |  4 +--
 include/demangle.h|  3 ++
 libiberty/cp-demangle.c   | 47 +++
 libiberty/testsuite/demangle-expected |  4 +--
 5 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 0a9e5aa79a0..57ce9a6710f 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -3124,11 +3124,9 @@ write_expression (tree expr)
  if (abi_version_at_least (15))
{
  /* We used to mangle __alignof__ like alignof.  */
- write_string ("v111__alignof__");
- if (TYPE_P (TREE_OPERAND (expr, 0)))
-   write_type (TREE_OPERAND (expr, 0));
- else
-   write_expression (TREE_OPERAND (expr, 0));
+ write_string ("u11__alignof__");
+ write_template_arg (TREE_OPERAND (expr, 0));
+ write_char ('E');
  return;
}
}
diff --git a/gcc/testsuite/g++.dg/cpp0x/alignof7.C 
b/gcc/testsuite/g++.dg/cpp0x/alignof7.C
index a4d7f24a4d7..2369b879392 100644
--- a/gcc/testsuite/g++.dg/cpp0x/alignof7.C
+++ b/gcc/testsuite/g++.dg/cpp0x/alignof7.C
@@ -18,5 +18,5 @@ template void f4(std::size_t);
 
 // { dg-final { scan-assembler "_Z2f1IiEvDTatT_E" } }
 // { dg-final { scan-assembler "_Z2f2IiEvDTaztlT_EE" } }
-// { dg-final { scan-assembler "_Z2f3IiEvDTv111__alignof__T_E" } }
-// { dg-final { scan-assembler "_Z2f4IiEvDTv111__alignof__tlT_EE" } }
+// { dg-final { scan-assembler "_Z2f3IiEvDTu11__alignof__T_EE" } }
+// { dg-final { scan-assembler "_Z2f4IiEvDTu11__alignof__XtlT_" } }
diff --git a/include/demangle.h b/include/demangle.h
index 23b47265d94..b45234e6887 100644
--- a/include/demangle.h
+++ b/include/demangle.h
@@ -408,6 +408,9 @@ enum demangle_component_type
  number which involves neither modifying the mangled string nor
  allocating a new copy of the literal in memory.  */
   DEMANGLE_COMPONENT_LITERAL_NEG,
+  /* A vendor's builtin expression.  The left subtree holds the name of
+ the type, and the right subtree is a template argument list.  */
+  DEMANGLE_COMPONENT_VENDOR_EXPR,
   /* A libgcj compiled resource.  The left subtree is the name of the
  resource.  */
   DEMANGLE_COMPONENT_JAVA_RESOURCE,
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index d3e798455cc..a528b7b5ed3 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -815,6 +815,9 @@ d_dump (struct demangle_component *dc, int indent)
 case DEMANGLE_COMPONENT_LITERAL_NEG:
   printf ("negative literal\n");
   break;
+case DEMANGLE_COMPONENT_VENDOR_EXPR:
+  printf ("vendor expression\n");
+  break;
 case DEMANGLE_COMPONENT_JAVA_RESOURCE:
   printf ("java resource\n");
   break;
@@ -976,6 +979,7 @@ d_make_comp (struct d_info *di, enum 
demangle_component_type type,
 case DEMANGLE_COMPONENT_TRINARY_ARG1:
 case DEMANGLE_COMPONENT_LITERAL:
 case DEMANGLE_COMPONENT_LITERAL_NEG:
+case DEMANGLE_COMPONENT_VENDOR_EXPR:
 case DEMANGLE_COMPONENT_COMPOUND_NAME:
 case DEMANGLE_COMPONENT_VECTOR_TYPE:
 case DEMANGLE_COMPONENT_CLONE:
@@ -3345,6 +3349,7 @@ d_unresolved_name (struct d_info *di)
 ::= st 
 ::= 
::= 
+   ::= u  * E # vendor extended 
expression
 ::= 
 
::= 
@@ -3425,6 +3430,15 @@ d_expression_1 (struct d_info *di)
   return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST,
  type, d_exprlist (di, 'E'));
 }
+  else if (peek == 'u')
+{

[Bug c++/99831] ICE: in reshape_init, at cp/decl.c:6720

2021-03-30 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99831

Marek Polacek  changed:

   What|Removed |Added

   Keywords|needs-reduction |

--- Comment #5 from Marek Polacek  ---
And here's a reduced version of there original test.  Will try to reduce
further.

template  struct remove_cv { using type = int; };
template  using __remove_cvref_t = typename remove_cv<_Tp>::type;
template  using remove_cvref_t = __remove_cvref_t<_Tp>;
template 
concept derived_from = __is_base_of(_Base, _Derived);
template  struct iterator_traits;
struct input_iterator_tag;
namespace __detail {
template  struct __iter_traits_impl {
  using type = iterator_traits;
};
template 
using __iter_traits = typename __iter_traits_impl<_Iter>::type;
template 
using __iter_diff_t = typename __iter_traits<_Tp>::difference_type;
} // namespace __detail
template 
using iter_difference_t = __detail::__iter_diff_t>;
namespace __detail {
template  struct __iter_concept_impl;
template  requires requires { typename _Iter; }
struct __iter_concept_impl<_Iter> {
  using type = typename __iter_traits<_Iter>::iterator_concept;
};
template 
using __iter_concept = typename __iter_concept_impl<_Iter>::type;
} // namespace __detail
template  concept weakly_incrementable = requires(_Iter __i) {
  __i;
};
template 
concept input_iterator =
derived_from<__detail::__iter_concept<_Iter>, input_iterator_tag>;
template  struct iterator_traits {
  using iterator_concept = input_iterator_tag;
  using difference_type = int;
};
template  struct in_out_result {};
template  using copy_n_result = in_out_result<_Out>;
struct {
  template 
  constexpr copy_n_result<_Iter, _Out>
  operator()(_Iter __first, iter_difference_t<_Iter> __n, _Out __result) {
for (; __n; --__n, ++__result)
  *__result = *__first;
return {};
  }
} copy_n;
template  struct StringLiteral {
  constexpr StringLiteral(const char ()[N]) { copy_n(str, N, value); }
  char value[N];
};
template  struct string {
  constexpr bool operator==(const string &) const = default;
};
template  void operator+(string) {
  char value[1];
  StringLiteral{value};
}
static_assert(string<"hello, world">{} == string<"hello"
 ", world">{});
static_assert(string<"a rose is a rose is a rose">{} == string<"a rose"
   " is "
   "a rose"
   " is "
   "a rose">{});

[Bug fortran/99840] New: [9/10/11 Regression] ICE in gfc_simplify_matmul, at fortran/simplify.c:4777

2021-03-30 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99840

Bug ID: 99840
   Summary: [9/10/11 Regression] ICE in gfc_simplify_matmul, at
fortran/simplify.c:4777
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gs...@t-online.de
  Target Milestone: ---

Started with r8, compiles with r7 :


$ cat z1.f90
program p
   integer, parameter :: x(0,0) = 0
   integer :: y(0,0)
   y = matmul(x, transpose(x))
end


$ gfortran-7 -c z1.f90
$
$ gfortran-11-20210328 -c z1.f90
 f951: internal compiler error: Segmentation fault
0xc09d4f crash_signal
../../gcc/toplev.c:327
0x716f87 gfc_simplify_matmul(gfc_expr*, gfc_expr*)
../../gcc/fortran/simplify.c:4777
0x69b9d3 do_simplify
../../gcc/fortran/intrinsic.c:4664
0x6a63fa gfc_intrinsic_func_interface(gfc_expr*, int)
../../gcc/fortran/intrinsic.c:5050
0x6f5699 resolve_unknown_f
../../gcc/fortran/resolve.c:2926
0x6f5699 resolve_function
../../gcc/fortran/resolve.c:3270
0x6f5699 gfc_resolve_expr(gfc_expr*)
../../gcc/fortran/resolve.c:7105
0x6fbb24 gfc_resolve_expr(gfc_expr*)
../../gcc/fortran/resolve.c:11728
0x6fbb24 gfc_resolve_code(gfc_code*, gfc_namespace*)
../../gcc/fortran/resolve.c:11824
0x6fd0b7 resolve_codes
../../gcc/fortran/resolve.c:17395
0x6fd17e gfc_resolve(gfc_namespace*)
../../gcc/fortran/resolve.c:17430
0x6e56e4 resolve_all_program_units
../../gcc/fortran/parse.c:6290
0x6e56e4 gfc_parse_file()
../../gcc/fortran/parse.c:6542
0x7320ef gfc_be_parse_file
../../gcc/fortran/f95-lang.c:212

[Bug fortran/99839] New: ICE in inline_matmul_assign, at fortran/frontend-passes.c:4234

2021-03-30 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99839

Bug ID: 99839
   Summary: ICE in inline_matmul_assign, at
fortran/frontend-passes.c:4234
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gs...@t-online.de
  Target Milestone: ---

Affects versions down to r7, at -O1+ :


$ cat z1.f90
program p
   real :: x(3, 3) = 1.0
   class(*), allocatable :: z(:, :)
   z = matmul(x, x)
end


$ gfortran-11-20210328 -c z1.f90 -O0
$ 
$ gfortran-11-20210328 -c z1.f90 -O2
f951: internal compiler error: in inline_matmul_assign, at
fortran/frontend-passes.c:4234
0x7bf248 inline_matmul_assign
../../gcc/fortran/frontend-passes.c:4234
0x7bfd69 gfc_code_walker(gfc_code**, int (*)(gfc_code**, int*, void*), int
(*)(gfc_expr**, int*, void*), void*)
../../gcc/fortran/frontend-passes.c:5320
0x7c1172 optimize_namespace
../../gcc/fortran/frontend-passes.c:1500
0x7c154f gfc_run_passes(gfc_namespace*)
../../gcc/fortran/frontend-passes.c:169
0x6fd1a7 gfc_resolve(gfc_namespace*)
../../gcc/fortran/resolve.c:17436
0x6e56e4 resolve_all_program_units
../../gcc/fortran/parse.c:6290
0x6e56e4 gfc_parse_file()
../../gcc/fortran/parse.c:6542
0x7320ef gfc_be_parse_file
../../gcc/fortran/f95-lang.c:212

[Bug fortran/99838] New: ICE in gfc_format_decoder, at fortran/error.c:970

2021-03-30 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99838

Bug ID: 99838
   Summary: ICE in gfc_format_decoder, at fortran/error.c:970
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gs...@t-online.de
  Target Milestone: ---

With option -Warray-temporaries, affects versions down to at least r5 :


$ cat z1.f90
program p
   type t
  integer :: a
   end type
   type(t) :: x(3)[*]
   data x%a /1, 2, 3/
end


$ gfortran-11-20210328 -c z1.f90 -fcoarray=lib
$ gfortran-11-20210328 -c z1.f90 -Warray-temporaries -fcoarray=single
$
$ gfortran-11-20210328 -c z1.f90 -Warray-temporaries -fcoarray=lib

z1.f90:1:9:

1 | program p
  | 1
in gfc_format_decoder, at fortran/error.c:970
0x686202 gfc_format_decoder
../../gcc/fortran/error.c:970
0x162f05e pp_format(pretty_printer*, text_info*)
../../gcc/pretty-print.c:1475
0x1622fe1 diagnostic_report_diagnostic(diagnostic_context*, diagnostic_info*)
../../gcc/diagnostic.c:1244
0x685fc5 gfc_report_diagnostic
../../gcc/fortran/error.c:782
0x685fc5 gfc_warning
../../gcc/fortran/error.c:815
0x686d86 gfc_warning(int, char const*, ...)
../../gcc/fortran/error.c:846
0x73c613 gfc_trans_create_temp_array(stmtblock_t*, stmtblock_t*, gfc_ss*,
tree_node*, tree_node*, bool, bool, bool, locus*)
../../gcc/fortran/trans-array.c:1355
0x746663 trans_array_constructor
../../gcc/fortran/trans-array.c:2724
0x746663 gfc_add_loop_ss_code
../../gcc/fortran/trans-array.c:3012
0x746d95 gfc_conv_loop_setup(gfc_loopinfo*, locus*)
../../gcc/fortran/trans-array.c:5317
0x776b0d gfc_trans_assignment_1
../../gcc/fortran/trans-expr.c:11179
0x753cd8 generate_coarray_sym_init
../../gcc/fortran/trans-decl.c:5736
0x71d2b2 do_traverse_symtree
../../gcc/fortran/symbol.c:4170
0x753135 generate_coarray_init
../../gcc/fortran/trans-decl.c:5786
0x75f9c4 gfc_generate_function_code(gfc_namespace*)
../../gcc/fortran/trans-decl.c:6822
0x6e5de6 translate_all_program_units
../../gcc/fortran/parse.c:6351
0x6e5de6 gfc_parse_file()
../../gcc/fortran/parse.c:6620
0x7320ef gfc_be_parse_file
../../gcc/fortran/f95-lang.c:212

[Bug fortran/99837] ICE in parse_associate, at fortran/parse.c:4780

2021-03-30 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99837

G. Steinmetz  changed:

   What|Removed |Added

   Keywords||ice-on-invalid-code

--- Comment #1 from G. Steinmetz  ---

Similar cases with "select type" instead :


$ cat z3.f90
program p
   type t
  integer, allocatable :: a(:)
   end type
   class(t) :: x[:]
   select type (y => x)
   end select
end


$ cat z4.f90
program p
   type t
  integer, allocatable :: a(:)
   end type
   class(t) :: x[*]
   select type (y => x)
   end select
end

[Bug fortran/99837] New: ICE in parse_associate, at fortran/parse.c:4780

2021-03-30 Thread gscfq--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99837

Bug ID: 99837
   Summary: ICE in parse_associate, at fortran/parse.c:4780
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gs...@t-online.de
  Target Milestone: ---

Follow-up of pr88357, affects versions down to at least r5.
With a missing attribute allocatable or pointer :


$ cat z1.f90
program p
   type t
  integer, allocatable :: a(:)
   end type
   class(t) :: x[:]
   associate (y => x)
   end associate
end


$ cat z2.f90
program p
   type t
  integer, allocatable :: a(:)
   end type
   class(t) :: x[*]
   associate (y => x)
   end associate
end


$ gfortran-11-20210328 -c z1.f90 -fcoarray=single
f951: internal compiler error: in parse_associate, at fortran/parse.c:4780
0x6e3f39 parse_associate
../../gcc/fortran/parse.c:4780
0x6e3f39 parse_executable
../../gcc/fortran/parse.c:5524
0x6e401f parse_progunit
../../gcc/fortran/parse.c:5922
0x6e5671 gfc_parse_file()
../../gcc/fortran/parse.c:6437
0x7320ef gfc_be_parse_file
../../gcc/fortran/f95-lang.c:212



With that attribute :

$ cat z0z1.f90
program p
   type t
  integer, allocatable :: a(:)
   end type
   class(t), allocatable :: x[:]
   associate (y => x)
   end associate
end

$ gfortran-11-20210328 -c z0z1.f90 -fcoarray=single
z0z1.f90:1:9:

1 | program p
  | 1
Error: Pointer assignment target in initialization expression does not have the
TARGET attribute at (1)

[Bug rtl-optimization/96264] [10 Regression] wrong code with -Os -fno-forward-propagate -fschedule-insns -fno-tree-ter

2021-03-30 Thread bergner at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96264

--- Comment #16 from Peter Bergner  ---
(In reply to seurer from comment #15)
> It still fails on gcc 10, though

Vlad, can we get this backported to GCC 10?  Maybe in time for GCC 10.3?

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Ian Lance Taylor via Gcc
I encourage everyone to please try to keep this discussion focused on GCC.

If there is a message that is completely unrelated to GCC, I encourage
not responding, or responding off-list.

Thanks.

Ian


Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Gabriel Ravier via Gcc

On 3/30/21 7:10 PM, Christopher Dimech via Gcc wrote:

Sent: Wednesday, March 31, 2021 at 4:50 AM
From: "Martin Jambor" 
To: "Giacomo Tesio" 
Cc: "GCC Development" 
Subject: Re: Remove RMS from the GCC Steering Committee

Dear Giacomo,

On Tue, Mar 30 2021, Giacomo Tesio wrote:

Hi Nathan and hello everybody,

On Fri, 26 Mar 2021 16:02:30 -0400 Nathan Sidwell wrote:


The USA is not the world and the SC is not the US government.  For
those in the USA, the (inapplicable) first amendment provides 5
rights, including showing an unwelcome guest the door. [...]

If we fail to do so, it will continue to be harder and harder to
attract new talent to GCC development.

I do not know if I qualify to speak here because I'm Italian and
I ported GCC 9.2.0 to Jehanne (a Plan 9 fork, see
http://jehanne.io/2021/01/06/gcc_on_jehanne.html), but due to the
pandemic I wasn't able to align it with the new developments and
contribute the port upstream. Also, I have no idea if you would be
interested in running GCC on a Plan 9 fork and thus accept my
contribution.


Yet, after a careful read of this thread I realized that I might
be considered the kind of "new talent" Nathan is talking about.

So here is my perspective on this topic, "in the hope it helps but
without any warranty". :-D


I do not share many of Stallman's opinions (we are VERY different), but
when I write free software and contribute to a free software community,
what I want is long term assurances about one and only one topic: that
the software will stay free as in freedom, as a common good for the
whole humanity.

As of today, GPLv3 is the legal tool that best suit this goal.
I don't think it's perfect in this regards, but that's another story.

Nobody suggested that GCC would be relicensed and certainly not to a
non-free license.  If you decide to contribute your port upstream, it
will be safe with us, regardless of who will or will not be on the
steering committee or running the FSF.  Just read the copyright
assignment text that you have singed or would need to sign to contribute
and look for FSF obligations as the license holder there.


As an Italian I'm having a hard time trying to follow your reasoning
about Stallman being a problem to attract new talents.

I do not believe that being European or Italian has anything to do with
it. I am European, I understand and agree with everything Nathan wrote
and apparently I am not the only one.

The ability to see and stand up to consistent wrongdoing is universal
and every human of every nationality posses it.  Unfortunately, all
people are also able to close their eyes and ears and ignore mistreatment
when they are not the victims and when their friend or their favorite
public figure is the perpetrator.  There is absolutely nothing American
or European about either.

Young socialists have been getting organized on colleges campuses
with these extreme ideas not only in the United States.  France, for
instance has been harbouring a socialist model we should all dread.

France was once a role model for what big government can do for its
people. But it has become an embarrassing example since “The Gilets
Jaunes” took to the streets to demonstrate against the insane amount
of taxes they pay. These guys aren’t upper class. They are the people
who had supported the policies that are inevitable when you have the
government providing so many services and involved so deeply in so much
of the economy.

All those people in America who currently fall for the socialism soup
that that Ocasio-Cortez and Sanders are selling need to realize that if
their dream came to pass, they, not the rich – not the bankers and politicians
– will be ones suffering the most from the high taxes, high unemployment, and
slow growth that go hand in hand with the level of public spending they want.
I fail to see how this has anything to do with the message you're 
answering. Is this what the right-wingers in America are resorting to ? 
Randomly making speeches about the "socialist soup" whenever they 
encounter something they can't find a good answer to ?

Sincerely,

Martin



[Bug target/99836] New: aarch64: -fpatchable-function-entry=N[,0] should place .cfi_startproc before NOPs

2021-03-30 Thread i at maskray dot me via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99836

Bug ID: 99836
   Summary: aarch64: -fpatchable-function-entry=N[,0] should place
.cfi_startproc before NOPs
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: target
  Assignee: unassigned at gcc dot gnu.org
  Reporter: i at maskray dot me
  Target Milestone: ---

Extracted from https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92424#c8

% echo 'int main() {}' > a.c
% clang --target=aarch64 -fpatchable-function-entry=2
-mbranch-protection=standard -S a.c -o -
...
main:   // @main
.Lfunc_begin0:
.cfi_startproc
// %bb.0:   // %entry
hint#34
.Lpatch0:
nop
nop

%
/tmp/glibc-many/install/compilers/aarch64-linux-gnu/bin/aarch64-glibc-linux-gnu-g++
-fpatchable-function-entry=2 -mbranch-protection=standard -S a.c -o -
.arch armv8-a
.file   "a.c"
.text
.align  2
.global main
.type   main, %function
main:
hint34 // bti c
.section__patchable_function_entries,"aw",@progbits
.align  3
.8byte  .LPFE1
.text
.LPFE1:
nop
nop
.LFB0:
.cfi_startproc


For -fpatchable-function-entry=N[,0], placing .cfi_startproc before NOPs makes
more sense and can make unwinding work in that region.

For N[,M] where M>0, that is a very narrow use case by the Linux kernel. I
prefer not to place .cfi_startproc above the function label.

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Christopher Dimech via Gcc


> Sent: Wednesday, March 31, 2021 at 5:45 AM
> From: "Joseph Myers" 
> To: "JeanHeyd Meneide" 
> Cc: "GCC Development" , "Nathan Sidwell" 
> Subject: Re: Remove RMS from the GCC Steering Committee
>
> On Tue, 30 Mar 2021, JeanHeyd Meneide via Gcc wrote:
> 
> >  So, it boils down to this for me: either GCC is a place where all
> > contributions are welcome, or GCC is a place of hypocrisy, where
> > contributions are welcome except when Stallman (or someone else in a
> > position of power) lobbies a non-technical, non-factual argument
> > against you and jumps from their high tower to slam down on
> > rank-and-file contributors and participants. You cannot have it both
> > ways.
> 
> All contributions are welcome.  One of the key functions of the SC is 
> actually saying no to RMS.
> 
> Central FSF or GNU project infrastructure is not used in developing GCC; 
> gcc.gnu.org is entirely independent of central FSF or GNU infrastructure 
> such as savannah.  So RMS has no control over policies applied to GCC 
> mailing lists, and any influence he might apply to the moderation of lists 
> hosted on lists.gnu.org does not apply here.  (Although GCC releases are 
> uploaded to ftp.gnu.org, which is central GNU infrastructure, they are 
> also available at https://gcc.gnu.org/pub/gcc/releases/ .)  He has an 
> ordinary restricted user account on gcc.gnu.org giving the same access to 
> push commits as most committers; he does not have shell or administrative 
> access.

People are inflating the power or control he actually has.  I have to say
that at no time has Stallman dictated on any of my work.  Unlike the animosity
that has been demonstrated by Ludovic Courtès in October 2019, by sending
a message disguised to look like an official Gnu Directive to Gnu Maintainers.
A fashionable tool for excommunicating those he find problematic due to their
pesky different points of view.   
 
> -- 
> Joseph S. Myers
> jos...@codesourcery.com
>


Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread JeanHeyd Meneide via Gcc
Dear Giacomo,

 Apologies, a correction here. I should have more carefully read
it, but this paragraph:

>  My problem is Dr. Richard M. Stallman stands credibly and
> factually accused of Doxxing and GCC contributor/participant and
> knowingly manipulating the project for his own personal reasons.

 This should be "RMS explicitly sanctioned, encouraged, and
blessed the Doxxing of an individual". Apologies, he did not do the
doxxing himself; this was a fat finger on my part. Please take that
into account; the rest is accurate.

Sincerely,
JeanHeyd


Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Joseph Myers
On Tue, 30 Mar 2021, JeanHeyd Meneide via Gcc wrote:

>  So, it boils down to this for me: either GCC is a place where all
> contributions are welcome, or GCC is a place of hypocrisy, where
> contributions are welcome except when Stallman (or someone else in a
> position of power) lobbies a non-technical, non-factual argument
> against you and jumps from their high tower to slam down on
> rank-and-file contributors and participants. You cannot have it both
> ways.

All contributions are welcome.  One of the key functions of the SC is 
actually saying no to RMS.

Central FSF or GNU project infrastructure is not used in developing GCC; 
gcc.gnu.org is entirely independent of central FSF or GNU infrastructure 
such as savannah.  So RMS has no control over policies applied to GCC 
mailing lists, and any influence he might apply to the moderation of lists 
hosted on lists.gnu.org does not apply here.  (Although GCC releases are 
uploaded to ftp.gnu.org, which is central GNU infrastructure, they are 
also available at https://gcc.gnu.org/pub/gcc/releases/ .)  He has an 
ordinary restricted user account on gcc.gnu.org giving the same access to 
push commits as most committers; he does not have shell or administrative 
access.

-- 
Joseph S. Myers
jos...@codesourcery.com


[Bug lto/99828] inlining failed in call to ‘always_inline’ ‘memcpy’: --param max-inline-insns-auto limit reached

2021-03-30 Thread andi-gcc at firstfloor dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99828

--- Comment #3 from Andi Kleen  ---
So what do you want to fix in the kernel? 

Use a wrapper for taking the address of the memcpy?
(I hope nothing in gcc would remove such a wrapper)

[Bug c++/99831] ICE: in reshape_init, at cp/decl.c:6720

2021-03-30 Thread hewillk at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99831

--- Comment #4 from 康桓瑋  ---
When the array subscript is outside the bounds of array, gcc seems to fall into
infinite recursion due to the default operator==.

Here is the reduced with no header:

struct A {
  constexpr A(const char*) {}
  char value[1] = {};
};

template 
struct B {
  constexpr bool operator==(const B&) const = default;
};

constexpr auto foo(auto) {
  constexpr auto a = [] {
char value[1];
value[2] = 0; // this line
return A{value};
  }();
  return B{};
}

constexpr auto b = foo(B<"">{});

: In instantiation of 'struct B< >':
:8:18:   recursively required from 'struct B< >'
:8:18:   required from 'struct B< >'
:17:15:   required from 'constexpr auto foo(auto:1) [with auto:1 =
B]'
:20:23:   required from here
:8:18: fatal error: template instantiation depth exceeds maximum of 900
(use '-ftemplate-depth=' to increase the maximum)
8 |   constexpr bool operator==(const B&) const = default;
  |  ^~~~
compilation terminated.

[Bug tree-optimization/99835] New: missed optimization for dead code elimination at -O3 (vs. -O1)

2021-03-30 Thread zhendong.su at inf dot ethz.ch via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99835

Bug ID: 99835
   Summary: missed optimization for dead code elimination at -O3
(vs. -O1)
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: zhendong.su at inf dot ethz.ch
  Target Milestone: ---

[558] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/suz-local/software/local/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/11.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--prefix=/local/suz-local/software/local/gcc-trunk --enable-languages=c,c++
--disable-werror --enable-multilib --with-system-zlib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.0.1 20210330 (experimental) [master revision
8aac913adfc:ff4ebc2f17c:65374af219f9c5c594951a07e766fe70c1136a1f] (GCC) 
[559] % 
[559] % gcctk -O1 -S -o O1.s small.c
[560] % gcctk -O3 -S -o O3.s small.c
[561] % 
[561] % wc O1.s O3.s
  23   45  420 O1.s
  35   66  615 O3.s
  58  111 1035 total
[562] % 
[562] % grep foo O1.s
[563] % grep foo O3.s
jmp foo
[564] % 
[564] % cat small.c
extern void foo(void);
static int a, d;
void b();
static int c() {
  foo();
  b();
}
void b() {
  while (d) {
if (!a)
  break;
c();
  }
}
int main() {
  b();
  return 0;
}

[Bug ipa/99834] New: missed optimization for dead code elimination at -O3 (vs. -O2)

2021-03-30 Thread zhendong.su at inf dot ethz.ch via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99834

Bug ID: 99834
   Summary: missed optimization for dead code elimination at -O3
(vs. -O2)
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: ipa
  Assignee: unassigned at gcc dot gnu.org
  Reporter: zhendong.su at inf dot ethz.ch
CC: marxin at gcc dot gnu.org
  Target Milestone: ---

[590] % gcctk -v
Using built-in specs.
COLLECT_GCC=gcctk
COLLECT_LTO_WRAPPER=/local/suz-local/software/local/gcc-trunk/libexec/gcc/x86_64-pc-linux-gnu/11.0.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-trunk/configure --disable-bootstrap
--prefix=/local/suz-local/software/local/gcc-trunk --enable-languages=c,c++
--disable-werror --enable-multilib --with-system-zlib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.0.1 20210330 (experimental) [master revision
8aac913adfc:ff4ebc2f17c:65374af219f9c5c594951a07e766fe70c1136a1f] (GCC) 
[591] % 
[591] % gcctk -O2 -S -o O2.s small.c
[592] % gcctk -O3 -S -o O3.s small.c
[593] % 
[593] % wc O2.s O3.s
  43   90  704 O2.s
  61  126  950 O3.s
 104  216 1654 total
[594] % 
[594] % grep foo O2.s
[595] % grep foo O3.s
callfoo
callfoo
[596] % 
[596] % cat small.c
extern void foo(void);
static int a, b, c;
static int d() {
  for (a = 0; a < 1; a++)
b = 1;
  for (; b; b--)
for (; c; c--)
  ;
  return 0;
}
static void e() {
  if (d())
foo();
}
int main() {
  e();
  e();
  return 0;
}

[Bug c++/99833] New: structured binding + if init + generic lambda = internal compiler error

2021-03-30 Thread nickgray0 at brown dot edu via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99833

Bug ID: 99833
   Summary: structured binding + if init + generic lambda =
internal compiler error
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: nickgray0 at brown dot edu
  Target Milestone: ---
 Build: -std=c++20

as the title suggests, the following code triggers an internal compiler error:

#include 

auto f(auto&& x) {
[&](auto...) {
auto y = std::tuple{ "what's happening here?", x };
if constexpr (auto [_, z] = y; requires { z; })
return;
}();
}

auto main()->int {
f(42);
}

error message: :6:36: internal compiler error: in tsubst_decomp_names,
at cp/pt.c:18034
6 | if constexpr (auto [_, z] = y; requires { z; })
  |^~
0x1cfb6a9 internal_error(char const*, ...)
???:0
0x6ba871 fancy_abort(char const*, int, char const*)
???:0
0x91c84f instantiate_decl(tree_node*, bool, bool)
???:0
0x7c6c0e maybe_instantiate_decl(tree_node*)
???:0
0x7c8370 mark_used(tree_node*, int)
???:0
0x6e2835 build_op_call(tree_node*, vec**, int)
???:0
0x980ae5 finish_call_expr(tree_node*, vec**, bool,
bool, int)
???:0
0x91c84f instantiate_decl(tree_node*, bool, bool)
???:0
0x7c6c0e maybe_instantiate_decl(tree_node*)
???:0
0x7c8370 mark_used(tree_node*, int)
???:0
0x6de097 build_new_function_call(tree_node*, vec**, int)
???:0
0x980c6c finish_call_expr(tree_node*, vec**, bool,
bool, int)
???:0
0x8e12ad c_parse_file()
???:0
0xa600a2 c_common_parse_file()
???:0


either moving the structured binding outside of if statement or making the
lambda non-generic seems to solve the problem.

[Bug tree-optimization/98268] [10/11 Regression] ICE: verify_gimple failed with LTO and SVE

2021-03-30 Thread rsandifo at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98268

rsandifo at gcc dot gnu.org  changed:

   What|Removed |Added

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

--- Comment #7 from rsandifo at gcc dot gnu.org  
---
Mine.

Seems that maybe_canonicalize_mem_ref_addr should call
recompute_tree_invariant_for_addr_expr when replacing
_MEM_REF (which is never treated as invariant)
with _REF (which can be invariant).

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Christopher Dimech via Gcc
> Sent: Wednesday, March 31, 2021 at 4:50 AM
> From: "Martin Jambor" 
> To: "Giacomo Tesio" 
> Cc: "GCC Development" 
> Subject: Re: Remove RMS from the GCC Steering Committee
>
> Dear Giacomo,
> 
> On Tue, Mar 30 2021, Giacomo Tesio wrote:
> > Hi Nathan and hello everybody,
> >
> > On Fri, 26 Mar 2021 16:02:30 -0400 Nathan Sidwell wrote:
> >
> >> The USA is not the world and the SC is not the US government.  For
> >> those in the USA, the (inapplicable) first amendment provides 5
> >> rights, including showing an unwelcome guest the door. [...]
> >>
> >> If we fail to do so, it will continue to be harder and harder to
> >> attract new talent to GCC development.
> >
> > I do not know if I qualify to speak here because I'm Italian and
> > I ported GCC 9.2.0 to Jehanne (a Plan 9 fork, see
> > http://jehanne.io/2021/01/06/gcc_on_jehanne.html), but due to the
> > pandemic I wasn't able to align it with the new developments and
> > contribute the port upstream. Also, I have no idea if you would be
> > interested in running GCC on a Plan 9 fork and thus accept my
> > contribution.
> >
> >
> > Yet, after a careful read of this thread I realized that I might
> > be considered the kind of "new talent" Nathan is talking about.
> >
> > So here is my perspective on this topic, "in the hope it helps but
> > without any warranty". :-D
> >
> >
> > I do not share many of Stallman's opinions (we are VERY different), but
> > when I write free software and contribute to a free software community,
> > what I want is long term assurances about one and only one topic: that
> > the software will stay free as in freedom, as a common good for the
> > whole humanity.
> >
> > As of today, GPLv3 is the legal tool that best suit this goal.
> > I don't think it's perfect in this regards, but that's another story.
> 
> Nobody suggested that GCC would be relicensed and certainly not to a
> non-free license.  If you decide to contribute your port upstream, it
> will be safe with us, regardless of who will or will not be on the
> steering committee or running the FSF.  Just read the copyright
> assignment text that you have singed or would need to sign to contribute
> and look for FSF obligations as the license holder there.
> 
> > As an Italian I'm having a hard time trying to follow your reasoning
> > about Stallman being a problem to attract new talents.
> 
> I do not believe that being European or Italian has anything to do with
> it. I am European, I understand and agree with everything Nathan wrote
> and apparently I am not the only one.
> 
> The ability to see and stand up to consistent wrongdoing is universal
> and every human of every nationality posses it.  Unfortunately, all
> people are also able to close their eyes and ears and ignore mistreatment
> when they are not the victims and when their friend or their favorite
> public figure is the perpetrator.  There is absolutely nothing American
> or European about either.

Young socialists have been getting organized on colleges campuses 
with these extreme ideas not only in the United States.  France, for
instance has been harbouring a socialist model we should all dread.

France was once a role model for what big government can do for its
people. But it has become an embarrassing example since “The Gilets
Jaunes” took to the streets to demonstrate against the insane amount
of taxes they pay. These guys aren’t upper class. They are the people
who had supported the policies that are inevitable when you have the
government providing so many services and involved so deeply in so much
of the economy.

All those people in America who currently fall for the socialism soup
that that Ocasio-Cortez and Sanders are selling need to realize that if
their dream came to pass, they, not the rich – not the bankers and politicians
– will be ones suffering the most from the high taxes, high unemployment, and
slow growth that go hand in hand with the level of public spending they want.

> Sincerely,
> 
> Martin
>


Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread JeanHeyd Meneide via Gcc
Dear Giacomo,

 I want to reply specifically to you because you, like me, are a
new contributor, and I have a few questions and a few points that I
think are salient in this discussion.

> As an Italian I'm having a hard time trying to follow your reasoning
> about Stallman being a problem to attract new talents.
>
> I could understand such statement if he had committed actual crimes,
> was legally persecuted, processed and condemned like Reiser.
>
> But while I try, I cannot really understand why you think that his name
> in the Steering Committee would drive away people from contributing GCC

 The first is that I don't want to get into the conversation about
how the FSF handles Stallman. Other than them having my Copyright
assignment (something I also need to take a look at), the FSF does not
write the code. GCC's contributors, like you and me, do. My biggest
problem with Stallman right now is not about whether or not he likes
US-ians or if he's a good person:

 My problem is Dr. Richard M. Stallman stands credibly and
factually accused of Doxxing and GCC contributor/participant and
knowingly manipulating the project for his own personal reasons.

 When I say this, I want to be clear: when Mark sent his e-mail I
followed up with multiple GCC contributors to determine how factual
his claim actually was. Multiple people have independently
corroborated that Stallman did what Mark said, and worse, and their
quotes of Stallman's words line up word-for-word. In fact, what
Stallman did was worse than what Mark described, and has happened
multiple times before. Stallman is willing to attack and engage in
cancel culture of his own contributors. What his reasons are, I don't
know and I do not want to know: my bottom line here is that Stallman
is a danger to GCC contributors and is harmful to them.

 I make no argument based on my ethnicity, skin color, which side
of the globe I come from. Dr. Stallman's demonstrated behavior is that
he can - and WILL, and HAS - shown up into places where he has very
little to offer technically and utterly derailed or otherwise harmed
individuals or peoples **and their code contributions**.

 So, it boils down to this for me: either GCC is a place where all
contributions are welcome, or GCC is a place of hypocrisy, where
contributions are welcome except when Stallman (or someone else in a
position of power) lobbies a non-technical, non-factual argument
against you and jumps from their high tower to slam down on
rank-and-file contributors and participants. You cannot have it both
ways.

  That is why I switched from "wait and see" to "absolutely not".
I am not going to wait for the day somebody high up enough on the GCC
ladder doesn't like me enough to decide that he's going to
shoulder-slam my contributions with non-technical claptrap, nor am I
going to recommend other people to this project if anyone can do that
to them. Which brings me to another important point...

> I do not really know if the removing Stallman from the Steering
> Committee would attract more US people in GCC development. Or if it
> would attract more US people that now prefer to work in LLVM only
> because of they feel somehow bad working with Stallman in the SC.
>
>
> But I can assure you that, as Pankaj Jangid said before me, many many
> people are attracted to GCC, as users and developers, BECAUSE of
> Stallman presence, because they know that something like this
> https://medium.com/@giacomo_59737/what-i-wish-i-knew-before-contributing-to-open-source-dd63acd20696
> will not happen to them.
>
>
> World wide, people do not LIKE Stallman, but we TRUST him on this.
> Just like the GPLv3, RMS is not perfect, but it does ONE THING well.

 You state it here and many others say it throughout the thread
that Stallman is the only reason they contribute to GCC, or similar
Free Software projects. This deeply concerns me, because the
underlying implication is if that Stallman were to disappear, right
this second, all of you would be gone. Yet, on the other hand, we say
that this is the "Free Software MOVEMENT". A movement cannot be
destroyed because one person disappears; if that is the case, it is
not a movement, but a ring of personality around an individual. Either
this is a Free Software Movement, or this is Stallman's Free Software
Shindig. I contribute to GCC because I expect that when Stallman is
gone and I am Stallman's age, there will still be a Free Software
Movement. Stewarded by the FSF or the CNCF or the {insert gathering of
like-minded OSS contributors and enthusiasts and hard workers here}.

 Is this not the case for you and others?

 If Stallman is the only thing holding this movement together, I
would like to know this now so I can invest my time in an actual
movement elsewhere, independently of whether or not he remains on the
Steering Committee. (I still believe he has no place to have a
position of power on the Steering Committee, and instead should just
be a 

Re: Remove RMS from the GCC Steering Committee

2021-03-30 Thread Markus Böck via Gcc
Hello Giacomo and everyone else!

As a neighbour to your north (Austria), and another potential
newcomer, I would also like to point out that I do not believe the
views given by Nathan and others in support of him are very
US-centric. At least I would hope that most countries are in pursuit
or see value in having an inclusive environment where no one has to
feel treated unfairly due to either their gender, race or other
things. For what it's worth, Nathan may have simply picked the USA as
an example due familiarity. We don't know that.
As far as I am aware many of the people who have been participating in
this thread are also not from the USA.

I am also of the opinion that legally wrong does not equal morally
wrong. RMS does not have to have committed a crime for the developers
of GCC, the SC or whoever, to feel like he is not representing their
values as a member of the SC well.

Best regards
Markus

On Tue, Mar 30, 2021 at 3:20 PM Giacomo Tesio  wrote:
>
> Hi Nathan and hello everybody,
>
> On Fri, 26 Mar 2021 16:02:30 -0400 Nathan Sidwell wrote:
>
> > The USA is not the world and the SC is not the US government.  For
> > those in the USA, the (inapplicable) first amendment provides 5
> > rights, including showing an unwelcome guest the door. [...]
> >
> > If we fail to do so, it will continue to be harder and harder to
> > attract new talent to GCC development.
>
> I do not know if I qualify to speak here because I'm Italian and
> I ported GCC 9.2.0 to Jehanne (a Plan 9 fork, see
> http://jehanne.io/2021/01/06/gcc_on_jehanne.html), but due to the
> pandemic I wasn't able to align it with the new developments and
> contribute the port upstream. Also, I have no idea if you would be
> interested in running GCC on a Plan 9 fork and thus accept my
> contribution.
>
>
> Yet, after a careful read of this thread I realized that I might
> be considered the kind of "new talent" Nathan is talking about.
>
> So here is my perspective on this topic, "in the hope it helps but
> without any warranty". :-D
>
>
> I do not share many of Stallman's opinions (we are VERY different), but
> when I write free software and contribute to a free software community,
> what I want is long term assurances about one and only one topic: that
> the software will stay free as in freedom, as a common good for the
> whole humanity.
>
> As of today, GPLv3 is the legal tool that best suit this goal.
> I don't think it's perfect in this regards, but that's another story.
>
>
> As an Italian I'm having a hard time trying to follow your reasoning
> about Stallman being a problem to attract new talents.
>
> I could understand such statement if he had committed actual crimes,
> was legally persecuted, processed and condemned like Reiser.
>
> But while I try, I cannot really understand why you think that his name
> in the Steering Committee would drive away people from contributing GCC
>
>
> I ported GCC to Plan 9 because I want a free compiler suite for my OS.
>
> Porting CLANG would have been easier (to some extent) BUT my choice was
> political and Stallman in the Steering Committee is a long term
> warranty that GCC development will not steer away from the Free
> Software conception that I know, betraying my trust.
>
>
> My impression is that you are, in absolute good faith, projecting your
> own culture (quite US-centric, as far as I can deduce by this thread)
> to the whole world.
>
>
> I do not really know if the removing Stallman from the Steering
> Committee would attract more US people in GCC development. Or if it
> would attract more US people that now prefer to work in LLVM only
> because of they feel somehow bad working with Stallman in the SC.
>
>
> But I can assure you that, as Pankaj Jangid said before me, many many
> people are attracted to GCC, as users and developers, BECAUSE of
> Stallman presence, because they know that something like this
> https://medium.com/@giacomo_59737/what-i-wish-i-knew-before-contributing-to-open-source-dd63acd20696
> will not happen to them.
>
>
> World wide, people do not LIKE Stallman, but we TRUST him on this.
> Just like the GPLv3, RMS is not perfect, but it does ONE THING well.
>
>
> So, since you care about demographics, please consider that.
>
> Removing RMS you might attract more of certain US demographics,
> but you will certainly alienate a lot of people world wide that
> do not align your political values (despite respecting them a lot!)
> and do not think that a compiler suite can fix US systemic issues
> anyway.
>
>
> As for me, I would NOT trust GCC (or FSF) in the long term, had
> you to distance Stallman, because I've already seen with my eyes
> what happen when people do not have anything to loose to betray your
> trust, and Stallman has all to lose by betraying Free Software.
>
>
> Maybe I'm not the "new talent" you are looking for.
>
> But please, do not turn GCC into a US-centric project.
>
>
>
> Giacomo


[Bug c++/99283] [modules] ICE in assert_definition, at cp/module.cc:4608

2021-03-30 Thread nathan at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99283

--- Comment #15 from Nathan Sidwell  ---
another one encountered on the way ...
* 5f3c6027257 2021-03-30 | c++: duplicate const static members [PR 99283]

  1   2   3   >