[Bug target/89606] Extra mov after structure load instructions on aarch64

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89606

Andrew Pinski  changed:

   What|Removed |Added

   Severity|normal  |enhancement
   Last reconfirmed||2021-04-17
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
   Keywords||ra
   Host|x86_64-pc-linux-gnu |
  Build|x86_64-pc-linux-gnu |

--- Comment #2 from Andrew Pinski  ---
Confirmed.
Note GCC 7 was even worse.

[Bug target/84547] Suboptimal code for int128 masked shifts (ARM64)

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84547

Andrew Pinski  changed:

   What|Removed |Added

Summary|Suboptimal code for masked  |Suboptimal code for int128
   |shifts (ARM64)  |masked shifts (ARM64)
   Last reconfirmed||2021-04-17
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW

--- Comment #1 from Andrew Pinski  ---
Yes int128 (or rather double wide register) shifts are not optimized that well.
 They are not used by many people even.  I wonder if there is a way to use
vector instructions to do them.

Re: removing toxic emailers

2021-04-16 Thread Jeff Law via Gcc



On 4/16/2021 10:08 PM, Frosku wrote:

On Sat Apr 17, 2021 at 5:05 AM BST, Ian Lance Taylor wrote:

On Fri, Apr 16, 2021 at 4:16 PM Frosku  wrote:

When I refer to a 'California cultural standard', that's not prescriptive. It's
just a reference to the fact that a *lot* of the SC live in California, and any
culture prescribed by the steering committee will be overly influenced by that
commonality.

To the best of my knowledge, 2 of the 13 members of the GCC steering
committee live in California.

Ian

And the rest of the west coast United States / New England?


I'm not aware of anywhere in the US that is a monoculture in the way you 
seem to be implying.  And if you really believe there are those kinds of 
monocultures , then you're showing a high degree of ignorance.


FTR, I've never resided on the west coast of the US or in the 
traditionally defined New England states.



Jeff



Re: removing toxic emailers

2021-04-16 Thread Andrew Pinski via Gcc
On Fri, Apr 16, 2021 at 9:56 PM Frosku  wrote:
>
> On Sat Apr 17, 2021 at 5:05 AM BST, Ian Lance Taylor wrote:
> > On Fri, Apr 16, 2021 at 4:16 PM Frosku  wrote:
> > >
> > > When I refer to a 'California cultural standard', that's not 
> > > prescriptive. It's
> > > just a reference to the fact that a *lot* of the SC live in California, 
> > > and any
> > > culture prescribed by the steering committee will be overly influenced by 
> > > that
> > > commonality.
> >
> > To the best of my knowledge, 2 of the 13 members of the GCC steering
> > committee live in California.
> >
> > Ian
>
> And the rest of the west coast United States / New England?

I count 5 which are not in the United States or Canada.

Thanks,
Andrew Pinski

>
> >>= %frosku = { os => 'gnu+linux', editor => 'emacs', coffee => 1 } =<<


Re: removing toxic emailers

2021-04-16 Thread Frosku
On Sat Apr 17, 2021 at 5:05 AM BST, Ian Lance Taylor wrote:
> On Fri, Apr 16, 2021 at 4:16 PM Frosku  wrote:
> >
> > When I refer to a 'California cultural standard', that's not prescriptive. 
> > It's
> > just a reference to the fact that a *lot* of the SC live in California, and 
> > any
> > culture prescribed by the steering committee will be overly influenced by 
> > that
> > commonality.
>
> To the best of my knowledge, 2 of the 13 members of the GCC steering
> committee live in California.
>
> Ian

And the rest of the west coast United States / New England?

>>= %frosku = { os => 'gnu+linux', editor => 'emacs', coffee => 1 } =<<


Re: removing toxic emailers

2021-04-16 Thread Ian Lance Taylor via Gcc
On Fri, Apr 16, 2021 at 4:16 PM Frosku  wrote:
>
> When I refer to a 'California cultural standard', that's not prescriptive. 
> It's
> just a reference to the fact that a *lot* of the SC live in California, and 
> any
> culture prescribed by the steering committee will be overly influenced by that
> commonality.

To the best of my knowledge, 2 of the 13 members of the GCC steering
committee live in California.

Ian


[Bug c++/99926] Parameter packs and variadic arguments: Clang, gcc, and msvc differ on this one

2021-04-16 Thread matthurd at acm dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99926

--- Comment #2 from Matt Hurd  ---
FWIW, MSVC claims to have fixed their bug in version 16.10 Preview 2, leaving
just gcc generating incorrect code.

https://developercommunity.visualstudio.com/t/parameter-packs-and-variadic-arguments-clang-gcc-a/1390988

--Matt.

[Bug c++/100111] [10 Regression] `-fno-elide-constructors` with `constexpr` ctors causes ICE in GCC 10.3

2021-04-16 Thread jason at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100111

Jason Merrill  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
  Known to work||11.0
Summary|[10/11 Regression]  |[10 Regression]
   |`-fno-elide-constructors`   |`-fno-elide-constructors`
   |with `constexpr` ctors  |with `constexpr` ctors
   |causes ICE in GCC 10.3  |causes ICE in GCC 10.3

[Bug libfortran/99210] X editing for reading file with encoding='utf-8'

2021-04-16 Thread jvdelisle at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99210

Jerry DeLisle  changed:

   What|Removed |Added

 Status|ASSIGNED|NEW

[Bug fortran/66499] Letters with accents change format behavior for X and T descriptors.

2021-04-16 Thread jvdelisle at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66499

Jerry DeLisle  changed:

   What|Removed |Added

 Status|ASSIGNED|NEW

[Bug fortran/69360] loop optimization produces invalid code when a common array has dimension 1 in some files

2021-04-16 Thread kargl at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69360

kargl at gcc dot gnu.org changed:

   What|Removed |Added

 CC||kargl at gcc dot gnu.org

--- Comment #5 from kargl at gcc dot gnu.org ---
(In reply to John Northall from comment #4)
> O dear - that makes gfortran unusable on many existing codes - not really
> satisfactory is it?
> John
> 


gfortran is fairly good at finding bugs in a user's program if
one asks gfortran to do so.  Add -fcheck=all to your options.

At line 21 of file setmid.f
Fortran runtime error: Index '155' of dimension 1 of array 'xym' above upper
bound of 1

Now, you have an opportunity to fix your code.

[Bug c++/100124] Why is "flexible array member '...' in an otherwise empty '...'" an issue?

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100124

--- Comment #4 from Andrew Pinski  ---
(In reply to Martin Sebor from comment #3)
> The reason why G++ rejects structs with a flexible array as the sole member
> is because GCC (in C mode) doesn't accept them.  Git log indicates that GCC
> started rejecting such code in r38705

Note this change was done long before clang was around so it would be
interesting to know why clang chose differently.

Re: removing toxic emailers

2021-04-16 Thread Christopher Dimech via Gcc


> Sent: Saturday, April 17, 2021 at 11:15 AM
> From: "Frosku" 
> To: "Ian Lance Taylor" 
> Cc: "GCC Development" 
> Subject: Re: removing toxic emailers
>
> On Fri Apr 16, 2021 at 5:28 PM BST, Ian Lance Taylor wrote:
> > On Thu, Apr 15, 2021 at 9:08 PM Frosku  wrote:
> > >
> > > On the other hand, I also think that a project which goes too far in
> > > policing speech, especially speech unrelated to the project, will drive 
> > > away
> > > talented people who are more than willing to comply with the project's 
> > > norms
> > > within the project's spaces. Trying to enforce the 'California cultural
> > > standard' on not only someone's interactions with the project but their
> > > entire life (which may be lived in a very different cultural setting) 
> > > seems
> > > very invasive and culturally exclusionary.
> >
> > I do live in California, but I don't know what the "California
> > cultural standard" is. It's a big place, and it's full of people who
> > behave in all kinds of different ways. Harvey Weinstein and
> > brogrammer culture are California cultures. You presumably have
> > something in mind, but I'm not sure it's a real thing.
> 
> There isn't a real name for any given culture because culture is such an 
> organic
> thing. When I think of codes of conduct I come back to i.e. Linus giving 
> people
> a hard time in code reviews, or Coraline Ada Ehmke's critiques of meritocracy.
> Neither of these beliefs about what culture should be (Linus' or Coraline's) 
> are
> objectively right or objectively wrong, but both are likely to attract 
> different
> people, and result in different outcomes.

We will certainly have to adapt to the recognition that the human race is in 
great
danger because of our politics going crazy and nationalism being a serious 
treat.  
Our world must turn itself into a new set of people that is unlike the 
generation
that brought us in free software - just one corner of the western world.  In 
2016, Cosmologist Stephen Hawking warned us to stop reaching out to aliens 
before it's 
too late.  His assessment was that distant alien civilisations might view us as
inferior, weak, and perfect to conquer.  

We barely averted nuclear annihilation in the later half of last century.  The 
problem
is that we have not adapted ourselves to control all the power we already have. 
 Science and technology has empowered us too much.  After destroying much of 
the vegetal and animal species on Earth, we have started destroying ourselves, 
like other civilisations have destroyed themselves in the past.  But this time, 
the collapse may be global.

Good luck with death! 
 
> When I refer to a 'California cultural standard', that's not prescriptive. 
> It's
> just a reference to the fact that a *lot* of the SC live in California, and 
> any
> culture prescribed by the steering committee will be overly influenced by that
> commonality. You will have ideas about what is welcoming, what is polite, etc
> which are shaped by your upbringing just as I or anyone else does. These are
> not objective truths, or internationally accepted as such.
> 
> > > I'd be interested to know where you draw the line as to what behavior is
> > > related to the project, or if you don't draw a line, why volunteers in 
> > > China,
> > > Russia, Poland etc should be expected to accept an entire political 
> > > doctrine
> > > over their life to contribute to a compiler toolchain.
> >
> > How did we get to accepting an entire political doctrine?
> >
> > What I have in mind is treating people with respect. For example, I'm
> > involved with the Go programming language. The Go community has a
> > code of conduct: https://golang.org/conduct. The key elements are:
> >
> > - Be friendly and welcoming
> > - Be patient
> > Remember that people have varying communication styles and that not
> > everyone is using their native language. (Meaning and tone can be lost
> > in translation.)
> > - Be thoughtful
> > Productive communication requires effort. Think about how your words
> > will be interpreted.
> > Remember that sometimes it is best to refrain entirely from commenting.
> > - Be respectful
> > In particular, respect differences of opinion.
> > - Be charitable
> > Interpret the arguments of others in good faith, do not seek to
> > disagree.
> > When we do disagree, try to understand why.
> >
> > Avoid destructive behavior:
> >
> > Derailing: stay on topic; if you want to talk about something else,
> > start a new conversation.
> > Unconstructive criticism: don't merely decry the current state of
> > affairs; offer—or at least solicit—suggestions as to how things may
> > be
> > improved.
> > Snarking (pithy, unproductive, sniping comments)
> > Discussing potentially offensive or sensitive issues; this all too
> > often leads to unnecessary conflict.
> > Microaggressions: brief and commonplace verbal, behavioral and
> > environmental indignities that communicate hostile, derogatory or
> > negative slights and insults to a 

[Bug libstdc++/100128] New: Behavior and performance depends on order of ctype.h and stdlib.h include

2021-04-16 Thread travis.downs at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100128

Bug ID: 100128
   Summary: Behavior and performance depends on order of ctype.h
and stdlib.h include
   Product: gcc
   Version: 10.3.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: travis.downs at gmail dot com
  Target Milestone: ---

When ctype.h is included as the first header in a file, it will be processed
without __NO_CTYPE being defined. This results in several differences versus
the case where __NO_CTYPE is defined.

For example, toupper() is defined as extern inline or as a macro if __NO_CTYPE
is undefed, but is not defined (only declared), otherwise. 

As another example, is_alnum_l and many similar methods will be defined as
macros if __NO_CTYPE is undefined, but otherwise will not.

On the other hand, if you include stdlib.h (or many other files such as
) in a C++ compile, the C++ "override" file
include/c++/10.3.0/stdlib.h gets included, which ultimately ends up including
x86_64-linux-gnu/bits/os_defines.h which defines __NO_CTYPE.

If  is subsequently included, its effect is different as described
above.

I suppose this is an ODR violation in one way or another (e.g., if two files
are included in the same program with and without __NO_CTYPE), and it can also
have a significant impact on performance as described here:

https://travisdowns.github.io/blog/2019/11/19/toupper.html

Evidently, the behavior and definitions exposed by these headers should not
depend on the order of include. I suspect there are other cases besides the
__NO_CTYPE as long as files that don't trigger the C++ header include chain
like ctype.h exist.

You can play with this example on godbolt:

https://godbolt.org/z/vY4EnE51z

Try swapping the order of ctype and stdlib includes to see the effect. The int
variables are canaries so you can see which macros were defined in the
preprocessed output.

This is the same as glibc bug #25214, but I was advised over there than this
should be filed against libstdc++ instead.

https://sourceware.org/bugzilla/show_bug.cgi?id=25214

[Bug c++/100124] Why is "flexible array member '...' in an otherwise empty '...'" an issue?

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100124

Martin Sebor  changed:

   What|Removed |Added

 CC||msebor at gcc dot gnu.org

--- Comment #3 from Martin Sebor  ---
The reason why G++ rejects structs with a flexible array as the sole member is
because GCC (in C mode) doesn't accept them.  Git log indicates that GCC
started rejecting such code in r38705, which was committed as part of array
member initialization cleanup.  I don't know why the author of the change chose
to reject such structs rather than accepting them with a warning, just like
empty structs are accepted.  If he had, C++ might have followed suit.  At this
point, I don't see GCC (in either mode) making a change unless C itself were to
change first.  That seems highly unlikely to me (the last proposal to relax the
rules for flexible array members didn't go anywhere).

[Bug fortran/100120] associated intrinsic failure

2021-04-16 Thread jrfsousa at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100120

--- Comment #2 from José Rui Faustino de Sousa  ---
Patch posted.

https://gcc.gnu.org/pipermail/fortran/2021-April/055942.html

[Bug fortran/100098] Polymorphic pointers and allocatables have incorrect rank

2021-04-16 Thread jrfsousa at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100098

--- Comment #2 from José Rui Faustino de Sousa  ---
Patch posted.

https://gcc.gnu.org/pipermail/fortran/2021-April/055933.html

[Bug fortran/100097] Unlimited polymorphic pointers and allocatables have incorrect rank

2021-04-16 Thread jrfsousa at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100097

--- Comment #2 from José Rui Faustino de Sousa  ---
Patch posted.

https://gcc.gnu.org/pipermail/fortran/2021-April/055933.html

[Bug fortran/100094] Undefined pointers have incorrect rank when using optimization

2021-04-16 Thread jrfsousa at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100094

--- Comment #3 from José Rui Faustino de Sousa  ---
(In reply to kargl from comment #1)
> Isn't the code invalid Fortran because it references an undefined pointer?
> If yes, the compiler is allows to do whatever it wants with the code.

AFAIK that is correct off all the "associate-like" constructs, the only
exception is select rank.

11.1.10.3 Attributes of a SELECT RANK associate name, paragraph 3:

"The associating entity has the ALLOCATABLE, POINTER, or TARGET attribute if
the selector has that attribute. The other attributes of the associating entity
are described in 11.1.3.3."

Best regards,
José Rui

Re: removing toxic emailers

2021-04-16 Thread Frosku
On Fri Apr 16, 2021 at 5:28 PM BST, Ian Lance Taylor wrote:
> On Thu, Apr 15, 2021 at 9:08 PM Frosku  wrote:
> >
> > On the other hand, I also think that a project which goes too far in
> > policing speech, especially speech unrelated to the project, will drive away
> > talented people who are more than willing to comply with the project's norms
> > within the project's spaces. Trying to enforce the 'California cultural
> > standard' on not only someone's interactions with the project but their
> > entire life (which may be lived in a very different cultural setting) seems
> > very invasive and culturally exclusionary.
>
> I do live in California, but I don't know what the "California
> cultural standard" is. It's a big place, and it's full of people who
> behave in all kinds of different ways. Harvey Weinstein and
> brogrammer culture are California cultures. You presumably have
> something in mind, but I'm not sure it's a real thing.

There isn't a real name for any given culture because culture is such an organic
thing. When I think of codes of conduct I come back to i.e. Linus giving people
a hard time in code reviews, or Coraline Ada Ehmke's critiques of meritocracy.
Neither of these beliefs about what culture should be (Linus' or Coraline's) are
objectively right or objectively wrong, but both are likely to attract different
people, and result in different outcomes.

When I refer to a 'California cultural standard', that's not prescriptive. It's
just a reference to the fact that a *lot* of the SC live in California, and any
culture prescribed by the steering committee will be overly influenced by that
commonality. You will have ideas about what is welcoming, what is polite, etc
which are shaped by your upbringing just as I or anyone else does. These are
not objective truths, or internationally accepted as such.

> > I'd be interested to know where you draw the line as to what behavior is
> > related to the project, or if you don't draw a line, why volunteers in 
> > China,
> > Russia, Poland etc should be expected to accept an entire political doctrine
> > over their life to contribute to a compiler toolchain.
>
> How did we get to accepting an entire political doctrine?
>
> What I have in mind is treating people with respect. For example, I'm
> involved with the Go programming language. The Go community has a
> code of conduct: https://golang.org/conduct. The key elements are:
>
> - Be friendly and welcoming
> - Be patient
> Remember that people have varying communication styles and that not
> everyone is using their native language. (Meaning and tone can be lost
> in translation.)
> - Be thoughtful
> Productive communication requires effort. Think about how your words
> will be interpreted.
> Remember that sometimes it is best to refrain entirely from commenting.
> - Be respectful
> In particular, respect differences of opinion.
> - Be charitable
> Interpret the arguments of others in good faith, do not seek to
> disagree.
> When we do disagree, try to understand why.
>
> Avoid destructive behavior:
>
> Derailing: stay on topic; if you want to talk about something else,
> start a new conversation.
> Unconstructive criticism: don't merely decry the current state of
> affairs; offer—or at least solicit—suggestions as to how things may
> be
> improved.
> Snarking (pithy, unproductive, sniping comments)
> Discussing potentially offensive or sensitive issues; this all too
> often leads to unnecessary conflict.
> Microaggressions: brief and commonplace verbal, behavioral and
> environmental indignities that communicate hostile, derogatory or
> negative slights and insults to a person or group.

I certainly prefer it to the Contributor Covenant, however the last
point ('microaggressions') is an example of 'California culture'. In
most of the world, we do not have any such concept. The examples I've
seen online for what counts as a microaggression include asking questions
like "where are you from?"

I'm assuming this is considered offensive because there's a trend of using
it to imply that someone "isn't welcome" in the local area, but in most of
the world this isn't considered an offensive question. As someone who
spends the vast majority of my time in countries that aren't my birthplace,
it's one of the questions I hear the most.

I'm not sure that most of us who live outside of cultures where "micro-
-aggressions" are a commonly referenced 'thing' would know if we're making
one or just being friendly. As an aside, would this be applied to
communication in GCC spaces or to all off-list communications i.e. Twitter
/ Weibo postings, e-mails, things said at unrelated conferences?

> And I have to note that I have seen very few people here saying "RMS
> must never participate in GCC in any way." What I see most people
> saying is "RMS should not be in a position of leading the GCC project
> and telling people what to do."

My concern here is that if not RMS/GNU -- an institution which most free
software 

[Bug fortran/100040] Wrong code with intent out assumed-rank allocatable

2021-04-16 Thread jrfsousa at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100040

--- Comment #2 from José Rui Faustino de Sousa  ---
Patch posted.

https://gcc.gnu.org/pipermail/fortran/2021-April/055924.html

[Bug fortran/100029] ICE on subroutine call with allocatable polymorphic assumed-rank argument

2021-04-16 Thread jrfsousa at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100029

--- Comment #2 from José Rui Faustino de Sousa  ---
Patch posted.

https://gcc.gnu.org/pipermail/fortran/2021-April/055924.html

[PATCH] c++: Fix pretty printing of function pointer type [PR98767]

2021-04-16 Thread Patrick Palka via Gcc-patches
When pretty printing a function pointer type via
pp_cxx_parameter_declaration_clause, we end up always printing an empty
parameter list because the loop that's supposed to print the parameter
list iterates over 'args' instead of 'types', and 'args' is empty in
this case when a FUNCTION_TYPE is passed to this routine (as opposed
to a FUNCTION_DECL).

This patch fixes this by making the loop iterator over 'types' instead.
This patch also moves the retrofitted PARM_DECL printing from this
routine to pp_cxx_requires_expr, the only caller that uses it.  This
simplification lets us easily output the trailing '...' in the parameter
list of a variadic function, which this patch also implements.

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

gcc/cp/ChangeLog:

PR c++/98767
* cxx-pretty-print.c (pp_cxx_parameter_declaration_clause): Fix
loop over parameter list to iterate over 'types' instead of
'args'.  Output the trailing '...' for a variadic function.
Remove PARM_DECL support.
(pp_cxx_requires_expr): Pretty print the parameter list directly
instead of going through pp_cxx_parameter_declaration_clause.

gcc/testsuite/ChangeLog:

PR c++/98767
* g++.dg/concepts/diagnostic16.C: New test.
---
 gcc/cp/cxx-pretty-print.c| 48 
 gcc/testsuite/g++.dg/concepts/diagnostic16.C | 17 +++
 2 files changed, 46 insertions(+), 19 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/concepts/diagnostic16.C

diff --git a/gcc/cp/cxx-pretty-print.c b/gcc/cp/cxx-pretty-print.c
index a22eea5239c..894472e26e0 100644
--- a/gcc/cp/cxx-pretty-print.c
+++ b/gcc/cp/cxx-pretty-print.c
@@ -1537,34 +1537,27 @@ pp_cxx_parameter_declaration (cxx_pretty_printer *pp, 
tree t)
 static void
 pp_cxx_parameter_declaration_clause (cxx_pretty_printer *pp, tree t)
 {
-  tree args;
-  tree types;
-  bool abstract;
-
-  // For a requires clause or the explicit printing of a parameter list
-  // we expect T to be a chain of PARM_DECLs. Otherwise, the list of
-  // args and types are taken from the function decl T.
-  if (TREE_CODE (t) == PARM_DECL)
+  gcc_assert (FUNC_OR_METHOD_TYPE_P (t) || TREE_CODE (t) == FUNCTION_DECL);
+  tree types, args;
+  if (TYPE_P (t))
 {
-  args = t;
-  types = t;
-  abstract = false;
+  types = TYPE_ARG_TYPES (t);
+  args = NULL_TREE;
 }
   else
 {
-  bool type_p = TYPE_P (t);
-  args = type_p ? NULL : FUNCTION_FIRST_USER_PARM (t);
-  types = type_p ? TYPE_ARG_TYPES (t) : FUNCTION_FIRST_USER_PARMTYPE (t);
-  abstract = args == NULL || pp->flags & pp_c_flag_abstract;
+  types = FUNCTION_FIRST_USER_PARMTYPE (t);
+  args = FUNCTION_FIRST_USER_PARM (t);
 }
-  bool first = true;
+  bool abstract = !args || (pp->flags & pp_c_flag_abstract);
 
   /* Skip artificial parameter for non-static member functions.  */
   if (TREE_CODE (t) == METHOD_TYPE)
 types = TREE_CHAIN (types);
 
+  bool first = true;
   pp_cxx_left_paren (pp);
-  for (; args; args = TREE_CHAIN (args), types = TREE_CHAIN (types))
+  for (; types && types != void_list_node; types = TREE_CHAIN (types))
 {
   if (!first)
pp_cxx_separate_with (pp, ',');
@@ -1577,6 +1570,14 @@ pp_cxx_parameter_declaration_clause (cxx_pretty_printer 
*pp, tree t)
  pp_cxx_whitespace (pp);
  pp->assignment_expression (TREE_PURPOSE (types));
}
+  if (!abstract)
+   args = TREE_CHAIN (args);
+}
+  if (!types)
+{
+  if (!first)
+   pp_cxx_separate_with (pp, ',');
+  pp_cxx_ws_string (pp, "...");
 }
   pp_cxx_right_paren (pp);
 }
@@ -2775,9 +2776,18 @@ void
 pp_cxx_requires_expr (cxx_pretty_printer *pp, tree t)
 {
   pp_string (pp, "requires");
-  if (tree parms = TREE_OPERAND (t, 0))
+  if (tree parms = REQUIRES_EXPR_PARMS (t))
 {
-  pp_cxx_parameter_declaration_clause (pp, parms);
+  bool first = true;
+  pp_cxx_left_paren (pp);
+  for (; parms; parms = TREE_CHAIN (parms))
+   {
+ if (!first)
+   pp_cxx_separate_with (pp, ',' );
+ first = false;
+ pp_cxx_parameter_declaration (pp, parms);
+   }
+  pp_cxx_right_paren (pp);
   pp_cxx_whitespace (pp);
 }
   pp_cxx_requirement_body (pp, TREE_OPERAND (t, 1));
diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic16.C 
b/gcc/testsuite/g++.dg/concepts/diagnostic16.C
new file mode 100644
index 000..49d5733faea
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic16.C
@@ -0,0 +1,17 @@
+// PR c++/98767
+// { dg-do compile { target c++20 } }
+
+template 
+concept Callable = requires(Function func, Args... args) { func(args...); };
+
+static_assert(Callable); // { dg-error "failed" }
+// { dg-message {Function = int \(\*\)\(\)} "" { target *-*-* } 5 }
+
+static_assert(Callable); // { dg-error "failed" }
+// { dg-message {Function = char \(\*\)\(int\*\)} "" { target *-*-* } 5 }
+

[Bug c++/98767] Function signature lost in concept diagnostic message

2021-04-16 Thread ppalka at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98767

Patrick Palka  changed:

   What|Removed |Added

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

gcc-9-20210416 is now available

2021-04-16 Thread GCC Administrator via Gcc
Snapshot gcc-9-20210416 is now available on
  https://gcc.gnu.org/pub/gcc/snapshots/9-20210416/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 9 git branch
with the following options: git://gcc.gnu.org/git/gcc.git branch releases/gcc-9 
revision c09606e71d71320e4a0663fe5f825359ba92ce16

You'll find:

 gcc-9-20210416.tar.xzComplete GCC

  SHA256=433bf39412d078f0679219cf4441c407ef836ad03e36831a12188f8d269984d8
  SHA1=fbba58c17ec5591a93ff474bb8a574cb943e6ce6

Diffs from 9-20210409 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-9
link is updated and a message is sent to the gcc list.  Please do not use
a snapshot before it has been announced that way.


[Bug fortran/69360] loop optimization produces invalid code when a common array has dimension 1 in some files

2021-04-16 Thread johnnorthall263 at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69360

--- Comment #4 from John Northall  ---
O dear - that makes gfortran unusable on many existing codes - not really
satisfactory is it?
John

On Fri, Apr 16, 2021 at 11:08 PM pinskia at gcc dot gnu.org <
gcc-bugzi...@gcc.gnu.org> wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69360
>
> Andrew Pinski  changed:
>
>What|Removed |Added
>
> 
>  CC||johnnorthall263 at gmail
> dot com
>
> --- Comment #3 from Andrew Pinski  ---
> *** Bug 100123 has been marked as a duplicate of this bug. ***
>
> --
> You are receiving this mail because:
> You are on the CC list for the bug.

[Bug middle-end/93100] gcc -fsanitize=address inhibits -Wuninitialized

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93100
Bug 93100 depends on bug 98508, which changed state.

Bug 98508 Summary: Sanitizer disable -Wall and -Wextra
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98508

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |DUPLICATE

[Bug middle-end/93100] gcc -fsanitize=address inhibits -Wuninitialized

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93100

Martin Sebor  changed:

   What|Removed |Added

 CC||awdawdawdawq123123 at gmx dot 
de

--- Comment #3 from Martin Sebor  ---
*** Bug 98508 has been marked as a duplicate of this bug. ***

[Bug middle-end/24639] [meta-bug] bug to track all Wuninitialized issues

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
Bug 24639 depends on bug 98508, which changed state.

Bug 98508 Summary: Sanitizer disable -Wall and -Wextra
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98508

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |DUPLICATE

[Bug middle-end/98508] Sanitizer disable -Wall and -Wextra

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98508

Martin Sebor  changed:

   What|Removed |Added

 Resolution|--- |DUPLICATE
 Status|NEW |RESOLVED

--- Comment #6 from Martin Sebor  ---
Resolving as a duplicate of pr93100.

*** This bug has been marked as a duplicate of bug 93100 ***

[Bug middle-end/93100] gcc -fsanitize=address inhibits -Wuninitialized

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93100

Martin Sebor  changed:

   What|Removed |Added

  Known to fail||10.2.1, 11.0, 9.3.0
 CC||msebor at gcc dot gnu.org
  Component|sanitizer   |middle-end
   Last reconfirmed|2020-01-09 00:00:00 |2021-4-16
 Status|NEW |ASSIGNED
 Depends on||98508
   Assignee|unassigned at gcc dot gnu.org  |msebor at gcc dot 
gnu.org

--- Comment #2 from Martin Sebor  ---
Reconfirming with GCC 11.  The reason for the false negative is that
instrumentation functions injected by the sanitizers look to the warning like
they might initialize the variables.  That's simply because the warning hasn't
been taught they're special and don't write to the variables.  The patch in
pr98508 comment 5 enables the warning.  Let me submit it for GCC 12.

void f ()
{
  struct A b;
  struct A a;
  int _1;

   :
  # .MEM_4 = VDEF <.MEM_3(D)>
  .ASAN_MARK (UNPOISON, , 8);   <<< assumed to write to a
  # VUSE <.MEM_4>
  _1 = a.i;   <<< missing warning
  if (_1 != 0)
goto ; [INV]
  else
goto ; [INV]

   :
  # .MEM_5 = VDEF <.MEM_4>
  b = a;

   :
  # .MEM_2 = PHI <.MEM_4(2), .MEM_5(3)>
  # .MEM_6 = VDEF <.MEM_2>
  .ASAN_MARK (POISON, , 8);
  # VUSE <.MEM_6>
  return;

}


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98508
[Bug 98508] Sanitizer disable -Wall and -Wextra

[Bug c++/100127] New: [coroutines] internal compiler error compiling promise with custom awaiter

2021-04-16 Thread riki--b at hotmail dot it via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100127

Bug ID: 100127
   Summary: [coroutines] internal compiler error compiling promise
with custom awaiter
   Product: gcc
   Version: 10.2.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: riki--b at hotmail dot it
  Target Milestone: ---

Created attachment 50621
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50621=edit
Preprocessed source

The following code (preprocessed source in attachments) does not compile and
causes a compiler segfault:

```
#include 
#include 

struct future
{
using value_type = int;
struct promise_type;
using handle_type = std::coroutine_handle;

handle_type _coroutine;

future(handle_type h) : _coroutine{h} {}

~future() noexcept{
if (_coroutine) {
_coroutine.destroy();
}
}

value_type get() {
auto ptr = _coroutine.promise()._value;
return *ptr;
}

struct promise_type {
std::optional _value = std::nullopt;

future get_return_object() {
return future{handle_type::from_promise(*this)};
}
void return_value(value_type val) {
_value = static_cast(val);
}
auto initial_suspend() noexcept {
class awaiter {
std::optional & value;
public:
explicit awaiter(std::optional & val) noexcept :
value{val} {}
bool await_ready() noexcept { return value.has_value(); }
void await_suspend(handle_type) noexcept { }
value_type & await_resume() noexcept { return *value; }
};

return awaiter{_value};
}
std::suspend_always final_suspend() noexcept {
return {};
}
void return_void() {}
void unhandled_exception() {}
};
};

future create_future()
{ co_return 2021; }

int main()
{ auto f = create_future(); }

```
Returning `std::suspend_never{}` instead of the awaiter compiles correctly.

Output of g++ -v -save-temps -std=c++20 -fcoroutines ${source}.cpp:
```
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib
--libexecdir=/usr/lib --ma
ndir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=https://bugs.archlinux.org/ --enable-languag
es=c,c++,ada,fortran,go,lto,objc,obj-c++,d --with-isl
--with-linker-hash-style=gnu --with-system-zlib --
enable-__cxa_atexit --enable-cet=auto --enable-checking=release
--enable-clocale=gnu --enable-default-pi
e --enable-default-ssp --enable-gnu-indirect-function
--enable-gnu-unique-object --enable-install-libibe
rty --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin
--enable-shared --enable-thr
eads=posix --disable-libssp --disable-libstdcxx-pch
--disable-libunwind-exceptions --disable-werror gdc_
include_dir=/usr/include/dlang/gdc
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.0 (GCC)
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++2a' '-fcoroutines'
'-shared-libgcc' '-mtune=generic' '-m
arch=x86-64'
 /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/cc1plus -E -quiet -v -D_GNU_SOURCE
test_bug.cpp -mtune=generic
-march=x86-64 -std=c++2a -fcoroutines -fpch-preprocess -o test_bug.ii
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../x86_64-pc-linux-gnu/
include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0

/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/x86_64-pc-linux-gnu

/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/../../../../include/c++/10.2.0/backward
 /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include
 /usr/local/include
 /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include-fixed
 /usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++2a' '-fcoroutines'
'-shared-libgcc' '-mtune=generic' '-m
arch=x86-64'
 /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/cc1plus -fpreprocessed test_bug.ii
-quiet -dumpbase test_bug.cp
p -mtune=generic -march=x86-64 -auxbase test_bug -std=c++2a -version
-fcoroutines -o test_bug.s
GNU C++17 (GCC) version 10.2.0 (x86_64-pc-linux-gnu)
compiled by GNU C version 10.2.0, GMP version 6.2.1, MPFR version
4.1.0, MPC version 1.2.1, isl
version isl-0.21-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++17 (GCC) version 10.2.0 (x86_64-pc-linux-gnu)
compiled by GNU C version 10.2.0, GMP version 6.2.1, MPFR version
4.1.0, MPC version 1.2.1, isl
version isl-0.21-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 

[Bug target/63545] ICE when building GCC for ia64-hp-hpux11.23 in hash_table::find_slot_with_hash

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63545

Andrew Pinski  changed:

   What|Removed |Added

 Ever confirmed|0   |1
 Status|UNCONFIRMED |WAITING
   Last reconfirmed|2014-10-16 00:00:00 |2021-04-16

--- Comment #10 from Andrew Pinski  ---
Does this still happen with GCC 8 and above?

[Bug tree-optimization/89976] [9/10/11 Regression] missing -Wuninitialized for struct member due to sra and TREE_NO_WARNING

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89976

Martin Sebor  changed:

   What|Removed |Added

  Component|c++ |tree-optimization
Summary|missing uninitialized   |[9/10/11 Regression]
   |warning for uninitialized   |missing -Wuninitialized for
   |struct member (VOPs)|struct member due to sra
   ||and TREE_NO_WARNING
   Last reconfirmed|2019-11-02 00:00:00 |2021-4-16
 CC||msebor at gcc dot gnu.org
  Known to fail||10.2.0, 11.0, 4.5.3, 4.6.4,
   ||4.9.4, 5.5.0, 6.4.0, 7.2.0,
   ||8.3.0, 9.1.0

--- Comment #4 from Martin Sebor  ---
In all cases and with -O1 and above, the uninitialized read is clearly visible
in the IL but it's suppressed because the variable (such as x$x in case 1) has
the TREE_NO_WARNING bit set.  This appears to be regression introduced in GCC
4.5 in r147980.

gcc -O1 -S -Wall -std=c++14 -fdump-tree-uninit=/dev/stdout pr89976.C 

;; Function foo (_Z3foov, funcdef_no=3, decl_uid=2098, cgraph_uid=4,
symbol_order=3)

struct X foo ()
{
  int x$x; <<< TREE_NO_WARNING == 1
  struct X D.2133;

   [local count: 1073741824]:
  D.2133.x = x$x_2(D); <<< uninitialized read
  D.2133.y = 0;
  return D.2133;

}



;; Function main (main, funcdef_no=4, decl_uid=2129, cgraph_uid=5,
symbol_order=4) (executed once)

int main ()
{
  int x$x; <<< TREE_NO_WARNING == 1
  struct X D.2156;
  struct X x;

   [local count: 1073741824]:
  x ={v} {CLOBBER};
  return x$x_5(D); <<< uninitialized read

}

[Bug middle-end/61577] [4.9.0 Regression] can't compile on hp-ux v3 ia64

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61577

Andrew Pinski  changed:

   What|Removed |Added

 Status|NEW |WAITING

--- Comment #213 from Andrew Pinski  ---
Does this still happen with GCC 8 or above?

[Bug bootstrap/64919] bootstrap failure of gcc-4.9.2 on ia64-hpux in libgcc

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64919

--- Comment #38 from Andrew Pinski  ---
It has been 2 years, does this still happen?

[Bug tree-optimization/89697] [9/10/11 Regression] SRA prevents -Wuninitialized warning

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89697

Martin Sebor  changed:

   What|Removed |Added

  Known to fail|9.2.0   |4.3.0, 4.8.4, 4.9.4, 5.5.0,
   ||6.4.0, 7.2.0, 8.3.0, 9.1.0
Summary|SRA prevents|[9/10/11 Regression] SRA
   |-Wuninitialized warning |prevents -Wuninitialized
   ||warning

--- Comment #3 from Martin Sebor  ---
Bisection points to r128908 as the first revision when GCC failed to warn.

[Bug fortran/69360] loop optimization produces invalid code when a common array has dimension 1 in some files

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69360

Andrew Pinski  changed:

   What|Removed |Added

 CC||johnnorthall263 at gmail dot 
com

--- Comment #3 from Andrew Pinski  ---
*** Bug 100123 has been marked as a duplicate of this bug. ***

[Bug fortran/100123] -ftree-fre gives incorrect result in subroutine with array declared as length 1

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100123

Andrew Pinski  changed:

   What|Removed |Added

 Resolution|--- |DUPLICATE
 Status|UNCONFIRMED |RESOLVED

--- Comment #1 from Andrew Pinski  ---
This code is undefined.
See PR 69360 and why.

*** This bug has been marked as a duplicate of bug 69360 ***

[Bug middle-end/24639] [meta-bug] bug to track all Wuninitialized issues

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
Bug 24639 depends on bug 89733, which changed state.

Bug 89733 Summary: [8/9/10/11 Regression] -Wuninitialized false positive with 
unclear message pointing to a class name
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89733

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |INVALID

[Bug regression/89733] [8/9/10/11 Regression] -Wuninitialized false positive with unclear message pointing to a class name

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89733

Martin Sebor  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 CC||msebor at gcc dot gnu.org
 Resolution|--- |INVALID

--- Comment #12 from Martin Sebor  ---
Confirming the unconditional uninitialized read in the IL for the test case in 
attachment 4599 and GCC correctly diagnoses it:

;; Function
boost::spirit::lex::lexertl::iterator >, boost::spirit::lex::lexertl::detail::data,
const char*, mpl_::bool_, mpl_::bool_ >
>::iterator >, const char*,
boost::spirit::lex::lexertl::functor >, boost::spirit::lex::lexertl::detail::data,
const char*, mpl_::bool_, mpl_::bool_ > >::iterator_data_type>
(_ZN5boost6spirit3lex7lexertl8iteratorINS2_7functorINS2_5tokenIPKcNS_3mpl6vectorIiN4mpl_2naESB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_SB_EENSA_5bool_ILb1EEEmEENS2_6detail4dataES7_SE_SE_EEEC2INS2_5lexerISF_S7_SI_E18iterator_data_typeEEERKT_RS7_RKS7_S7_,
funcdef_no=13218, decl_uid=464032, cgraph_uid=4528, symbol_order=4816)

void
boost::spirit::lex::lexertl::iterator >, boost::spirit::lex::lexertl::detail::data,
const char*, mpl_::bool_, mpl_::bool_ >
>::iterator >, const char*,
boost::spirit::lex::lexertl::functor >, boost::spirit::lex::lexertl::detail::data,
const char*, mpl_::bool_, mpl_::bool_ > >::iterator_data_type>
(struct iterator * const this, const struct iterator_data_type & iterdata_,
const char * & first, const char * const & last, const char_type * state)
{
  ...
   [local count: 1073741824]:
  MEM[(struct __as_base  &)] ={v} {CLOBBER};
  MEM[(struct data *)] ={v} {CLOBBER};
  MEM[(struct __as_base  &)] ={v} {CLOBBER};
  MEM[(struct data *)].first_ = first_6(D);
  _16 = MEM[(const char * const &)last_7(D)];
  MEM[(struct data *)].last_ = _16;
  _17 = *iterdata__5(D).state_machine_;
  MEM[(struct data *)].state_machine_ = _17;
  _18 = *iterdata__5(D).rules_;
  MEM[(struct data *)].rules_ = _18;
  _19 = MEM[(const struct internals &)_17]._seen_BOL_assertion;
  MEM[(struct data *)].bol_ = _19;
  MEM[(struct data *)].state_ = 0;
  _20 = *iterdata__5(D).actions_;
  MEM[(struct data *)].actions_ = _20;
  MEM[(struct data *)].hold_ = 0B;
  MEM[(struct variant *) + 72B] ={v} {CLOBBER};
  MEM[(struct aligned_storage *) + 80B] ={v} {CLOBBER};
  MEM  [(struct value_T *) + 80B] = _16;
  MEM  [(struct value_T *) + 88B] = _16;
  MEM[(struct variant *) + 72B].which_ = 0;
  MEM[(struct data *)].has_value_ = 0;
  MEM[(struct data *)].has_hold_ = 0;
  MEM[(struct pair *)] ={v} {CLOBBER};
  MEM[(struct __as_base  &) + 8] ={v} {CLOBBER};
  MEM[(struct data *) + 8B].D.426958 = MEM[(const struct data
&)].D.426958;
  MEM[(struct data *) + 8B].actions_ = _20;
  MEM[(struct data *) + 8B].hold_ = 0B;
  _57 = MEM[(const struct data &)].end_;   <<< -Wuninitialized
  MEM[(struct data *) + 8B].end_ = _57;


Likewise, the uninitialized read in the small test case in comment #7 is
diagnosed:

In copy constructor ‘X::X(const X&)’,
inlined from ‘Y::Y(T) [with T = X]’ at pr89733-c7.C:4:12,
inlined from ‘void foo()’ at pr89733-c7.C:18:3:
pr89733-c7.C:11:7: warning: ‘.X::end_’ is used uninitialized
[-Wuninitialized]
   11 | class X {
  |   ^
pr89733-c7.C: In function ‘void foo()’:
pr89733-c7.C:18:11: note: ‘’ declared here
   18 |   Y(X(0));
  |   ^

So resolving as invalid as per comment 6.

[Bug c++/100124] Why is "flexible array member '...' in an otherwise empty '...'" an issue?

2021-04-16 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100124

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek  ---
ISO C99 clearly says so:
6.7.2.1/16:
"As a special case, the last element of a structure with more than one named
member may have an incomplete array type; this is called a flexible array
member."

[Bug c++/100124] Why is "flexible array member '...' in an otherwise empty '...'" an issue?

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100124

--- Comment #1 from Andrew Pinski  ---
I will let someone comment on the flexible array extension.

But I will note GCC treats (all) arrays at the end of a POD struct as a
flexible one so the question I have is more about the ubsan issue you are
running into, is that with GCC or with clang/LLVM?

[Bug tree-optimization/85804] [8/9 Regression][AArch64] Mis-compilation of loop with strided array access and xor reduction

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85804

Andrew Pinski  changed:

   What|Removed |Added

  Known to work||10.0, 11.0
Summary|[8/9/10/11  |[8/9 Regression][AArch64]
   |Regression][AArch64]|Mis-compilation of loop
   |Mis-compilation of loop |with strided array access
   |with strided array access   |and xor reduction
   |and xor reduction   |
 Status|WAITING |NEW

--- Comment #14 from Andrew Pinski  ---
I tested it on both GCC 10.1 and the trunk with "-O3 -fno-vect-cost-model" Both
compilers work.

[Bug tree-optimization/100126] missing -Wuninitialized using a trivial member of class with another nontrivial member

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100126

Martin Sebor  changed:

   What|Removed |Added

   Keywords||diagnostic
   See Also||https://gcc.gnu.org/bugzill
   ||a/show_bug.cgi?id=88175
 Blocks||24639

--- Comment #1 from Martin Sebor  ---
The test case was derived from the one in pr88175 comment 16.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
[Bug 24639] [meta-bug] bug to track all Wuninitialized issues

[Bug tree-optimization/100126] New: missing -Wuninitialized using a trivial member of class with another nontrivial member

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100126

Bug ID: 100126
   Summary: missing -Wuninitialized using a trivial member of
class with another nontrivial member
   Product: gcc
   Version: 11.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

Reading an uninitialized trivial member of a struct that contains a member of a
type with a user-defined (or similar) ctor is not diagnosed.  The reason is
that the call to the ctor is (exceedingly) conservatively assumed to store into
the other members of the enclosing struct.

$ gcc -O1 -S -Wall -fdump-tree-uninit=/dev/stdout t.C

struct A
{
  char *p;
  A ();
};

struct B
{
  int i;
  A a;
};


void f ()
{
  B b;
  __builtin_printf ("%d\n", b.i);   // missing -Wuninitialized
}

;; Function f (_Z1fv, funcdef_no=0, decl_uid=2365, cgraph_uid=4,
symbol_order=3)

void f ()
{
  struct B b;
  int _1;

   [local count: 1073741824]:
  A::A ();  <<< assumed to set b.i
  _1 = b.i;
  __builtin_printf ("%d\n", _1);<<< missing -Wuninitialized
  b ={v} {CLOBBER};
  return;

}


This isn't C++ specific.  The same limitation affects C:

struct A
{
  char *p;
};

void init (struct A *);

struct B
{
  int i;
  struct A a;
};


void f ()
{
  struct B b;
  init ();
  __builtin_printf ("%d\n", b.i);
}

[Bug preprocessor/100125] New: -Wunused-macros generated while should be ignored; if undef is seen?

2021-04-16 Thread gcc at behdad dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100125

Bug ID: 100125
   Summary: -Wunused-macros generated while should be ignored; if
undef is seen?
   Product: gcc
   Version: 10.2.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: preprocessor
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gcc at behdad dot org
  Target Milestone: ---

We're facing this in HarfBuzz. I narrowed down the bug to this:

Works:

```c++
#pragma GCC diagnostic ignored "-Wunused-macros"

#define A B
```

$ g++ a.cc -c -Wunused-macros

(fine; no warning)

But if I add an `undef` to that file:

```c++
#pragma GCC diagnostic ignored "-Wunused-macros"

#define A B

#undef A
```

$ g++ a.cc -c -Wunused-macros
a.cc:3: warning: macros "A" is not used [-Wunused-macros]
3 | #define A B

Am I missing something?

[Bug target/100085] Bad code for union transfer from __float128 to vector types

2021-04-16 Thread munroesj at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100085

--- Comment #4 from Steven Munroe  ---
I am seeing this a similar problem with union transfers from __float128 to
__int128.


 static inline unsigned __int128
 vec_xfer_bin128_2_int128t (__binary128 f128)
 {
   __VF_128 vunion;

   vunion.vf1 = f128;

   return (vunion.ui1);
 }

and 

unsigned __int128
test_xfer_bin128_2_int128 (__binary128 f128)
{
  return vec_xfer_bin128_2_int128t (f128);
}

generates:

0030 :
  30:   57 12 42 f0 xxswapd vs34,vs34
  34:   20 00 20 39 li  r9,32
  38:   d0 ff 41 39 addir10,r1,-48
  3c:   99 4f 4a 7c stxvd2x vs34,r10,r9
  40:   f0 ff 61 e8 ld  r3,-16(r1)
  44:   f8 ff 81 e8 ld  r4,-8(r1)
  48:   20 00 80 4e blr

For POWER8 should use mfvsrd/xxpermdi/mfvsrd.

This looks like the root cause of poor performance for __float128 soft-float on
POWER8. A simple benchmark using __float128 in C code calling libgcc for
-mcpu=power8 and then hardware instructions for -mcpu=power9.

P8 target P8AT14, Uses libgcc __addkf3_sw and __mulkf3_sw:
test_time_f128 f128 CC  tb delta = 52589, sec = 0.000102713

P9 Target P8AT14, Uses libgcc __addkf3_hw and __mulkf3_hw:
test_time_f128 f128 CC  tb delta = 18762, sec = 3.66445e-05

P9 Target P9AT14, inline hardware binary128 float:
test_time_f128 f128 CC  tb delta = 3809, sec = 7.43945e-06

I used Valgrind Itrace and Sim-ppc and perfstat analysis. Every call to libgcc
__add/sub/mul/divkf3 takes a load-hit-store flush every call. This explains why
__float128 is so 13.8 X slower on P8 then P9.

[Bug c/100124] New: Why is "flexible array member '...' in an otherwise empty '...'" an issue?

2021-04-16 Thread gcc at behdad dot org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100124

Bug ID: 100124
   Summary: Why is "flexible array member '...' in an otherwise
empty '...'" an issue?
   Product: gcc
   Version: unknown
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: gcc at behdad dot org
  Target Milestone: ---

Hi,

In HarfBuzz we extensively use the Struct Hack [0]. Up until now we've used
"array[1]" for that. This upsets ubsan [1]. So I'm looking to replace it with
flexible arrays on compilers that support it.

However, trying to do that I get error if the flexible-array is the only
member. Clang has no issues with it, but gcc gives me: "flexible array member
'...' in an otherwise empty '...'".


```
struct UnsignedArray {
  int array[];
};
```

I've seen:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69550
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71742

which suggests that disallowing flexible arrays in structs that have no other
named member is intentional. But I cannot find the reason. Can someone please
help me understand, and suggest a solution here?

Note that if I use `int array[0]` instead, then gcc warns everytime in code we
access that array with a constexpr value, like `array[0]` when we know it's
safe to do. That is, gcc seems to treat `int array[0]` literally, not as a
flexible array.

Thank you.


[0] http://c-faq.com/struct/structhack.html
[1] https://github.com/harfbuzz/harfbuzz/issues/2953

[Bug middle-end/88175] GCC should not warn within implicit copy-constructor (or should report the implicit function in a special way)

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88175

Martin Sebor  changed:

   What|Removed |Added

 CC||msebor at gcc dot gnu.org

--- Comment #17 from Martin Sebor  ---
For the test case in attachment 45096 GCC 11 emits a nicer message:

In file included from header.cpp:5:
In member function ‘info& info::operator=(const info&)’,
inlined from ‘void test(info_t)’ at header.cpp:10:12:
header.h:8:16: warning: ‘copy.info::registered’ is used uninitialized
[-Wuninitialized]
header.cpp: In function ‘void test(info_t)’:
header.cpp:9:12: note: ‘copy’ declared here
In file included from header.cpp:5:
In copy constructor ‘info::info(const info&)’,
inlined from ‘int main()’ at header.cpp:21:9:
header.h:8:16: warning: ‘temp.info::registered’ is used uninitialized
[-Wuninitialized]
header.cpp: In function ‘int main()’:
header.cpp:19:12: note: ‘temp’ declared here

This looks pretty close to optimal to me.  The caret location for the
implicitly generated copy assignment is not ideal though.  It points to the
class definition like so:

In member function ‘info& info::operator=(const info&)’,
inlined from ‘void test(info_t)’ at pr88175-c0.C.C:12044:12:
pr88175-c0.C.C:12036:16: warning: ‘copy.info::registered’ is used uninitialized
[-Wuninitialized]
12036 | typedef struct info
  |^~~~
pr88175-c0.C.C: In function ‘void test(info_t)’:
pr88175-c0.C.C:12043:12: note: ‘copy’ declared here
12043 | info_t copy;
  |^~~~
In copy constructor ‘info::info(const info&)’,
inlined from ‘int main()’ at pr88175-c0.C.C:12051:9:
pr88175-c0.C.C:12036:16: warning: ‘temp.info::registered’ is used uninitialized
[-Wuninitialized]
12036 | typedef struct info
  |^~~~
pr88175-c0.C.C: In function ‘int main()’:
pr88175-c0.C.C:12050:12: note: ‘temp’ declared here
12050 | info_t temp;
  |^~~~

Pointing to the invocation of the special function might be a better choice. 
That should be doable by testing the DECL_ARTIFICIAL bit and using the other
location instead.

The test case in comment #16 isn't diagnosed by GCC 11 at any optimization
level anymore (a regression caused by r158271).  I think that's something to
handle separately.

[Bug fortran/100123] New: -ftree-fre gives incorrect result in subroutine with array declared as length 1

2021-04-16 Thread johnnorthall263 at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100123

Bug ID: 100123
   Summary: -ftree-fre gives incorrect result in subroutine with
array declared as length 1
   Product: gcc
   Version: 10.2.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: johnnorthall263 at gmail dot com
  Target Milestone: ---

Created attachment 50620
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50620=edit
source makefile and output from -save-temps

When compiling a program I found it works fine on -O0 but has problems with -Og
in a number of subroutines.  By trial and error I found that adding
-fno-tree-fre with -Og restores correct execution.  Further investigation of
one subroutine enabled the following simple example to demonstrate the problem.
 The subroutine setmid is designed to set a mid-point grid with option for
repeat boundary condition.  The correct mid-point y-coords are:-
 -1.00  1.00  3.00  5.00  7.00  9.00 11.00
13.00
but -Og gives:-
 -1.00  1.00  3.00  5.00  7.00  9.00 11.00
11.00
Swapping the order in which the repeat is applied simply shifts the error to
the other side of the grid.  Bizarrely simply changing the declared dimension
of XYM to 2 make it work!

First output from "gfortran -c -v -Wall -Wextra -Og -save-temps setmid.f" is:-

Using built-in specs.
COLLECT_GCC=gfortran
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-suse-linux
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info
--mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64
--enable-languages=c,c++,objc,fortran,obj-c++,ada,go,d
--enable-offload-targets=nvptx-none=/usr/nvptx-none,amdgcn-amdhsa=/usr/amdgcn-amdhsa,
--without-cuda-driver --enable-checking=release --disable-werror
--with-gxx-include-dir=/usr/include/c++/10 --enable-ssp --disable-libssp
--disable-libvtv --enable-cet=auto --disable-libcc1 --disable-plugin
--with-bugurl=https://bugs.opensuse.org/ --with-pkgversion='SUSE Linux'
--with-slibdir=/lib64 --with-system-zlib --enable-libstdcxx-allocator=new
--disable-libstdcxx-pch --enable-libphobos
--enable-version-specific-runtime-libs --with-gcc-major-version-only
--enable-linker-build-id --enable-linux-futex --enable-gnu-indirect-function
--program-suffix=-10 --without-system-libunwind --enable-multilib
--with-arch-32=x86-64 --with-tune=generic --build=x86_64-suse-linux
--host=x86_64-suse-linux
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.2.1 20200825 [revision c0746a1beb1ba073c7981eb09f55b3d993b32e5c]
(SUSE Linux) 
COLLECT_GCC_OPTIONS='-c' '-v' '-Wall' '-Wextra' '-Og' '-save-temps'
'-mtune=generic' '-march=x86-64'
 /usr/lib64/gcc/x86_64-suse-linux/10/f951 setmid.f -ffixed-form -quiet
-dumpbase setmid.f -mtune=generic -march=x86-64 -auxbase setmid -Og -Wall
-Wextra -version -fintrinsic-modules-path
/usr/lib64/gcc/x86_64-suse-linux/10/finclude -o setmid.s
GNU Fortran (SUSE Linux) version 10.2.1 20200825 [revision
c0746a1beb1ba073c7981eb09f55b3d993b32e5c] (x86_64-suse-linux)
compiled by GNU C version 10.2.1 20200825 [revision
c0746a1beb1ba073c7981eb09f55b3d993b32e5c], GMP version 6.1.2, MPFR version
4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU Fortran2008 (SUSE Linux) version 10.2.1 20200825 [revision
c0746a1beb1ba073c7981eb09f55b3d993b32e5c] (x86_64-suse-linux)
compiled by GNU C version 10.2.1 20200825 [revision
c0746a1beb1ba073c7981eb09f55b3d993b32e5c], GMP version 6.1.2, MPFR version
4.0.1, MPC version 1.1.0, isl version isl-0.18-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
COLLECT_GCC_OPTIONS='-c' '-v' '-Wall' '-Wextra' '-Og' '-save-temps'
'-mtune=generic' '-march=x86-64'
 /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/as -v
--64 -o setmid.o setmid.s
GNU assembler version 2.35.1 (x86_64-suse-linux) using BFD version (GNU
Binutils; openSUSE Leap 15.2) 2.35.1.20201123-lp152.4.6
COMPILER_PATH=/usr/lib64/gcc/x86_64-suse-linux/10/:/usr/lib64/gcc/x86_64-suse-linux/10/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/10/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/bin/
LIBRARY_PATH=/usr/lib64/gcc/x86_64-suse-linux/10/:/usr/lib64/gcc/x86_64-suse-linux/10/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/lib/:/usr/lib64/gcc/x86_64-suse-linux/10/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-c' '-v' '-Wall' '-Wextra' '-Og' '-save-temps'
'-mtune=generic' '-march=x86-64'

I will attach the source file, plus a short main to call it and a print to
display the result.  Also, I believe the output of 

[Bug fortran/49213] [OOP] gfortran rejects structure constructor expression

2021-04-16 Thread vladimir.fuka at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49213

Vladimir Fuka  changed:

   What|Removed |Added

 CC||vladimir.fuka at gmail dot com

--- Comment #33 from Vladimir Fuka  ---
GCC 11 was released and the problem is still present.

[Bug target/96770] -mpure-code produces suboptimal code for relocations with small offset for thumb-1

2021-04-16 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96770

--- Comment #5 from CVS Commits  ---
The master branch has been updated by Christophe Lyon :

https://gcc.gnu.org/g:0754a104bed7c8a937f0623ad15ca03387131210

commit r11-8227-g0754a104bed7c8a937f0623ad15ca03387131210
Author: Christophe Lyon 
Date:   Fri Apr 16 19:58:25 2021 +

testsuite/arm: Fix scan-assembler-times in pr96770.c with movt/movw

The previous change to this testcase missed the fact that the data may
be accessed via an anchor, depending on the optimization level,
leading to false failures.

This patch restricts matching to upper16:lower16 followed by
non-spaces, followed by +4 (in f4) or +320 (in f5).

Using '.*' instead of '[^ \]' would match accross the whole assembly
file, which is not what we want, hence the limitation with spaces.

2021-04-16  Christophe Lyon  

gcc/testsuite/
PR target/96770
* gcc.target/arm/pure-code/pr96770.c: Fix scan-assembler-times
with movt/movw.

[Bug c++/74762] [8/9/10/11 Regression] missing uninitialized warning (C++, parenthesized expr, TREE_NO_WARNING)

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=74762

Martin Sebor  changed:

   What|Removed |Added

  Known to fail||10.2.0, 11.0, 7.3.0, 8.3.0,
   ||9.2.0
   Last reconfirmed|2016-08-12 00:00:00 |2021-4-16

--- Comment #15 from Martin Sebor  ---
No change in GCC 11.

[Bug c/100121] RFE: plugin support for -Wformat via __attribute__((format()))

2021-04-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100121

--- Comment #1 from Andrew Pinski  ---
Related to PR 8294.

Also I think this project is referenced in PR 47781 even.

Re: [PATCH] libstdc++: Update ppc32 baseline_symbols.txt

2021-04-16 Thread Jonathan Wakely via Gcc-patches

On 16/04/21 20:48 +0200, Jakub Jelinek wrote:

On Fri, Apr 16, 2021 at 05:14:58PM +0200, Jakub Jelinek via Gcc-patches wrote:

As we have only one P1 left right now, I think it is the right time
to update abi list files in libstdc++.

Attached are two patches, one is update for x86_64/i?86/s390x/ppc64
linux (aarch64 seems to be correct already), the other one is the
ppc64 -> ppc64le diff.  I have yet to test what exactly it will do
on ppc64, whether we can share the same baseline_symbols.txt and it
will ignore the IEEE128 symbols like it should be ignoring LDBL symbols
when double double is not configured in, or whether we need
to have separate powerpc64le-linux-gnu directory.



2021-04-16  Jakub Jelinek  

* config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Update.
* config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/i486-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.


Tested on powerpc64{,le}-linux now (-m32/-m64 on be) and while the first
patch works fine, the second one unfortunately doesn't on either be or le,
so more work is needed there.  Thus, I'm withdrawing the second
* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.
only patch.

On the other side, when I was on powerpc64-linux, I've created a patch
for 32-bit powerpc.
Ok for trunk (this one and the x86_64/i?86/s390x/non-IEEE128 powerpc64 one)?


OK



Re: A suggestion for going forward from the RMS/FSF debate

2021-04-16 Thread Paul Koning via Gcc



> On Apr 16, 2021, at 2:41 PM, NightStrike via Gcc  wrote:
> 
>> ...
> 
> I was under the (likely incorrect, please enlighten me) impression
> that the meteoric rise of LLVM had more to do with the license
> allowing corporate contributors to ship derived works in binary form
> without sharing proprietary code. 

My impression is a variation on this: that LLVM is in substantial part 
motivated by a desire to avoid GPL V3.  And that there wasn't such a push when 
GPL V2 was the version in general use.

paul




[Bug libstdc++/100117] FAIL testsuite/17_intro/headers/c++1998/49745.cc with trunk glibc

2021-04-16 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100117

Jonathan Wakely  changed:

   What|Removed |Added

   See Also||https://gcc.gnu.org/bugzill
   ||a/show_bug.cgi?id=5

--- Comment #4 from Jonathan Wakely  ---
 includes all standard headers, including .

Maybe for the purposes of that test, what we should really check is that none
of the C++ headers (i.e. all except  and ) includes .

[Bug c++/99479] [modules] ICE Aborted signal terminated program cc1plus

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

--- Comment #10 from Alexander Lelyakin  ---
However adding parameter:
 --param=hash-table-verification-limit=1000 
turns this error to PR99861 ICE in hashtab_chk_error

/usr/local/bin/g++ --param=hash-table-verification-limit=$N -std=c++20
-fmodules-ts -x c++-system-header condition_variable
/usr/local/bin/g++ --param=hash-table-verification-limit=$N -std=c++20
-fmodules-ts -x c++-system-header iosfwd
/usr/local/bin/g++ --param=hash-table-verification-limit=$N -std=c++20
-fmodules-ts -x c++-system-header future

In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:156:74: error: wrong number of
template arguments (1, should be 2)
  156 |   template >
  |
 ^
In file included from /usr/local/include/c++/11.0.1/array:40,
 from /usr/local/include/c++/11.0.1/tuple:39,
 from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:451:11: note: provided for
‘template class std::istreambuf_iterator’
  451 | class istreambuf_iterator;
  |   ^~~
In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:158:75: error: wrong number of
template arguments (1, should be 2)
  158 |   template >
  |
  ^
In file included from /usr/local/include/c++/11.0.1/array:40,
 from /usr/local/include/c++/11.0.1/tuple:39,
 from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:454:11: note: provided for
‘template class std::ostreambuf_iterator’
  454 | class ostreambuf_iterator;
  |   ^~~
In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:177:75: error: wrong number of
template arguments (1, should be 2)
  177 |   template >
  |
  ^
In file included from /usr/local/include/c++/11.0.1/array:40,
 from /usr/local/include/c++/11.0.1/tuple:39,
 from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:451:11: note: provided for
‘template class std::istreambuf_iterator’
  451 | class istreambuf_iterator;
  |   ^~~
In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:179:75: error: wrong number of
template arguments (1, should be 2)
  179 |   template >
  |
  ^
In file included from /usr/local/include/c++/11.0.1/array:40,
 from /usr/local/include/c++/11.0.1/tuple:39,
 from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:451:11: note: provided for
‘template class std::istreambuf_iterator’
  451 | class istreambuf_iterator;
  |   ^~~
In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:182:75: error: wrong number of
template arguments (1, should be 2)
  182 |   template >
  |

[Bug c++/100122] template substitution triggers a segfault

2021-04-16 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100122

Marek Polacek  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |FIXED
 CC||mpolacek at gcc dot gnu.org

--- Comment #1 from Marek Polacek  ---
Already fixed by r11-3738.

[Bug c++/99479] [modules] ICE Aborted signal terminated program cc1plus

2021-04-16 Thread alexander.lelyakin at googlemail dot com via Gcc-bugs
from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:454:11: note: provided for
‘template class std::ostreambuf_iterator’
  454 | class ostreambuf_iterator;
  |   ^~~
In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:184:75: error: wrong number of
template arguments (1, should be 2)
  184 |   template >
  |
  ^
In file included from /usr/local/include/c++/11.0.1/array:40,
 from /usr/local/include/c++/11.0.1/tuple:39,
 from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:454:11: note: provided for
‘template class std::ostreambuf_iterator’
  454 | class ostreambuf_iterator;
  |   ^~~
In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:190:75: error: wrong number of
template arguments (1, should be 2)
  190 |   template >
  |
  ^
In file included from /usr/local/include/c++/11.0.1/array:40,
 from /usr/local/include/c++/11.0.1/tuple:39,
 from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:451:11: note: provided for
‘template class std::istreambuf_iterator’
  451 | class istreambuf_iterator;
  |   ^~~
In file included from /usr/local/include/c++/11.0.1/string:43,
 from /usr/local/include/c++/11.0.1/stdexcept:39,
 from /usr/local/include/c++/11.0.1/system_error:41,
 from /usr/local/include/c++/11.0.1/mutex:42,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/localefwd.h:192:75: error: wrong number of
template arguments (1, should be 2)
  192 |   template >
  |
  ^
In file included from /usr/local/include/c++/11.0.1/array:40,
 from /usr/local/include/c++/11.0.1/tuple:39,
 from /usr/local/include/c++/11.0.1/mutex:38,
 from /usr/local/include/c++/11.0.1/future:38:
/usr/local/include/c++/11.0.1/bits/stl_algobase.h:454:11: note: provided for
‘template class std::ostreambuf_iterator’
  454 | class ostreambuf_iterator;
  |   ^~~
corrupted double-linked list
corrupted double-linked list
g++: internal compiler error: Aborted signal terminated program cc1plus
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.

g++ (GCC) 11.0.1 20210416 (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 target/91710] [9/10 Regression] unexpected ABI change note since r9-5650

2021-04-16 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91710

Jakub Jelinek  changed:

   What|Removed |Added

Summary|[9/10/11 Regression]|[9/10 Regression]
   |unexpected ABI change note  |unexpected ABI change note
   |since r9-5650   |since r9-5650

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

[Bug target/91710] [9/10/11 Regression] unexpected ABI change note since r9-5650

2021-04-16 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91710

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

https://gcc.gnu.org/g:49813aad3292f7f2bef69206274da78a9a7116ed

commit r11-8226-g49813aad3292f7f2bef69206274da78a9a7116ed
Author: Jakub Jelinek 
Date:   Fri Apr 16 20:49:33 2021 +0200

aarch64: Don't emit -Wpsabi note when ABI was never affected [PR91710]

As the following testcase shows, we emit a -Wpsabi note about argument
passing change since GCC 9, but in reality the ABI didn't change.
The alignment is 8 bits in GCC < 9 and 32 bits in GCC >= 9 and
the aarch64_function_arg_alignment returns in that case:
return MIN (MAX (alignment, PARM_BOUNDARY), STACK_BOUNDARY);
so when both the old and new alignment are smaller or equal to
PARM_BOUNDARY
(or both are larger than STACK_BOUNDARY, just in theory), even when the new
one is bigger, it doesn't change the argument passing.

So, the following patch changes aarch64_function_arg_alignment to tell the
callers the exact old alignmentm so that they can test it if needed.
The other aarch64_function_arg_alignment callers either check the
alignment for equality against 16-byte alignment (when old alignment was
smaller than that and the new one is 16-byte, we want to emit -Wpsabi
in all the cases) or the va_arg case which I think is ok now too.

2021-04-16  Jakub Jelinek  

PR target/91710
* config/aarch64/aarch64.c (aarch64_function_arg_alignment): Change
abi_break argument from bool * to unsigned *, store there the
pre-GCC 9
alignment.
(aarch64_layout_arg, aarch64_gimplify_va_arg_expr): Adjust callers.
(aarch64_function_arg_regno_p): Likewise.  Only emit -Wpsabi note
if
the old and new alignment after applying MIN/MAX to it is
different.

* gcc.target/aarch64/pr91710.c: New test.

[PATCH] libstdc++: Update ppc32 baseline_symbols.txt

2021-04-16 Thread Jakub Jelinek via Gcc-patches
On Fri, Apr 16, 2021 at 05:14:58PM +0200, Jakub Jelinek via Gcc-patches wrote:
> As we have only one P1 left right now, I think it is the right time
> to update abi list files in libstdc++.
> 
> Attached are two patches, one is update for x86_64/i?86/s390x/ppc64
> linux (aarch64 seems to be correct already), the other one is the
> ppc64 -> ppc64le diff.  I have yet to test what exactly it will do
> on ppc64, whether we can share the same baseline_symbols.txt and it
> will ignore the IEEE128 symbols like it should be ignoring LDBL symbols
> when double double is not configured in, or whether we need
> to have separate powerpc64le-linux-gnu directory.

> 2021-04-16  Jakub Jelinek  
> 
>   * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update.
>   * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Update.
>   * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update.
>   * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Update.
>   * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Update.
>   * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.

Tested on powerpc64{,le}-linux now (-m32/-m64 on be) and while the first
patch works fine, the second one unfortunately doesn't on either be or le,
so more work is needed there.  Thus, I'm withdrawing the second
* config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update.
only patch.

On the other side, when I was on powerpc64-linux, I've created a patch
for 32-bit powerpc.
Ok for trunk (this one and the x86_64/i?86/s390x/non-IEEE128 powerpc64 one)?

2021-04-16  Jakub Jelinek  

* config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Update.
* config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: Update.

--- libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt.jj  
2020-12-03 20:32:34.311497207 +0100
+++ libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt 
2021-04-16 20:04:54.894440717 +0200
@@ -199,6 +199,14 @@ FUNC:_ZNK11__gnu_debug16_Error_formatter
 FUNC:_ZNK11__gnu_debug16_Error_formatter8_M_errorEv@@GLIBCXX_3.4
 FUNC:_ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv@@GLIBCXX_3.4
 FUNC:_ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_@@GLIBCXX_3.4
+FUNC:_ZNKRSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.29
+FUNC:_ZNKRSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.29
 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.5
 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4
 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE12find_last_ofEPKwj@@GLIBCXX_3.4
@@ -998,19 +1006,29 @@ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11c
 
FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4.21
 
FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS2_EEv@@GLIBCXX_3.4.26
 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE13get_allocatorEv@@GLIBCXX_3.4.29
 
FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29
+FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE13get_allocatorEv@@GLIBCXX_3.4.29
 
FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29
 
FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29
 
FUNC:_ZNKSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21
 
FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE4viewEv@@GLIBCXX_3.4.29
 
FUNC:_ZNKSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4.21
 
FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21
+FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE4viewEv@@GLIBCXX_3.4.29
 
FUNC:_ZNKSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4.21
 

Re: A suggestion for going forward from the RMS/FSF debate

2021-04-16 Thread NightStrike via Gcc
On Fri, Apr 16, 2021 at 7:23 AM Ville Voutilainen via Gcc
 wrote:
> On the first part, other people have touched on it already,
> but the fear of a dreaded non-free software vendor co-opting
> GCC as a library to a non-free project has resulted in GCC
> being unsuitable to be used as a library in free software
> projects. This approach alone made sure that the meteoric
> rise of LLVM happened; there are recorded statements
> from LLVM developers trying to talk about this to RMS,
> and the answer, as they phrased it, "wasn't useful", because
> RMS decided that GCC shouldn't be a library to make it
> harder to use it in conjunction with non-free programs.
>
> Congratulations, it remains hard to use in conjunction
> with free programs, and everybody who wants to do something
> like that looks at LLVM first. RMS made a lofty attempt to
> promote copyleft software for such purposes, and failed
> miserably, leading us into a situation where such problems
> are not solved with copyleft software, but with LLVM instead.

I was under the (likely incorrect, please enlighten me) impression
that the meteoric rise of LLVM had more to do with the license
allowing corporate contributors to ship derived works in binary form
without sharing proprietary code.  Intel, IBM, nVidia, etc. are
migrating towards LLVM for this purpose.  To do so using GCC would (I
believe; again, please correct me) require that they share more source
code than they would have to under LLVM.  This licensing model makes
working on LLVM more attractive to companies that wish to keep
proprietary code hidden, and thus LLVM garners a lot of corporate
backing.  It seems to me that technical differences (easier porting,
or early claims of better diagnostics, for instance) and culture
differences (let's just say that LLVM developers are more friendly,
although I've never encountered a mean GCC developer) are not the
driving force behind such strong support.  As usual in the world,
follow the money.

If the idea is that GCC-as-a-Library would enable Intel, for example,
to use GCC for their ICX OneAPI compiler the way they are now using
LLVM, with significant portions of it hidden from the user, it seems
to me that not supporting this is a very consistent GNU view.
Allowing derived works that don't publish the full source code seems
to be against the very spirit of GNU.  If the GCC project opts to
distance itself from various three letter acronyms, as a user, I have
to wonder what that means in the future regarding the strict adherence
to software freedoms that GCC has had for a long time now.

I don't think I would suggest that there would be an immediate knee
jerk reaction to change everything.  Instead, it seems that
https://en.wikipedia.org/wiki/Creeping_normality would take place to
slowly change the "Freedom first" ideology over time.  Maybe I'm jaded
by the recent changes to CentOS, where RedHat applied a Microsoft
tactic to embrace, extend, and extinguish it (at least in the form we
previously knew).  That took about ten years, but I can easily see how
the same thing could happen over a long period of time to GCC (note
that often when this has happened in history, including outside of the
computing world, it was difficult or impossible to predict how it
could end poorly. Padme's "thunderous applause" cheats, in that we saw
the sequels first :) )

It would be good, therefore, to address upfront how the software
freedoms of GCC users would be as consistently guaranteed in the
future as they are now.  Would a future GCC be committed to
universally blocking any hypothetical positive technical improvement
that also reduced user freedom?


[Bug tree-optimization/100081] [11 Regression] Compile time hog in irange since r11-4135-ge864d395b4e862ce

2021-04-16 Thread amacleod at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100081

Andrew Macleod  changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
   Assignee|unassigned at gcc dot gnu.org  |amacleod at redhat dot 
com

--- Comment #9 from Andrew Macleod  ---
Created attachment 50619
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50619=edit
proposed fix

I've added a depth limited for logical combinations.   In this patch its set to
6.. I'm going to try running it against various scenarios to make sure it
doesn't miss anything we do want... and of course I'll bootstrap and regtest
it.

If you want to try it, this should resolve the issue.

[Patch, fortran v2] PR fortran/84006, PR fortran/100027 - ICE on storage_size with polymorphic argument

2021-04-16 Thread José Rui Faustino de Sousa via Gcc-patches

Hi All!

Proposed patch to:
PR84006 - [8/9/10/11 Regression] ICE in storage_size() with CLASS entity
PR100027 - ICE on storage_size with polymorphic argument

Patch tested only on x86_64-pc-linux-gnu.

Add branch to if clause to handle polymorphic objects, not sure if I got 
all possible variations...


Now with a new and extended test.

Thank you very much.

Best regards,
José Rui

Fortran: Fix ICE using storage_size intrinsic [PR84006, PR100027]

gcc/fortran/ChangeLog:

PR fortran/84006
PR fortran/100027
* trans-intrinsic.c (gfc_conv_intrinsic_storage_size): add if
clause branch to handle polymorphic objects.

gcc/testsuite/ChangeLog:

PR fortran/84006
* gfortran.dg/PR84006.f90: New test.

PR fortran/100027
* gfortran.dg/PR100027.f90: New test.
diff --git a/configure b/configure
index 504f6410274..1be51708c03 100755
--- a/configure
+++ b/configure
@@ -756,6 +756,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -922,6 +923,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE}'
@@ -1174,6 +1176,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
 silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
 ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1311,7 +1322,7 @@ fi
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1471,6 +1482,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIRread-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIRmodifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR   modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIRobject code libraries [EPREFIX/lib]
   --includedir=DIRC header files [PREFIX/include]
   --oldincludedir=DIR C header files for non-gcc [/usr/include]
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 5e53d1162fa..6536c121f2b 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -8353,10 +8353,16 @@ gfc_conv_intrinsic_storage_size (gfc_se *se, gfc_expr *expr)
   if (arg->ts.type == BT_CLASS)
 	{
 	  if (arg->rank > 0)
-	tmp = gfc_class_vtab_size_get (
-		 GFC_DECL_SAVED_DESCRIPTOR (arg->symtree->n.sym->backend_decl));
+	{
+	  if (TREE_CODE (argse.expr) == COMPONENT_REF)
+		tmp = TREE_OPERAND (argse.expr, 0);
+	  else
+		tmp = GFC_DECL_SAVED_DESCRIPTOR (
+		  arg->symtree->n.sym->backend_decl);
+	}
 	  else
-	tmp = gfc_class_vtab_size_get (TREE_OPERAND (argse.expr, 0));
+	tmp = TREE_OPERAND (argse.expr, 0);
+	  tmp = gfc_class_vtab_size_get (tmp);
 	  tmp = fold_convert (result_type, tmp);
 	  goto done;
 	}
diff --git a/gcc/testsuite/gfortran.dg/PR100027.f90 b/gcc/testsuite/gfortran.dg/PR100027.f90
new file mode 100644
index 000..4cee549d055
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/PR100027.f90
@@ -0,0 +1,425 @@
+! { dg-do run }
+!
+! Test fix for PR100027
+!
+! in colaboration with Tobias Burnus.
+! 
+
+program main_p
+
+  implicit none
+
+  integer, parameter :: n = 111
+
+  integer, parameter :: ikind = kind(n)
+  integer, parameter :: bsize = 8
+  integer, parameter :: isize = bit_size(n)
+  integer, parameter :: dsize = (n+1)*isize
+  
+  type :: foo_t
+integer :: i
+  end type foo_t
+
+  type, extends(foo_t) :: bar_t
+integer :: j(n)
+  end type bar_t
+  
+  type :: box_t
+class(foo_t), allocatable :: x, y(:)
+  end type box_t
+
+  integer,   target :: ain(n)
+  type(foo_t),   target :: afd(n)
+  type(bar_t),   target :: abd(n)
+  type(box_t),   target :: afx(n)
+  type(box_t),   target :: abx(n)
+  !
+  class(*), pointer :: spu
+  class(*), pointer :: apu(:)
+  !
+  class(foo_t), pointer :: spf
+  class(foo_t), pointer :: apf(:)
+  !
+  class(bar_t), pointer :: spb
+  class(bar_t), pointer :: apb(:)
+  !
+  class(box_t), pointer :: spx
+  class(box_t), pointer :: apx(:)
+  !
+  integer   :: i, j, so, ss
+
+  ain = [(i, i=1,n)]
+  

[Bug c++/99948] [modules] ICE in add_mergeable_specialization

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

--- Comment #1 from Alexander Lelyakin  ---
Adding parameter:
 --param=hash-table-verification-limit=1000 
turns this error to PR99861 ICE in hashtab_chk_error

Re: [committed] Make SVE tests work with --with-cpu

2021-04-16 Thread Richard Sandiford via Gcc-patches
Christophe Lyon  writes:
> On Thu, 15 Apr 2021 at 17:19, Richard Sandiford via Gcc-patches
>  wrote:
>>
>> A lot of the SVE assembly tests are for generic-tuned SVE codegen
>> and so can fail when run on a toolchain configured with --with-cpu.
>>
>> This could easily be solved by forcing -mtune=generic, like we already
>> do for -moverride=tune=none.  However, the testsuite also has some
>> useful execution tests that it would be better to run with as
>> few flag changes as possible.  Also, the flags in $sve_flags are
>> printed as part of the test results, so each change to $sve_flags
>> results in a change to the test summaries.
>>
>> This patch instead intercepts dg-options and tailors the list
>> of additional options based on what the test is trying to do.
>> It also gets rid of DEFAULT_CFLAGS, which are never useful
>> for these tests.
>>
>> Tested on an aarch64-linux-gnu toolchain configured with
>> --with-cpu=a64fx, pushed to trunk.
>>
>> Richard
>
> This looks nice, I'm wondering whether something similar would help clean up 
> the
> arm side of the testsuite where it has become a nightmare to deal with all the
> cpu/fpu/float-abi combinations?

Yeah, it probably could.  I wondered about trying to make it more
general than just aarch64, but in the end the small size of the code
and the number of AArch64-specific bits made it seem like it wouldn't
be a good idea.  If more targets add something similar, that might
give an idea of where the common ground is.

I imagine things will be more complex for arm though.  FWIW,
for mips.exp I used a complicated scheme to automatically infer a
sequence of options based on the (usually single) feature that the
test specifically needed.  It ended up being way too elaborate
though.  I don't think any other target should replicate that.

I guess arm would need something in between the two in terms of
complexity.

Thanks,
Richard


Re: [PATCH] IBM Z: Add alternative to *movdi_{31, 64} in order to load a DFP zero

2021-04-16 Thread Andreas Krebbel via Gcc-patches
On 4/12/21 3:40 PM, Stefan Schulze Frielinghaus wrote:
> Bootstraped and regtested on IBM Z.  Ok for mainline?
> 
> gcc/ChangeLog:
> 
>   * config/s390/s390.md ("*movdi_31", "*movdi_64"): Add
> alternative in order to load a DFP zero.

Ok, thanks!

Andreas

> ---
>  gcc/config/s390/s390.md | 25 ++---
>  1 file changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
> index c10f25b2472..7faf775fbf2 100644
> --- a/gcc/config/s390/s390.md
> +++ b/gcc/config/s390/s390.md
> @@ -1868,9 +1868,9 @@
>  
>  (define_insn "*movdi_64"
>[(set (match_operand:DI 0 "nonimmediate_operand"
> - "=d,d,d,d,d, d,d,
> d,f,d,d,d,d,d,T,!*f,!*f,!*f,!R,!T,b,Q,d,t,Q,t,v,v,v,d,v,R,d")
> + "=d,d,d,d,d, d,d,
> d,f,d,!*f,d,d,d,d,T,!*f,!*f,!*f,!R,!T,b,Q,d,t,Q,t,v,v,v,d,v,R,d")
>  (match_operand:DI 1 "general_operand"
> - " K,N0HD0,N1HD0,N2HD0,N3HD0,Os,N0SD0,N1SD0,d,f,L,b,d,T,d, *f,  R,  
> T,*f,*f,d,K,t,d,t,Q,K,v,d,v,R,v,ZL"))]
> + " K,N0HD0,N1HD0,N2HD0,N3HD0,Os,N0SD0,N1SD0,d,f,j00,L,b,d,T,d, *f,  
> R,  T,*f,*f,d,K,t,d,t,Q,K,v,d,v,R,v,ZL"))]
>"TARGET_ZARCH"
>"@
> lghi\t%0,%h1
> @@ -1883,6 +1883,7 @@
> llilf\t%0,%k1
> ldgr\t%0,%1
> lgdr\t%0,%1
> +   lzdr\t%0
> lay\t%0,%a1
> lgrl\t%0,%1
> lgr\t%0,%1
> @@ -1906,13 +1907,13 @@
> vleg\t%v0,%1,0
> vsteg\t%v1,%0,0
> larl\t%0,%1"
> -  [(set_attr "op_type" "RI,RI,RI,RI,RI,RIL,RIL,RIL,RRE,RRE,RXY,RIL,RRE,RXY,
> +  [(set_attr "op_type" 
> "RI,RI,RI,RI,RI,RIL,RIL,RIL,RRE,RRE,RRE,RXY,RIL,RRE,RXY,
>  
> RXY,RR,RX,RXY,RX,RXY,RIL,SIL,*,*,RS,RS,VRI,VRR,VRS,VRS,
>  VRX,VRX,RIL")
> -   (set_attr "type" "*,*,*,*,*,*,*,*,floaddf,floaddf,la,larl,lr,load,store,
> +   (set_attr "type" 
> "*,*,*,*,*,*,*,*,floaddf,floaddf,fsimpdf,la,larl,lr,load,store,
>   floaddf,floaddf,floaddf,fstoredf,fstoredf,larl,*,*,*,*,
>   *,*,*,*,*,*,*,larl")
> -   (set_attr "cpu_facility" "*,*,*,*,*,extimm,extimm,extimm,dfp,dfp,longdisp,
> +   (set_attr "cpu_facility" 
> "*,*,*,*,*,extimm,extimm,extimm,dfp,dfp,*,longdisp,
>   z10,*,*,*,*,*,longdisp,*,longdisp,
>   z10,z10,*,*,*,*,vx,vx,vx,vx,vx,vx,*")
> (set_attr "z10prop" "z10_fwd_A1,
> @@ -1925,6 +1926,7 @@
>  z10_fwd_E1,
>  *,
>  *,
> + *,
>  z10_fwd_A1,
>  z10_fwd_A3,
>  z10_fr_E1,
> @@ -1942,7 +1944,7 @@
>  *,
>  *,*,*,*,*,*,*,
>  z10_super_A1")
> -   (set_attr "relative_long" "*,*,*,*,*,*,*,*,*,*,
> +   (set_attr "relative_long" "*,*,*,*,*,*,*,*,*,*,*,
>*,yes,*,*,*,*,*,*,*,*,
>yes,*,*,*,*,*,*,*,*,*,
>*,*,yes")
> @@ -2002,9 +2004,9 @@
>  
>  (define_insn "*movdi_31"
>[(set (match_operand:DI 0 "nonimmediate_operand"
> -"=d,d,Q,S,d  ,o,!*f,!*f,!*f,!R,!T,d")
> +"=d,d,Q,S,d  ,o,!*f,!*f,!*f,!*f,!R,!T,d")
>  (match_operand:DI 1 "general_operand"
> -" Q,S,d,d,dPT,d, *f,  R,  T,*f,*f,b"))]
> +" Q,S,d,d,dPT,d, *f,  R,  T,j00,*f,*f,b"))]
>"!TARGET_ZARCH"
>"@
> lm\t%0,%N0,%S1
> @@ -2016,12 +2018,13 @@
> ldr\t%0,%1
> ld\t%0,%1
> ldy\t%0,%1
> +   lzdr\t%0
> std\t%1,%0
> stdy\t%1,%0
> #"
> -  [(set_attr "op_type" "RS,RSY,RS,RSY,*,*,RR,RX,RXY,RX,RXY,*")
> -   (set_attr "type" 
> "lm,lm,stm,stm,*,*,floaddf,floaddf,floaddf,fstoredf,fstoredf,*")
> -   (set_attr "cpu_facility" 
> "*,longdisp,*,longdisp,*,*,*,*,longdisp,*,longdisp,z10")])
> +  [(set_attr "op_type" "RS,RSY,RS,RSY,*,*,RR,RX,RXY,RRE,RX,RXY,*")
> +   (set_attr "type" 
> "lm,lm,stm,stm,*,*,floaddf,floaddf,floaddf,fsimpdf,fstoredf,fstoredf,*")
> +   (set_attr "cpu_facility" 
> "*,longdisp,*,longdisp,*,*,*,*,longdisp,*,*,longdisp,z10")])
>  
>  ; For a load from a symbol ref we can use one of the target registers
>  ; together with larl to load the address.
> 



[Bug c++/100122] New: template substitution triggers a segfault

2021-04-16 Thread 60rntogo at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100122

Bug ID: 100122
   Summary: template substitution triggers a segfault
   Product: gcc
   Version: 10.2.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: 60rntogo at gmail dot com
  Target Milestone: ---

Created attachment 50618
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50618=edit
preprocessed file

This code:

template  struct A
{
  struct B
  {
template  using C = T;
using D = C;
  };
};

compiled with:

g++-10 -std=c++2a test.cpp

triggers:

test.cpp: In substitution of ‘template template using C = T
[with T = A<  >;  =
]’:
test.cpp:6:18:   required from here
test.cpp:6:18: internal compiler error: Segmentation fault
6 | using D = C;

GCC version:

COLLECT_GCC=g++-10
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
10.2.0-13ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs
--enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr
--with-gcc-major-version-only --program-suffix=-10
--program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new
--enable-gnu-unique-object --disable-vtable-verify --enable-plugin
--enable-default-pie --with-system-zlib --enable-libphobos-checking=release
--with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch
--disable-werror --with-arch-32=i686 --with-abi=m64
--with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic
--enable-offload-targets=nvptx-none=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-JvwpWM/gcc-10-10.2.0/debian/tmp-gcn/usr,hsa
--without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.0 (Ubuntu 10.2.0-13ubuntu1)

[Bug tree-optimization/100081] [11 Regression] Compile time hog in irange since r11-4135-ge864d395b4e862ce

2021-04-16 Thread amacleod at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100081

--- Comment #8 from Andrew Macleod  ---
OMG.  Don't bother reducing. I can see the problem.

EVRP is fine, but when wrestrict runs, its quite late, and the CFG has

 [local count: 28382607]:
  <...>
  _571 = _61 >= _593;
  _3583 = _724 + _3992;
  _2220 = _831 <= _3583;
  _47 = _571 | _2220;
  _2935 = _376 * 2;
  _3966 = _725 + _2935;
  _3024 = _61 >= _3966;
  _4219 = _3992 * 2;
  _4218 = _725 + _4219;
  _1836 = _831 <= _4218;
  _3080 = _1836 | _3024;
<...>
  _5348 = _5347 & _32080;
  _5349 = _5348 & _32151;
  _5350 = _5349 & _32176;
  _5351 = _5350 & _32488;
  _5352 = _5351 & _33691;
  _5353 = _5352 & _33762;
  _5354 = _5353 & _34753;
  _35662 = _5354 & _34824;
  if (_35662 != 0)
goto ; [90.00%]
  else
goto ; [10.00%]

Its a 7200 stmt basic block, made up of calculations and 2614 ORs and 1480
ANDs.

A request is made for a range which can be exported from this block, and ranger
is dutifully trying everything it can to process those blocks.

 Each AND/OR is a logical expression which evaluates a TRUE and FALSE range for
each operands, so it calculates up to 4 ranges for each pair of operands. I
knew this could get out of hand in pathological cases, so we introduced a
logical cache to help resolve this and avoid extra work.  Its actually making
this one worse I think.

Regardless, I know what the issue is.  I have 2 things to try.
1) We have a patch in our branch that gives up early.. once it finds the result
is going to be varying...   I'll give that a shot first, it may stop this
lookup quickly. Its possible it won't. 

if not, then 
2) we've also discussed that in ridiculously large combinations of &&/|| we are
unlikely to be able to haul a useful range out of it, so limit the depth of
logical processing to something in a reasonable range. 4000 logicals operations
is not reasonable to look thru.  something more akin to 10 maybe at most..

Anyway, I know what the issue is and will have it resolved early next week at
the latest.

Re: Aarch64 patch ping^3

2021-04-16 Thread Richard Sandiford via Gcc-patches
Jakub Jelinek via Gcc-patches  writes:
> On Wed, Apr 07, 2021 at 03:53:26PM +0200, Jakub Jelinek via Gcc-patches wrote:
>> On Mon, Mar 29, 2021 at 11:16:55AM +0200, Jakub Jelinek wrote:
>> > > Looks good to me.  Richard E knows this code better than I do though,
>> > > so I think he should have the final say.  He's currently on holiday
>> > > but will be back next week.
>> > 
>> > I'd like to ping this patch.
>> 
>> Ping.
>
> Ping.

Let's go for it.  I still think the patch looks good, and if a problem
crops up then we still have time to fix it before the release.  Applying
it now seems better than applying it closer to the release.

Thanks,
Richard

>
>> > > > 2021-03-18  Jakub Jelinek  
>> > > >
>> > > >PR target/91710
>> > > >* config/aarch64/aarch64.c (aarch64_function_arg_alignment): 
>> > > > Change
>> > > >abi_break argument from bool * to unsigned *, store there the 
>> > > > pre-GCC 9
>> > > >alignment.
>> > > >(aarch64_layout_arg, aarch64_gimplify_va_arg_expr): Adjust 
>> > > > callers.
>> > > >(aarch64_function_arg_regno_p): Likewise.  Only emit -Wpsabi 
>> > > > note if
>> > > >the old and new alignment after applying MIN/MAX to it is 
>> > > > different.
>> > > >
>> > > >* gcc.target/aarch64/pr91710.c: New test.
>
> Thanks
>
>   Jakub


Re: [PATCH] testsuite/arm: Fix scan-assembler-times in pr96770.c with movt/movw

2021-04-16 Thread Richard Sandiford via Gcc-patches
Sorry the slow reply.  I'm not well versed on the all AArch32 combinations
but it looks good to me.

Christophe Lyon via Gcc-patches  writes:
> The previous change to this testcase missed the fact that the data may
> be accessed via an anchor, depending on the optimization level,
> leading to false failures.
>
> This patch restricts matching to upper16:lower16 followed by
> non-spaces, followed by +4 (in f4) or +320 (in f5).
>
> Using '.*' instead of '[^ \]' would match accross the whole assembly
> file, which is not what we want, hence the limitation with spaces.
>
> 2021-03-29  Christophe Lyon  
>
>   gcc/testsuite/
>   PR target/96770
>   * gcc.target/arm/pure-code/pr96770.c: Fix scan-assembler-times
>   with movt/movw.

OK, thanks.

Richard

> ---
>  gcc/testsuite/gcc.target/arm/pure-code/pr96770.c | 12 +++-
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.target/arm/pure-code/pr96770.c 
> b/gcc/testsuite/gcc.target/arm/pure-code/pr96770.c
> index ae1bd10..3c69614 100644
> --- a/gcc/testsuite/gcc.target/arm/pure-code/pr96770.c
> +++ b/gcc/testsuite/gcc.target/arm/pure-code/pr96770.c
> @@ -4,12 +4,13 @@
>  int arr[1000];
>  int *f4 (void) { return [1]; }
>  
> -/* For cortex-m0 (thumb-1/v6m), we generate 4 movs with upper/lower:#arr+4.  
> */
> +/* For cortex-m0 (thumb-1/v6m), we generate 2 pairs of movs/adds with 
> upper/lower:#arr+4.  */
>  /* { dg-final { scan-assembler-times "arr\\+4" 4 { target { { ! 
> arm_thumb1_movt_ok } && { ! arm_thumb2_ok } } } } } */
>  
>  /* For cortex-m with movt/movw (thumb-1/v8m.base or thumb-2), we
> -   generate a movt/movw pair with upper/lower:#arr+4.  */
> -/* { dg-final { scan-assembler-times "arr\\+4" 2 { target { 
> arm_thumb1_movt_ok || arm_thumb2_ok } } } } */
> +   generate a movt/movw pair with upper/lower:#arr+4 possibly via an anchor. 
>  */
> +/* { dg-final { scan-assembler-times "upper16:\[^ \]+.\\+4" 1 { target { 
> arm_thumb1_movt_ok || arm_thumb2_ok } } } } */
> +/* { dg-final { scan-assembler-times "lower16:\[^ \]+\\+4" 1 { target { 
> arm_thumb1_movt_ok || arm_thumb2_ok } } } } */
>  
>  int *f5 (void) { return [80]; }
>  
> @@ -17,5 +18,6 @@ int *f5 (void) { return [80]; }
>  /* { dg-final { scan-assembler-times "arr\\+320" 1 { target { { ! 
> arm_thumb1_movt_ok } && { ! arm_thumb2_ok } } } } } */
>  
>  /* For cortex-m with movt/movw (thumb-1/v8m.base or thumb-2), we
> -   generate a movt/movw pair with upper/lower:arr+320.  */
> -/* { dg-final { scan-assembler-times "arr\\+320" 2 { target { 
> arm_thumb1_movt_ok || arm_thumb2_ok } } } } */
> +   generate a movt/movw pair with upper/lower:arr+320 possibly via an 
> anchor.  */
> +/* { dg-final { scan-assembler-times "upper16:\[^ \]+\\+320" 1 { target { 
> arm_thumb1_movt_ok || arm_thumb2_ok } } } } */
> +/* { dg-final { scan-assembler-times "lower16:\[^ \]+\\+320" 1 { target { 
> arm_thumb1_movt_ok || arm_thumb2_ok } } } } */


Re: A suggestion for going forward from the RMS/FSF debate

2021-04-16 Thread Koning, Paul via Gcc-patches



> On Apr 16, 2021, at 6:13 AM, Ville Voutilainen via Gcc-patches 
>  wrote:
> 
> The actual suggestion is at the end; skip straight to it if you wish.

Could you shift this discussion to the gcc list where it fits better?  
gcc-patches is for discussion patches to the code.

paul



Re: removing toxic emailers

2021-04-16 Thread NightStrike via Gcc
On Thu, Apr 15, 2021, 23:42 Iain Sandoe via Gcc  wrote:

> it is essential (IMO) that review of code is carried out on a fair and
> technical basis without personal attack or harrassment (or
> unwelcome unrelated attention).
>

Is this not the case on gcc-patches?

>


Re: [PATCH 1/3] openacc: Add support for gang local storage allocation in shared memory

2021-04-16 Thread Thomas Schwinge
Hi!

On 2021-04-16T17:05:24+0100, Andrew Stubbs  wrote:
> On 15/04/2021 18:26, Thomas Schwinge wrote:
>>> and optimisation, since shared memory might be faster than
>>> the main memory on a GPU.
>>
>> Do we potentially have a problem that making more use of (scarce)
>> gang-private memory may negatively affect peformance, because potentially
>> fewer OpenACC gangs may then be launched to the GPU hardware in parallel?
>> (Of course, OpenACC semantics conformance firstly is more important than
>> performance, but there may be ways to be conformant and performant;
>> "quality of implementation".)  Have you run any such performance testing
>> with the benchmarking codes that we've got set up?
>>
>> (As I'm more familiar with that, I'm using nvptx offloading examples in
>> the following, whilst assuming that similar discussion may apply for GCN
>> offloading, which uses similar hardware concepts, as far as I remember.)
>
> Yes, that could happen.

Thanks for sharing the GCN perspective.

> However, there's space for quite a lot of
> scalars before performance is affected: 64KB of LDS memory shared by a
> hardware-defined maximum of 40 threads

(Instead of threads, something like thread blocks, I suppose?)

> gives about 1.5KB of space for
> worker-reduction variables and gang-private variables.

PTX, as I understand this, may generally have a lot of Thread Blocks in
flight: all for the same GPU kernel as well as any GPU kernels running
asynchronously/generally concurrently (system-wide), and libgomp does try
launching a high number of Thread Blocks ('num_gangs') (for purposes of
hiding memory access latency?).  Random example:

nvptx_exec: kernel t0_r$_omp_fn$0: launch gangs=1920, workers=32, vectors=32

With that, PTX's 48 KiB of '.shared' memory per SM (processor) are then
not so much anymore: just '48 * 1024 / 1920 = 25' bytes of gang-private
memory available for each of the 1920 gangs: 'double x, y, z'?  (... for
the simple case where just one GPU kernel is executing.)

(I suppose that calculation is valid for a GPU hardware variant where
there is just one SM.  If there are several (typically in the order of a
few dozens?), I suppose the Thread Blocks launched will be distributed
over all these, thus improving the situation correspondingly.)

(And of course, there are certainly other factors that also limit the
number of Thread Blocks that are actually executing in parallel.)

> We might have a
> problem if there are large private arrays.

Yes, that's understood.

Also, directly related, the problem that comes with supporting
worker-private memory, which basically calculates to the amount necessary
for gang-private memory multiplied by the number of workers?  (Out of
scope at present.)

> I believe we have a "good enough" solution for the usual case

So you believe that.  ;-)

It's certainly what I'd hope, too!  But we don't know yet whether there's
any noticeable performance impact if we run with (potentially) lesser
parallelism, hence my question whether this patch has been run through
performance testing.

> and a
> v2.0 full solution is going to be big and hairy enough for a whole patch
> of it's own (requiring per-gang dynamic allocation, a different memory
> address space and possibly different instruction selection too).

Agree that a fully dynamic allocation scheme likely is going to be ugly,
so I'd certainly like to avoid that.

Before attempting that, we'd first try to optimize gang-private memory
allocation: so that it's function-local (and thus GPU kernel-local)
instead of device-global (assuming that's indeed possible), and try not
using gang-private memory in cases where it's not actually necessary
(semantically not observable, and not necessary for performance reasons).


Grüße
 Thomas
-
Mentor Graphics (Deutschland) GmbH, Arnulfstrasse 201, 80634 München 
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Frank 
Thürauf


[Bug tree-optimization/63446] dangling reference results in confusing diagnostic from -Wuninitialized

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63446

Martin Sebor  changed:

   What|Removed |Added

   Last reconfirmed|2014-10-03 00:00:00 |2021-4-16
  Known to fail||10.2.0, 11.0, 4.6.4, 4.9.4,
   ||5.5.0, 6.4.0, 7.2.0, 8.3.0,
   ||9.1.0
 CC||msebor at gcc dot gnu.org
   Severity|normal  |enhancement
 Blocks||49974

--- Comment #9 from Martin Sebor  ---
GCC 11 improves the message by including a note that mentions the uninitialized
variable.  In this case it doesn't completely solve the problem because the
variable it points to is initialized but it should help.

pr63446.C: In function ‘int func()’:
pr63446.C:15:14: warning: ‘x’ is used uninitialized [-Wuninitialized]
   15 | return f.ref;
  |  ^~~
pr63446.C:8:9: note: ‘x’ was declared here
8 | int x = 42;
  | ^

But the underlying bug here is returning a reference to a local variable, so
the warning to improve is -Wreturn-local-addr.  That will diagnose the return
statement in make_foo().  Bug 49974 tracks that enhancement.  With that, the
additional -Wuninitialized issued in func() would just help clarify the
consequences of the bug but not otherwise be essential.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49974
[Bug 49974] missing -Wreturn-local-addr for indirectly returning reference to
local/temporary

Re: A suggestion for going forward from the RMS/FSF debate

2021-04-16 Thread Jeff Law via Gcc



On 4/16/2021 9:57 AM, Thomas Koenig via Gcc wrote:

Hello world,

realising that my e-mails may have done more harm than good,
I will now unsubscribe from the gcc mailing list, so please
don't expect a reply unless you copy me in.


I don't think your emails have done any harm.  I find them quite 
valuable, so I'm sad to see you dropping yourself from the gcc@ list.



jeff




Re: A suggestion for going forward from the RMS/FSF debate

2021-04-16 Thread Richard Kenner via Gcc
> The authority of the FSF, GNU and RMS over GCC is and has been a
> fiction for decades,

For the most part, I agree.

> It would be usefull to clarify with the FSF and GNU what the
> actual relations are,

Why?  What would that gain?  I go back to my analogy of the British Queen.
What would be gained by "clarifying" that if she actually intervenes
non-trivially in the government of any Commonwealth nation, she'd lose
that power?


[Bug tree-optimization/100115] Bogus -Wmaybe-uninitialized warning with -O3

2021-04-16 Thread msebor at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100115

Martin Sebor  changed:

   What|Removed |Added

  Component|c++ |tree-optimization
 CC||msebor at gcc dot gnu.org
   Keywords||diagnostic
 Blocks||24639

--- Comment #1 from Martin Sebor  ---
I can confirm the warning but the test case is far too big for me to say
whether or not it's valid.  As it turns out, the test case is also too big for
GCC as it exceeds at least one internal limit named MAX_CHAIN_LEN.  The limit
is hardcoded to an exceedingly low value of 5 but with the test case reaches
77.  Exceeding this limit can lead to either false positives or negatives.  But
bumping it way up doesn't avoid the warning so something else is going on.

I'm trying to reduce the test case to something manageable but that can take
many hours, even days.  It would be really helpful if you could trim it down a
bit, e.g., by removing the biggest non-essentials like .

That being said, the context of the warning mentions std::optional which has
been known to be challenging for analysis and has led to false positives (see
pr80635 and related) as well as less than optimal code in the past, so I expect
this is going to caused by a similar limitation.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
[Bug 24639] [meta-bug] bug to track all Wuninitialized issues

[Bug c++/100109] [8/9/10/11 Regression] ICE: unexpected expression 'E' of kind template_parm_index

2021-04-16 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100109

--- Comment #1 from Marek Polacek  ---
Started with r251433.

[Bug jit/100096] libgccjit.so.0: Cannot write-enable text segment: Permission denied on NetBSD 9.1

2021-04-16 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100096

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

https://gcc.gnu.org/g:4a1493f0603262a7dc1114d9827353e9810e63dc

commit r11-8225-g4a1493f0603262a7dc1114d9827353e9810e63dc
Author: Jakub Jelinek 
Date:   Fri Apr 16 18:32:27 2021 +0200

intl: Add --enable-host-shared support [PR100096]

As mentioned in the PR, building gcc with jit enabled and
--enable-host-shared doesn't work on NetBSD/i?86, as libgccjit.so.0
has text relocations.
The r0-125846-g459260ecf8b420b029601a664cdb21c185268ecb changes
added --enable-host-shared support to various libraries, but didn't
add it to intl/ subdirectory; on Linux it isn't really needed, because
all: all-no
all-no: #nothing
but on other OSes intl/libintl.a is built.

The following patch makes sure it is built with -fPIC when
--enable-host-shared is used.

2021-04-16  Jakub Jelinek  

PR jit/100096
* configure.ac: Add --enable-host-shared support.
* Makefile.in: Update copyright.  Add @PICFLAG@ to CFLAGS.
* configure: Regenerated.

[Bug c++/100109] [8/9/10/11 Regression] ICE: unexpected expression 'E' of kind template_parm_index

2021-04-16 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100109

Marek Polacek  changed:

   What|Removed |Added

   Last reconfirmed||2021-04-16
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
   Target Milestone|--- |8.5
Summary|ICE: unexpected expression  |[8/9/10/11 Regression] ICE:
   |'E' of kind |unexpected expression 'E'
   |template_parm_index |of kind template_parm_index
 CC||mpolacek at gcc dot gnu.org
   Priority|P3  |P2
   Keywords||ice-on-invalid-code

Re: removing toxic emailers

2021-04-16 Thread Ian Lance Taylor via Gcc
On Thu, Apr 15, 2021 at 9:08 PM Frosku  wrote:
>
> On the other hand, I also think that a project which goes too far in
> policing speech, especially speech unrelated to the project, will drive away
> talented people who are more than willing to comply with the project's norms
> within the project's spaces. Trying to enforce the 'California cultural
> standard' on not only someone's interactions with the project but their
> entire life (which may be lived in a very different cultural setting) seems
> very invasive and culturally exclusionary.

I do live in California, but I don't know what the "California
cultural standard" is.  It's a big place, and it's full of people who
behave in all kinds of different ways.  Harvey Weinstein and
brogrammer culture are California cultures.  You presumably have
something in mind, but I'm not sure it's a real thing.


> I'd be interested to know where you draw the line as to what behavior is
> related to the project, or if you don't draw a line, why volunteers in China,
> Russia, Poland etc should be expected to accept an entire political doctrine
> over their life to contribute to a compiler toolchain.

How did we get to accepting an entire political doctrine?

What I have in mind is treating people with respect.  For example, I'm
involved with the Go programming language.  The Go community has a
code of conduct: https://golang.org/conduct.  The key elements are:

- Be friendly and welcoming
- Be patient
  Remember that people have varying communication styles and that not
everyone is using their native language. (Meaning and tone can be lost
in translation.)
- Be thoughtful
  Productive communication requires effort. Think about how your words
will be interpreted.
  Remember that sometimes it is best to refrain entirely from commenting.
- Be respectful
  In particular, respect differences of opinion.
- Be charitable
  Interpret the arguments of others in good faith, do not seek to disagree.
  When we do disagree, try to understand why.

  Avoid destructive behavior:

  Derailing: stay on topic; if you want to talk about something else,
start a new conversation.
  Unconstructive criticism: don't merely decry the current state of
affairs; offer—or at least solicit—suggestions as to how things may be
improved.
  Snarking (pithy, unproductive, sniping comments)
  Discussing potentially offensive or sensitive issues; this all too
often leads to unnecessary conflict.
  Microaggressions: brief and commonplace verbal, behavioral and
environmental indignities that communicate hostile, derogatory or
negative slights and insults to a person or group.


That is what I would aim for.  And in general that is how the GCC
community behaves.  I don't know whether that is "California culture"
or not.


And I have to note that I have seen very few people here saying "RMS
must never participate in GCC in any way."  What I see most people
saying is "RMS should not be in a position of leading the GCC project
and telling people what to do."

Ian


Re: A suggestion for going forward from the RMS/FSF debate

2021-04-16 Thread Didier Kryn
    From reading most of this thread, it is clear to me that

    - The authority of the FSF, GNU and RMS over GCC is and has been a
fiction for decades,

    - This fiction has been erased from the official web page of the
project,

    - It would be usefull to clarify with the FSF and GNU what the
actual relations are,

    - This can certainly be done in a polite way without all sorts of
rant, and arguments with no relation with Free Software, in particular
attacks ad persona.

    The power is and has always been in the hands of the people doing
the job (the developpers/maintainers). But those who have the power
would be wise to pay attention to the opinions of the many afficionados
of GCC, GNU and Free Software in general, even those who aren't
contributors. These people aren't trolls; they speak up because they are
concerned about the project.

--     Didier




[Bug c++/99803] [9/10/11 Regression] ICE: in make_typename_type, at cp/decl.c:4057

2021-04-16 Thread mpolacek at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99803

Marek Polacek  changed:

   What|Removed |Added

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

--- Comment #3 from Marek Polacek  ---
Fixed.

[Bug fortran/40976] Merge DECL of procedure call with DECL of gfc_get_function_type

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40976

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/68289] Missing diagnostic pragmas

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68289

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/93956] Wrong array creation with p => array_dt(1:n)%component

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93956

Thomas Koenig  changed:

   What|Removed |Added

   Assignee|tkoenig at gcc dot gnu.org |unassigned at gcc dot 
gnu.org
 Status|REOPENED|NEW

[Bug libfortran/95101] Optimize libgfortran library handling of arrays

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95101

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/90536] Spurious (?) warning when using -Wconversion with -fno-range-check

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90536

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/67202] Fortran FE should load scalar pass-by-reference intent-in arguments at the beginning of a function

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67202

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/83927] Type-Bound Procedure on element of Derived Type PARAMETER Array

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83927

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/97454] Decls for Fortran library procedures

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97454

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/96216] Gap in interface checking

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96216

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/30609] Calculating masks twice

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=30609

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/93114] Use span passing components of derived types

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93114

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/97345] FE passes do_subscript leaks gmp memory

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97345

Thomas Koenig  changed:

   What|Removed |Added

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

[Bug fortran/82215] Feature request to better support two pass compiling with gfortran

2021-04-16 Thread tkoenig at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82215

Thomas Koenig  changed:

   What|Removed |Added

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

  1   2   3   >