Re: GCC version bikeshedding

2014-08-06 Thread Eric Botcazou
 What do you propose that we do?

Probably just jump to 5.0 (or 5.1) without the subsequent acceleration.

 Step 1: We agree that the current major revision number conveys no
 information, and therefore we will change the major revision number
 with every release.  (I understand that you do not agree with this.)

Yes.

 Step 2: Assuming we agree about step 1, what should the next version
 number be?  Well, the current version is 4.9.  Therefore, the next
 version should be 5.0.  That seems entirely natural to me.  Having the
 next release be 10.0 would make no sense to anybody who is not an
 active GCC developer.

I also disagree with the last assertion (for example Sun did that for Solaris) 
but that's probably too much bikeshedding at this point.

-- 
Eric Botcazou


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 09:25:48AM +0200, Eric Botcazou wrote:
  What do you propose that we do?
 
 Probably just jump to 5.0 (or 5.1) without the subsequent acceleration.

That was my preference too.

Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Marek Polacek
On Wed, Aug 06, 2014 at 09:42:23AM +0200, Jakub Jelinek wrote:
 On Wed, Aug 06, 2014 at 09:25:48AM +0200, Eric Botcazou wrote:
   What do you propose that we do?
  
  Probably just jump to 5.0 (or 5.1) without the subsequent acceleration.
 
 That was my preference too.

FWIW, me too.  This way we'll get in a few years to 10.0 that was also 
suggested.
So please, can we finally settle on something? :)

Marek


Re: GCC version bikeshedding

2014-08-06 Thread Richard Biener
On Wed, Aug 6, 2014 at 9:42 AM, Jakub Jelinek ja...@redhat.com wrote:
 On Wed, Aug 06, 2014 at 09:25:48AM +0200, Eric Botcazou wrote:
  What do you propose that we do?

 Probably just jump to 5.0 (or 5.1) without the subsequent acceleration.

 That was my preference too.

What singles out 5.0 to warrant an increase in the major number?

If we don't change then please stay at 4.10, 4.11, 4.12, etc.

Richard.

 Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 10:44:11AM +0200, Richard Biener wrote:
 On Wed, Aug 6, 2014 at 9:42 AM, Jakub Jelinek ja...@redhat.com wrote:
  On Wed, Aug 06, 2014 at 09:25:48AM +0200, Eric Botcazou wrote:
   What do you propose that we do?
 
  Probably just jump to 5.0 (or 5.1) without the subsequent acceleration.
 
  That was my preference too.
 
 What singles out 5.0 to warrant an increase in the major number?
 
 If we don't change then please stay at 4.10, 4.11, 4.12, etc.

- libstdc++ ABI changes (it is a significant user visible change,
  if you rebuild everything, no extra effort is needed, but otherwise
  if you want some C++ code built with older compilers work together
  with code built with newer compilers, it might require source code
  changes (the abi_tag attribute additions where needed and warning
  suggest to put those at), at least that is my current understanding
  of the plans
- likely libgfortran ABI changes (different array descriptors)

Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Richard Biener
On Wed, Aug 6, 2014 at 10:48 AM, Jakub Jelinek ja...@redhat.com wrote:
 On Wed, Aug 06, 2014 at 10:44:11AM +0200, Richard Biener wrote:
 On Wed, Aug 6, 2014 at 9:42 AM, Jakub Jelinek ja...@redhat.com wrote:
  On Wed, Aug 06, 2014 at 09:25:48AM +0200, Eric Botcazou wrote:
   What do you propose that we do?
 
  Probably just jump to 5.0 (or 5.1) without the subsequent acceleration.
 
  That was my preference too.

 What singles out 5.0 to warrant an increase in the major number?

 If we don't change then please stay at 4.10, 4.11, 4.12, etc.

 - libstdc++ ABI changes (it is a significant user visible change,
   if you rebuild everything, no extra effort is needed, but otherwise
   if you want some C++ code built with older compilers work together
   with code built with newer compilers, it might require source code
   changes (the abi_tag attribute additions where needed and warning
   suggest to put those at), at least that is my current understanding
   of the plans

But that's only with -std=c++11?  Which had no compatibility
guarantees before?

 - likely libgfortran ABI changes (different array descriptors)

Let's wait and see ...

We'll find a good reason to bump the major with every release.
Like for 4.9 LTO defaults to slim-objects, or C++ rejecting even more
invalid code, or libstdc++ header re-orgs, or defaulting to dwarf4+
(or even support for it), or VTA, or ...

Where do we set the barrier?  GCC isn't a C++ (or Fortran) compiler
only.

So if we change to 5.1 (please not .0) then let's switch the default
optimization level to -O2!  _That's_ a user-visible change across
the board.

Richard.

 Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
  - libstdc++ ABI changes (it is a significant user visible change,
if you rebuild everything, no extra effort is needed, but otherwise
if you want some C++ code built with older compilers work together
with code built with newer compilers, it might require source code
changes (the abi_tag attribute additions where needed and warning
suggest to put those at), at least that is my current understanding
of the plans
 
 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?

No, AFAIK it is also -std=c++98.  At least my understanding was that
std::list and std::string are going to change ABI (and get new abi_tag)
in all C++ modes.  Jonathan/Jason/Paolo, is that right?

Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Marek Polacek
On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
 On Wed, Aug 6, 2014 at 10:48 AM, Jakub Jelinek ja...@redhat.com wrote:
  - libstdc++ ABI changes (it is a significant user visible change,
if you rebuild everything, no extra effort is needed, but otherwise
if you want some C++ code built with older compilers work together
with code built with newer compilers, it might require source code
changes (the abi_tag attribute additions where needed and warning
suggest to put those at), at least that is my current understanding
of the plans
 
 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?
 
  - likely libgfortran ABI changes (different array descriptors)
 
 Let's wait and see ...
 
 We'll find a good reason to bump the major with every release.
 Like for 4.9 LTO defaults to slim-objects, or C++ rejecting even more
 invalid code, or libstdc++ header re-orgs, or defaulting to dwarf4+
 (or even support for it), or VTA, or ...
 
 Where do we set the barrier?  GCC isn't a C++ (or Fortran) compiler
 only.
 
 So if we change to 5.1 (please not .0) then let's switch the default
 optimization level to -O2!  _That's_ a user-visible change across
 the board.

I'm planning to move the default C standard from gnu90 to gnu11
(Currently it's blocked on the -Wc90-c99-compat warning).
That's a pretty big user-visible change as well, I suppose.

Marek


Re: GCC version bikeshedding

2014-08-06 Thread pinskia


 On Aug 6, 2014, at 2:10 AM, Marek Polacek pola...@redhat.com wrote:
 
 On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
 On Wed, Aug 6, 2014 at 10:48 AM, Jakub Jelinek ja...@redhat.com wrote:
 - libstdc++ ABI changes (it is a significant user visible change,
  if you rebuild everything, no extra effort is needed, but otherwise
  if you want some C++ code built with older compilers work together
  with code built with newer compilers, it might require source code
  changes (the abi_tag attribute additions where needed and warning
  suggest to put those at), at least that is my current understanding
  of the plans
 
 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?
 
 - likely libgfortran ABI changes (different array descriptors)
 
 Let's wait and see ...
 
 We'll find a good reason to bump the major with every release.
 Like for 4.9 LTO defaults to slim-objects, or C++ rejecting even more
 invalid code, or libstdc++ header re-orgs, or defaulting to dwarf4+
 (or even support for it), or VTA, or ...
 
 Where do we set the barrier?  GCC isn't a C++ (or Fortran) compiler
 only.
 
 So if we change to 5.1 (please not .0) then let's switch the default
 optimization level to -O2!  _That's_ a user-visible change across
 the board.
 
 I'm planning to move the default C standard from gnu90 to gnu11
 (Currently it's blocked on the -Wc90-c99-compat warning).
 That's a pretty big user-visible change as well, I suppose.

I don't think this is a good move due to extern inline and a lot of code is 
still kr c and not even c90. 

Thanks,
Andrew

 
Marek


Re: GCC version bikeshedding

2014-08-06 Thread Marc Glisse

On Wed, 6 Aug 2014, Jakub Jelinek wrote:


- libstdc++ ABI changes


It seems unlikely to be in the next release, it is too late in the cycle. 
Chances to break the ABI don't come often, and rushing one at the end of 
stage1 would be wasting a good opportunity.


--
Marc Glisse


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 11:20:01AM +0200, Marc Glisse wrote:
 On Wed, 6 Aug 2014, Jakub Jelinek wrote:
 
 - libstdc++ ABI changes
 
 It seems unlikely to be in the next release, it is too late in the cycle.
 Chances to break the ABI don't come often, and rushing one at the end of
 stage1 would be wasting a good opportunity.

AFAIK it has been planned for two or more years, so I would not say it is 
rushed.

Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Jonathan Wakely
On 6 August 2014 10:06, Jakub Jelinek wrote:
 On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
  - libstdc++ ABI changes (it is a significant user visible change,
if you rebuild everything, no extra effort is needed, but otherwise
if you want some C++ code built with older compilers work together
with code built with newer compilers, it might require source code
changes (the abi_tag attribute additions where needed and warning
suggest to put those at), at least that is my current understanding
of the plans

 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?

 No, AFAIK it is also -std=c++98.  At least my understanding was that
 std::list and std::string are going to change ABI (and get new abi_tag)
 in all C++ modes.  Jonathan/Jason/Paolo, is that right?

Correct. We want C++03 code to continue to be able to interoperate
with C++11 code.

It's an ABI change for all modes (but not a SONAME change because the
old and new definitions will both be present in the .so).


Re: GCC version bikeshedding

2014-08-06 Thread Richard Biener
On Wed, Aug 6, 2014 at 12:08 PM, Jonathan Wakely jwakely@gmail.com wrote:
 On 6 August 2014 10:06, Jakub Jelinek wrote:
 On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
  - libstdc++ ABI changes (it is a significant user visible change,
if you rebuild everything, no extra effort is needed, but otherwise
if you want some C++ code built with older compilers work together
with code built with newer compilers, it might require source code
changes (the abi_tag attribute additions where needed and warning
suggest to put those at), at least that is my current understanding
of the plans

 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?

 No, AFAIK it is also -std=c++98.  At least my understanding was that
 std::list and std::string are going to change ABI (and get new abi_tag)
 in all C++ modes.  Jonathan/Jason/Paolo, is that right?

 Correct. We want C++03 code to continue to be able to interoperate
 with C++11 code.

 It's an ABI change for all modes (but not a SONAME change because the
 old and new definitions will both be present in the .so).

Ugh.  That's going to be a nightmare to support.  Is there a configure
switch to change the default ABI used?  That is, on a legacy system
can I upgrate to 5.0 and get code that interoperates fine with code
built with 4.8?  (including ABI boundaries using the affected classes?
I suspect APIs with std::string passing are _very_ common, not
sure about std::list)

What's the failure mode the user will see when linking against a
4.8 compiled library with a std::string interface using 5.0?

Thanks,
Richard.


Re: GCC version bikeshedding

2014-08-06 Thread Richard Biener
On Wed, Aug 6, 2014 at 12:20 PM, Richard Biener
richard.guent...@gmail.com wrote:
 On Wed, Aug 6, 2014 at 12:08 PM, Jonathan Wakely jwakely@gmail.com 
 wrote:
 On 6 August 2014 10:06, Jakub Jelinek wrote:
 On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
  - libstdc++ ABI changes (it is a significant user visible change,
if you rebuild everything, no extra effort is needed, but otherwise
if you want some C++ code built with older compilers work together
with code built with newer compilers, it might require source code
changes (the abi_tag attribute additions where needed and warning
suggest to put those at), at least that is my current understanding
of the plans

 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?

 No, AFAIK it is also -std=c++98.  At least my understanding was that
 std::list and std::string are going to change ABI (and get new abi_tag)
 in all C++ modes.  Jonathan/Jason/Paolo, is that right?

 Correct. We want C++03 code to continue to be able to interoperate
 with C++11 code.

 It's an ABI change for all modes (but not a SONAME change because the
 old and new definitions will both be present in the .so).

 Ugh.  That's going to be a nightmare to support.  Is there a configure
 switch to change the default ABI used?  That is, on a legacy system
 can I upgrate to 5.0 and get code that interoperates fine with code
 built with 4.8?  (including ABI boundaries using the affected classes?
 I suspect APIs with std::string passing are _very_ common, not
 sure about std::list)

 What's the failure mode the user will see when linking against a
 4.8 compiled library with a std::string interface using 5.0?

And how do libraries with such an API avoid silently changing their
ABI dependent on the compiler used to compile them?  That is,
I suppose those need to change their SONAME dependent on
the compiler version used?!

Richard.

 Thanks,
 Richard.


Re: GCC version bikeshedding

2014-08-06 Thread Jonathan Wakely
On 6 August 2014 11:20, Richard Biener wrote:
 On Wed, Aug 6, 2014 at 12:08 PM, Jonathan Wakely jwakely@gmail.com 
 wrote:
 On 6 August 2014 10:06, Jakub Jelinek wrote:
 On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
  - libstdc++ ABI changes (it is a significant user visible change,
if you rebuild everything, no extra effort is needed, but otherwise
if you want some C++ code built with older compilers work together
with code built with newer compilers, it might require source code
changes (the abi_tag attribute additions where needed and warning
suggest to put those at), at least that is my current understanding
of the plans

 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?

 No, AFAIK it is also -std=c++98.  At least my understanding was that
 std::list and std::string are going to change ABI (and get new abi_tag)
 in all C++ modes.  Jonathan/Jason/Paolo, is that right?

 Correct. We want C++03 code to continue to be able to interoperate
 with C++11 code.

 It's an ABI change for all modes (but not a SONAME change because the
 old and new definitions will both be present in the .so).

 Ugh.  That's going to be a nightmare to support.  Is there a configure
 switch to change the default ABI used?

You'll need to define a macro to get the old versions of the affected
classes, we can add a configure switch to make that the default.

  That is, on a legacy system
 can I upgrate to 5.0 and get code that interoperates fine with code
 built with 4.8?  (including ABI boundaries using the affected classes?
 I suspect APIs with std::string passing are _very_ common, not
 sure about std::list)

 What's the failure mode the user will see when linking against a
 4.8 compiled library with a std::string interface using 5.0?

There will be a linker error as the types and the interface functions
will have different mangled names.


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 12:20:04PM +0200, Richard Biener wrote:
  No, AFAIK it is also -std=c++98.  At least my understanding was that
  std::list and std::string are going to change ABI (and get new abi_tag)
  in all C++ modes.  Jonathan/Jason/Paolo, is that right?
 
  Correct. We want C++03 code to continue to be able to interoperate
  with C++11 code.
 
  It's an ABI change for all modes (but not a SONAME change because the
  old and new definitions will both be present in the .so).
 
 Ugh.  That's going to be a nightmare to support.  Is there a configure
 switch to change the default ABI used?  That is, on a legacy system
 can I upgrate to 5.0 and get code that interoperates fine with code
 built with 4.8?  (including ABI boundaries using the affected classes?
 I suspect APIs with std::string passing are _very_ common, not
 sure about std::list)

Generally, if you just pass std::string or std::list or  or  or *
to it around, things will be just mangled differently, so worst case you'll
get linker errors or dynamic linker errors.
The problematic case is if you embed std::string or std::list
in your classes and pass that around in between projects compiled with
one compiler and another compiler, in that case it doesn't affect
the mangling, yet is an ABI change nevertheless.
In such cases, one needs to add abi_tag to your structures, and there is
some g++ warning that can suggest you where to add it.
Of course, if you are not using such structures/classes in between packages,
it is just fine not to do anything about that.

Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Richard Biener
On Wed, Aug 6, 2014 at 12:25 PM, Jonathan Wakely jwakely@gmail.com wrote:
 On 6 August 2014 11:20, Richard Biener wrote:
 On Wed, Aug 6, 2014 at 12:08 PM, Jonathan Wakely jwakely@gmail.com 
 wrote:
 On 6 August 2014 10:06, Jakub Jelinek wrote:
 On Wed, Aug 06, 2014 at 11:04:14AM +0200, Richard Biener wrote:
  - libstdc++ ABI changes (it is a significant user visible change,
if you rebuild everything, no extra effort is needed, but otherwise
if you want some C++ code built with older compilers work together
with code built with newer compilers, it might require source code
changes (the abi_tag attribute additions where needed and warning
suggest to put those at), at least that is my current understanding
of the plans

 But that's only with -std=c++11?  Which had no compatibility
 guarantees before?

 No, AFAIK it is also -std=c++98.  At least my understanding was that
 std::list and std::string are going to change ABI (and get new abi_tag)
 in all C++ modes.  Jonathan/Jason/Paolo, is that right?

 Correct. We want C++03 code to continue to be able to interoperate
 with C++11 code.

 It's an ABI change for all modes (but not a SONAME change because the
 old and new definitions will both be present in the .so).

 Ugh.  That's going to be a nightmare to support.  Is there a configure
 switch to change the default ABI used?

 You'll need to define a macro to get the old versions of the affected
 classes, we can add a configure switch to make that the default.

  That is, on a legacy system
 can I upgrate to 5.0 and get code that interoperates fine with code
 built with 4.8?  (including ABI boundaries using the affected classes?
 I suspect APIs with std::string passing are _very_ common, not
 sure about std::list)

 What's the failure mode the user will see when linking against a
 4.8 compiled library with a std::string interface using 5.0?

 There will be a linker error as the types and the interface functions
 will have different mangled names.

Ok, so the problematical case is

struct X { std::string s; };
void foo (X);

then.  OTOH I remember that then mangling of X changes as well?

Is there a documented way to build a shared library with both
variants?  Or isn't there a good way to automate that?  Like
building the library objects twice once with the new and once
with the old ABI and then simply link both into the shared library?
(of course that doesn't work - but maybe use -ffunction-sections
-fdata-sections and then use the union of all sections discarding
duplicates?)

Richard.


Re: GCC version bikeshedding

2014-08-06 Thread Marc Glisse

On Wed, 6 Aug 2014, Richard Biener wrote:


It's an ABI change for all modes (but not a SONAME change because the
old and new definitions will both be present in the .so).


Ugh.  That's going to be a nightmare to support.


Yes. And IMO a waste of effort compared to a clean .so.7 break, but 
well...



 Is there a configure
switch to change the default ABI used?  That is, on a legacy system
can I upgrate to 5.0 and get code that interoperates fine with code
built with 4.8?  (including ABI boundaries using the affected classes?
I suspect APIs with std::string passing are _very_ common, not
sure about std::list)

What's the failure mode the user will see when linking against a
4.8 compiled library with a std::string interface using 5.0?


In good cases, a linker error about a missing symbol (different mangling). 
In less good cases, a warning at compile-time about using a class marked 
with abi_tag in a class not marked with it. In worse cases (passing 
through void* for instance), a runtime crash.



And how do libraries with such an API avoid silently changing their
ABI dependent on the compiler used to compile them?  That is,
I suppose those need to change their SONAME dependent on
the compiler version used?!


Yes, just like a move to .so.7 would entail.

--
Marc Glisse


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 12:31:57PM +0200, Richard Biener wrote:
 Ok, so the problematical case is
 
 struct X { std::string s; };
 void foo (X);

Yeah.

 then.  OTOH I remember that then mangling of X changes as well?

Only if you add abi_tag attribute to X.
I hope the libstdc++ folks will add some macro which will
include the right abi_tag attribute for the std::list/std::string
cases, so you'd in the end just add
#ifndef _GLIBCXX_ABI_TAG_SOMETHING
#define _GLIBCXX_ABI_TAG_SOMETHING
#endif
...
struct X _GLIBCXX_ABI_TAG_SOMETHING { std::string s; };
void foo (X);
or similar.

Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 12:35:02PM +0200, Marc Glisse wrote:
 It's an ABI change for all modes (but not a SONAME change because the
 old and new definitions will both be present in the .so).
 
 Ugh.  That's going to be a nightmare to support.
 
 Yes. And IMO a waste of effort compared to a clean .so.7 break, but well...

A clean .so.7 break would be significantly worse nightmare.  We've been
there many years ago, e.g. 3.2/3.3 vs. 3.4, there has been significantly
fewer C++ plugins etc. in packages and it still it was unsolvable.
With the abi_tag stuff, you have the option to make stuff interoperable
when mixing compiler, either with no effort at all, or some limited
effort.  With .so.7, you have no option, nothing will be interoperable.

Jakub


Re: GCC version bikeshedding

2014-08-06 Thread Marc Glisse

On Wed, 6 Aug 2014, Jakub Jelinek wrote:


On Wed, Aug 06, 2014 at 12:31:57PM +0200, Richard Biener wrote:

Ok, so the problematical case is

struct X { std::string s; };
void foo (X);


Yeah.


then.  OTOH I remember that then mangling of X changes as well?


Only if you add abi_tag attribute to X.


Note that -Wabi-tag can tell you where it is needed.

struct __attribute__((abi_tag(marc))) X {};
struct Y { X x; };

a.cc:2:8: warning: 'Y' does not have the marc abi tag that 'X' (used in 
the type of 'Y::x') has [-Wabi-tag]

 struct Y { X x; };
^
a.cc:2:14: note: 'Y::x' declared here
 struct Y { X x; };
  ^
a.cc:1:41: note: 'X' declared here
 struct __attribute__((abi_tag(marc))) X {};
 ^


I hope the libstdc++ folks will add some macro which will
include the right abi_tag attribute for the std::list/std::string
cases, so you'd in the end just add
#ifndef _GLIBCXX_ABI_TAG_SOMETHING
#define _GLIBCXX_ABI_TAG_SOMETHING
#endif
...
struct X _GLIBCXX_ABI_TAG_SOMETHING { std::string s; };
void foo (X);
or similar.


So we only need to patch every project out there...



A clean .so.7 break would be significantly worse nightmare.  We've been
there many years ago, e.g. 3.2/3.3 vs. 3.4, there has been significantly
fewer C++ plugins etc. in packages and it still it was unsolvable.
With the abi_tag stuff, you have the option to make stuff interoperable
when mixing compiler, either with no effort at all, or some limited
effort.  With .so.7, you have no option, nothing will be interoperable.


I disagree that it is worse, but you have more experience, I guess we
will see the results in a few years...

--
Marc Glisse


Re: GCC version bikeshedding

2014-08-06 Thread Richard Biener
On Wed, Aug 6, 2014 at 12:50 PM, Marc Glisse marc.gli...@inria.fr wrote:
 On Wed, 6 Aug 2014, Jakub Jelinek wrote:

 On Wed, Aug 06, 2014 at 12:31:57PM +0200, Richard Biener wrote:

 Ok, so the problematical case is

 struct X { std::string s; };
 void foo (X);


 Yeah.

 then.  OTOH I remember that then mangling of X changes as well?


 Only if you add abi_tag attribute to X.


 Note that -Wabi-tag can tell you where it is needed.

 struct __attribute__((abi_tag(marc))) X {};
 struct Y { X x; };

 a.cc:2:8: warning: 'Y' does not have the marc abi tag that 'X' (used in
 the type of 'Y::x') has [-Wabi-tag]
  struct Y { X x; };
 ^
 a.cc:2:14: note: 'Y::x' declared here
  struct Y { X x; };
   ^
 a.cc:1:41: note: 'X' declared here
  struct __attribute__((abi_tag(marc))) X {};

  ^

 I hope the libstdc++ folks will add some macro which will
 include the right abi_tag attribute for the std::list/std::string
 cases, so you'd in the end just add
 #ifndef _GLIBCXX_ABI_TAG_SOMETHING
 #define _GLIBCXX_ABI_TAG_SOMETHING
 #endif
 ...
 struct X _GLIBCXX_ABI_TAG_SOMETHING { std::string s; };
 void foo (X);
 or similar.


 So we only need to patch every project out there...

I wonder if the linker could not do the propagation for us ...
(ok, it needs to rewrite all symbols and typeinfos, etc., but
certainly doable, no?)

That said, if the public API merely has a forward declaration

class X;

and always passes that by reference the ABI doesn't change.
Of course it now _would_ change if you'd change the mangling
of X ...

abigail to the rescue?

 A clean .so.7 break would be significantly worse nightmare.  We've been
 there many years ago, e.g. 3.2/3.3 vs. 3.4, there has been significantly
 fewer C++ plugins etc. in packages and it still it was unsolvable.
 With the abi_tag stuff, you have the option to make stuff interoperable
 when mixing compiler, either with no effort at all, or some limited
 effort.  With .so.7, you have no option, nothing will be interoperable.


 I disagree that it is worse, but you have more experience, I guess we
 will see the results in a few years...

Indeed.

Richard.

 --
 Marc Glisse


Re: Missing tags in the Git mirror

2014-08-06 Thread Jonathan Wakely
On 5 August 2014 19:32, Роман Донченко wrote:
 Hello,

 Tags for the following releases are not in the Git mirror repository:

 * 3.3
 * 3.3.1
 * 3.3.5
 * 3.3.6
 * 4.7.4
 * 4.8.3
 * 4.9.1

 I figure this is the place to report it?


Yes, this is the right place, thanks.  The tags in the Git mirror have
to be added manually, they don't propagate from the svn repo.


Re: [GNU Tools Cauldron 2014] GCC Re-architecture BOF

2014-08-06 Thread Andrew MacLeod

On 08/05/2014 10:21 AM, Prathamesh Kulkarni wrote:

Hi,
 I have written notes on GCC re-architecture BOF
presented at the Cauldron. I would be grateful if you would
review it for me.
Seems to cover the core parts well...  all subject to change as we go 
tho :-)


initial focus wlll be the types, then we'll see about the decls... trees 
may never be fully removed, we'll see if that has any merit after types 
and maybe decls are done...


Im on vacation so wont be able to respond for a couple of more weeks 
after this.


Andrew


Re: GCC version bikeshedding

2014-08-06 Thread Joern Rennecke
On 6 August 2014 11:31, Richard Biener richard.guent...@gmail.com wrote:
 Ok, so the problematical case is

 struct X { std::string s; };
 void foo (X);

Wouldn't it be even more troublesome with an application that dynloads
dsos depending on user input.
The install script might check if the dso with the right soname is present,
but then you still get dynamic linker errors when the user tries to
do something with the application, which could be an arbitrary time after
the upgrade.


Re: Build failure for sparc-sun-solaris2.10

2014-08-06 Thread Rainer Orth
Hi Art,

 I tried the '--without-gnu-ld --with-ld=/usr/ccs/bin/ld' configure options
 and my build failed again as my GNU 'ld' binary was again being found. So

strange: I'd have expected for gcc to honor a full path in --with-ld
(and --with-ls for that matter).  But then I never tried this before
myself.

 the next step was to rename my installed GNU 'ld' to 'ld-2.24' and adjust
 my $PATH so that the directory where it was installed wouldn't be found, and
 rebuild. I'm happy to report this build was a success:

 $ gcc -v
 Using built-in specs.
 COLLECT_GCC=gcc
 COLLECT_LTO_WRAPPER=/export/home/arth/local/libexec/gcc/sparc-sun-solaris2.10/4.10.0/lto-wrapper
 Target: sparc-sun-solaris2.10
 Configured with: /export/home/arth/src/gcc.git/configure
 --prefix=/export/home/arth/local --enable-languages=c,c++,objc
 --disable-nls --with-gmp=/export/home/arth/local
 --with-mpfr=/export/home/arth/local --with-mpc=/export/home/arth/local
 --enable-checking=release --with-as=/export/home/arth/local/bin/as
 --with-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld
 Thread model: posix
 gcc version 4.10.0 20140804 (experimental) [master revision
 0549e5a:2217af7:347a47cbf5f8ee0bc7e11dc97703b318d3ff259c] (GCC)
 $

 Thanks for your help in resolving this and maintaining the Solaris port.

My pleasure, glad we could get this working.

Rainer

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


Re: GCC version bikeshedding

2014-08-06 Thread Jakub Jelinek
On Wed, Aug 06, 2014 at 12:33:42PM +0100, Joern Rennecke wrote:
 On 6 August 2014 11:31, Richard Biener richard.guent...@gmail.com wrote:
  Ok, so the problematical case is
 
  struct X { std::string s; };
  void foo (X);
 
 Wouldn't it be even more troublesome with an application that dynloads
 dsos depending on user input.
 The install script might check if the dso with the right soname is present,
 but then you still get dynamic linker errors when the user tries to
 do something with the application, which could be an arbitrary time after
 the upgrade.

Now, if you do the same with libstdc++.so.7, you have exactly the same issue
(need to think what you do with SONAMEs of libraries built with C++), but
furthermore whenever you get both libstdc++.so.6 and libstdc++.so.7 loaded
into the same process, most probably nothing will work at all, there will be
no mangling differences between so.6 and so.7 symbols, etc.

Jakub


Re: [GNU Tools Cauldron 2014] libgccjit.so

2014-08-06 Thread David Malcolm
On Tue, 2014-08-05 at 03:18 +0530, Prathamesh Kulkarni wrote:
 Hi,
Please find attached my notes on libgccjit.so - An experimental
 JIT library using GCC as backend. I would be grateful if you would
 review it for me.

Looks good to me

Dave



Re: [GNU Tools Cauldron 2014] A proposal for type-safe RTL

2014-08-06 Thread David Malcolm
On Tue, 2014-08-05 at 03:20 +0530, Prathamesh Kulkarni wrote:

 Hi,
 Please find attached my notes on A proposal on type-safe RTL.
 I would be grateful if you would review it for me.
 
 Thanks,
 Prathamesh
 


 A proposal for type-safe RTL
 
 Author: David Malcolm
 
RTL is a low-level intermediate langauge used in GCC to perform
 machine-dependent optimziations and
 code generation. The current RTL data strucutures (rtx), is not
 type-safe, and type checking
 cannot be performed during build-time.

Not quite: there is an option ENABLE_RTL_CHECKING to do this, but it's
so expensive that AIUI it's rarely used.

 The motivation of this project is to make RTL type-safe, so that type
 errors can be caught at build-time,
 and to increase readability of code that operates on RTL.

Note that to make RTL type-safe could be ambiguous: I'm looking at
typesafety of GCC's own types, rather than the user's.  My plans
involving making a distinction between RTL instructions vs expressions
i.e. the types of GCC's own implementation.  AIUI, by the time we reach
rtx most of the higher-level types in the *code being compiled* don't
really exist anymore; we're just working with bit patterns of varying
lengths - and it's not my intention to change the latter.

 Representation using C++ class heirarchy:
 Currently rtx is used to represent all RTL-types - instructions,
 expressions, etc.
 The idea is to convert rtx into C++ class heirarchy, with rtx_def
 being base type, rtx_insn representing
 instructions, etc. Using C++ class heirarchy makes it type-safe and
 enables type-errors to be caught at
 build-time
 
 Planned Class herirarchy: 
 
 class rtx_def;
   class rtx_insn; /* (INSN_P (X) || NOTE_P (X)
  || JUMP_TABLE_DATA_P (X) || BARRIER_P (X)
  || LABEL_P (X)) */
 class rtx_real_insn; /* INSN_P (X) */
   class rtx_debug_insn;  /* DEBUG_INSN_P (X) */
   class rtx_nonjump_insn;/* NONJUMP_INSN_P (X) */
   class rtx_jump_insn;   /* JUMP_P (X) */
   class rtx_call_insn;   /* CALL_P (X) */
 class rtx_jump_table_data;   /* JUMP_TABLE_DATA_P (X) */
 class rtx_barrier;   /* BARRIER_P (X) */
 class rtx_code_label;/* LABEL_P (X) */
 class rtx_note;  /* NOTE_P (X) */
 
 Patch-series can be seen at:
 http://dmalcolm.fedorapeople.org/gcc/patch-backups/rtx-classes/
 
 Merge proposal for next GCC release:
 - rtx_insn to represent RTL instructions, subclass of rtx_def.
 rtx_insn would be a big gain in type-safety. 

(nods)   I've been cleaning up and testing the patch series (currently
at 236 patches) and hope to post it for review later today.



[GNU Tools Cauldron 2014] MAGEEC

2014-08-06 Thread Prathamesh Kulkarni
Hi,
   These are my notes for Machine guided energy efficient
compilation presented at Cauldron.

Machine guided energy efficient compilation.

Author: Jeremy Bennett

MAGEEC (Machine guided energy efficient compilation),
is a plugin for GCC and other compilers, which includes a
machine learning system, to tune compiler optimizations to
optimize code for energy efficiency for any particular
program and architecture.

Highlights of the talk:
- MAGEEC will initally look to target both GCC and LLVM.
- Implemented as a compiler plugin, which performs feature
  extraction and allows output of machine learning algorithm,
  to change execution of pass sequence.
- Fractional Factorial Design is used to reduce exploration
  of optimization space.
- MAGEEC has their own benchmark suite BEEBS
  (Bristol/Embecosm Embedded Benchmark Suite) with
  currently 93 benchmarks. BEEBS 2.0 will have a much
  wider range of benchmarks and is scheduled to release on
  31st August 2014.
- The project has produced a low cost energy measurement
  board. A live demo was presented - run a benchmark
  on the development board and find the number of mJ
  consumed.
- It would be useful for MAGEEC for GCC plugin API to
  be more stable.
- Turning passes on and off arbitrarily can result in ICE's.
  The machine learning algorithm should be enhanced to
  understand the pass dependencies and there possibly needs
  to be better documentation on pass dependencies in GCC.
- Currently, cannot achieve better results than -O2, but this is
  expected to change over time.

Thanks,
Prathamesh


[GNU Tools Cauldron 2014] libabigail

2014-08-06 Thread Prathamesh Kulkarni
Hi,
I have written notes for libabigail - Towards Better ABI
compatibility checking presented at Cauldron. I would be
grateful if you would review it for me.

libabigail - Towards Better ABI compatibility checking

Author: Dodji Seketeli

   libabigail (Library for ABI generic analysis and
instrumentation) offers for ABI compatibility checking and
reporting differences between two versions of a given library,
and provide an API for tools that want to build on it's
capabilities. The talk presents work done on libabigail since it's
introduction at Cauldron 2013, and future directions, the project
will take. A first official release is available at:
https://sourceware.org/libabigail/

libabigail is useful for
- Shared library developer: Do my changes break applications
linking to previous version of library ?
- Shared library user - Is my application still compatible with
the new version of the library ?

libabigail consists of DWARF reader, XML reader,
Comparison engine, XML writer and tools that are built using
libabigail's API, for instance bidiff.

Future directions:
- bicompat: Tool for application author to determine if their
application A is still compatible with an updated version of
library L, by examining undefined symbols of A that are
resolved by L.
- easier for automation: Friendly enough to be used from
build-systems.
- Support for uninstantiated templates.

Thanks,
Prathamesh


[GNU Tools Cauldron 2014] GNU C library BOF

2014-08-06 Thread Prathamesh Kulkarni
Hi,
I have written notes for GNU C library BOF presented at
Cauldron. I would be grateful if you would review it for me.

GNU C library BOF

Author: Carlos O'Donell

glibc (GNU C library) is available on most GNU systems
with the Linux kernel. It follows all relevant standards including
ISO C11 and POSIX.1-2008. It's designed to be a portable
and high performance library.

Highlights of BOF:

- Planning for glibc 2.21 and what work needs to be done
between the August - January 2015 timeframe

- Discussions on issues regarding fmemopen, fd locking,
Wundef.

Alternate libm implementations:
- Red Hat is working on supporting alternate libm
implementation, with support for low precision and high precision.
- Intel is looking to add math functions that work on small vectors.

Address Sanitizer:
- glibc has been built with address sanitizer. Efforts are being
made to integrate it with the build system.

- Mentor Graphics planning to port glibc to NIOS II.
  It shall have to wait until Linux kernel patches are in a
  kernel release.

- AArch64 ILP32 ABI: Kernel patches currently in review.
  Work related to compiler is done.

- Port to OpenRISC.

- Port to NaCl (nptl)

Thanks,
Prathamesh


[gomp4] openacc kernels directive support

2014-08-06 Thread Tom de Vries

Jakub,

I've looked into how to implement the openacc kernels directive in gcc.

In order to map the loopnests marked by the kernels directive efficiently on 
accelerator hardware, we need parallelization and vectorization.


Focussing on paralellization for the moment, a possibility for paralellization 
is to use the parloops pass. The parloops pass identifies loops that can be 
parallelized with a factor n, splits off the n-reduced loop into a function and 
issues the function in n parallel threads.


A problem with using parloops for the kernels directive is that the parloops 
pass is placed after lto's gimple-stream read/write point, so the parloops pass 
is executed during the accelerator-specific compilation. So while the resulting 
function with the reduced loop is compiled for the accelerator as required, also 
the code issuing the function in parallel threads is generated for the 
accelerator. While f.i. newer cuda with dynamic parallelism supports launching 
accelerator kernels from within accelerator kernels, I guess that that might not 
hold in general.


I've investigated moving the parloops pass up in the pass list, using attached 
example kernels.c.  It contains 4 loops; 2 loops that set arrays, one loop that 
does a vector addition, and one loop that does a reduction


First, I compile the example using upstream trunk:
...
$ gcc -ftree-parallelize-loops=32 -fdump-tree-all-all -O2 kernels.c -std=c99 
-Wl,-rpath,$(pwd -P)/lean-c/install/lib64

$ ./a.out ; echo $?
sum: 4293394432
0
...

All 4 loops are recognized as parallel by parloops:
...
$ egrep 'SUCCES|FAIL' kernels.c.*parloops
   SUCCESS: may be parallelized
   SUCCESS: may be parallelized
   SUCCESS: may be parallelized
   SUCCESS: may be parallelized
...

Using attached patch, I manage the same with parloops placed after 
pass_build_ealias, with some additional passes inbetween:

...
  NEXT_PASS (pass_build_ealias);
  NEXT_PASS (pass_ch);
  NEXT_PASS (pass_ccp);
  NEXT_PASS (pass_lim_aux);
  NEXT_PASS (pass_parallelize_loops);
 ...

The pass_lim_aux in front is needed because otherwise the loads of pointers a, b 
and c stay in the loop and prevent parallelization.


The pass_ccp is to get rid of:
...
phi is i_5 = PHI 0(3)
arg of phi to exit:   value 0 used outside loop
  checking if it a part of reduction pattern:
  FAILED: it is not a part of reduction.
...

The pass_tree_ch is to get rid of:
...
phi is sum_3 = PHI sum_1(4)
arg of phi to exit:   value sum_1 used outside loop
  checking if it a part of reduction pattern:
  FAILED: it is not a part of reduction.
...

The place after build_ealias is early enough to be before the lto-stream 
write/read. I don't see how we can do this earlier. Before ealias, there's no 
alias info, and one of the loops fails to be recognized as parallel. 
Furthermore, pass_ch, pass_ccp, pass_lim_aux and pass_parloops are written to 
work on cfg/ssa code, which we don't have at omp_low/omp_exp time.


We could insert a pass-group here that only deals with functions that have the 
kernels directive, and do the auto-par thing in a pass_oacc_kernels (which 
should share the majority of the infrastructure with the parloops pass):

...
  NEXT_PASS (pass_build_ealias);
  INSERT_PASSES_AFTER/WITHIN (passes_oacc_kernels)
 NEXT_PASS (pass_ch);
 NEXT_PASS (pass_ccp);
 NEXT_PASS (pass_lim_aux);
 NEXT_PASS (pass_oacc_par);
  POP_INSERT_PASSES ()
...

Any comments, ideas or suggestions ?

Thanks,
- Tom

#include stdlib.h
#include stdio.h

#define N (1024 * 512)
#define N_REF 4293394432

unsigned int *__restrict a;
unsigned int *__restrict b;
unsigned int *__restrict c;

void
init_input (void)
{
  for (unsigned int i = 0; i  N; i++)
a[i] = i * 2;

  for (unsigned int i = 0; i  N; i++)
b[i] = i * 4;
}

void
check_output (void)
{
  unsigned int sum = 0;

  for (unsigned int i = 0; i  N; i++)
sum += c[i];

  printf (sum: %u\n, sum);

  if (sum != N_REF)
abort ();
}

int
main (void)
{
  unsigned int i;

  a = malloc (N * sizeof (unsigned int));
  b = malloc (N * sizeof (unsigned int));
  c = malloc (N * sizeof (unsigned int));

  init_input ();

  for (int ii = 0; ii  N; ii++)
c[ii] = a[ii] + b[ii];

  check_output ();

  free (a);
  free (b);
  free (c);

  return 0;
}

diff --git a/gcc/passes.def b/gcc/passes.def
index f13df6c..b501d2f 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -72,6 +72,10 @@ along with GCC; see the file COPYING3.  If not see
 	  /* pass_build_ealias is a dummy pass that ensures that we
 	 execute TODO_rebuild_alias at this point.  */
 	  NEXT_PASS (pass_build_ealias);
+	  NEXT_PASS (pass_ch);
+	  NEXT_PASS (pass_ccp);
+	  NEXT_PASS (pass_lim_aux);
+	  NEXT_PASS (pass_parallelize_loops);
 	  NEXT_PASS (pass_fre);
 	  NEXT_PASS (pass_merge_phi);
 	  NEXT_PASS (pass_cd_dce);
@@ -159,7 +163,6 @@ along with GCC; see the file COPYING3.  If not see
   

Mrs Sarah... Waitng

2014-08-06 Thread Mrs Sarah Catherine LEGG
Dear

How are you?

I have a very Lucrative and Life Changing Business Opportuinity for you.
You can also check on my Biography from this link as well ( 
http://bank.hangseng.com/1/2/about-us/directors-organisation/board-of-directors 
).

This is my email:sarah.legg...@gmail.com

I hope to hear from you soon

Regard
Mrs Sarah Catherine LEGG




Re: Reload generate invalid instruction on ppc64

2014-08-06 Thread Carrot Wei
I found the root cause.

In function rs6000_preferred_reload_class, it specifically check the
case that reload 0 into a VSX register, then the target reload class
is VSX register. VSX instructions can't load a constant into VSX
registers directly, I guess the author wanted to use a SUB or XOR
instruction to get a 0 value.
Then function gen_reload calls gen_move_insn to generate the reload
instruction, which actually generates a movdi_internal64 insn, and it
doesn't contain a constraint to handle the 0-VSX register case, and
causes ICE.

So it can be fixed by adding a new constraint to movdi_internal64 to
load 0 to VSX register.

thanks
Guozhi Wei

On Tue, Aug 5, 2014 at 1:38 PM, Segher Boessenkool
seg...@kernel.crashing.org wrote:
 On Tue, Aug 05, 2014 at 01:32:00PM +0930, Alan Modra wrote:
 On Mon, Aug 04, 2014 at 05:54:04PM -0700, Carrot Wei wrote:
  Another problem is in the definition of insn pattern *movdi_internal64.
 
  (define_insn *movdi_internal64
[(set (match_operand:DI 0 nonimmediate_operand
  =Y,r,r,r,r,r,?m,?*d,?*d,r,*h,*h,r,?*wg,r,?*wm)
  (match_operand:DI 1 input_operand
  r,Y,r,I,L,nF,d,m,d,*h,r,0,*wg,r,*wm,r))]
TARGET_POWERPC64
  (gpc_reg_operand (operands[0], DImode)
 || gpc_reg_operand (operands[1], DImode))
 
  The predicates of this insn pattern allow the moving of an integer to
  VSX register, but there is no constraint allow this case. Can this
  cause problem in reload?

 Probably, just as you found with fprs.  The underlying issue is that
 the operand predicates don't match the operand constraints.  What's
 more, you can't make them match without breaking up the insn, or
 adding a whole lot of extra alternatives.

 Can you disallow this in the condition of the pattern, just like it
 already requires at least one of the operands to be gpc_reg_operand?


 Segher


ViewVC is broken on your web site

2014-08-06 Thread David Gero
Accessing https://gcc.gnu.org/viewvc/gcc/trunk/

Says it is showing 38 files.  But in fact, it shows only the first 25.  As an 
example, libstdc++-v3 is missing.

Same thing happens in other parts of the tree.

I checked the HTML page source, and the files simply aren't there.

David


Re: ViewVC is broken on your web site

2014-08-06 Thread Paul_Koning

On Aug 6, 2014, at 2:38 PM, David Gero david.g...@exfo.com wrote:

 Accessing https://gcc.gnu.org/viewvc/gcc/trunk/
 
 Says it is showing 38 files.  But in fact, it shows only the first 25.  As an 
 example, libstdc++-v3 is missing.
 
 Same thing happens in other parts of the tree.
 
 I checked the HTML page source, and the files simply aren't there.

The same on https://gcc.gnu.org/viewvc/gcc/trunk/gcc/ — except in that case it 
claims there should be 712 files, and here too is only shows 25 lines.

Time to revert whatever change was made that broke this; as it stands the 
website is completely unuseable.

paul



Re: ViewVC is broken on your web site

2014-08-06 Thread Paolo Carlini

Hi,

On 08/06/2014 08:48 PM, paul_kon...@dell.com wrote:

On Aug 6, 2014, at 2:38 PM, David Gero david.g...@exfo.com wrote:


Accessing https://gcc.gnu.org/viewvc/gcc/trunk/

Says it is showing 38 files.  But in fact, it shows only the first 25.  As an 
example, libstdc++-v3 is missing.

Same thing happens in other parts of the tree.

I checked the HTML page source, and the files simply aren't there.

The same on https://gcc.gnu.org/viewvc/gcc/trunk/gcc/ — except in that case it 
claims there should be 712 files, and here too is only shows 25 lines.

Time to revert whatever change was made that broke this; as it stands the 
website is completely unuseable.
Thus, the widget on top of the page, meant to select the page the user 
wants to see (eg, 30 pages overall for ../gcc/trunk) does *not* work for 
you?!? It works perfectly well for me.


Paolo.


Re: ViewVC is broken on your web site

2014-08-06 Thread Paul_Koning

On Aug 6, 2014, at 2:59 PM, Paolo Carlini paolo.carl...@oracle.com wrote:

 Hi,
 
 On 08/06/2014 08:48 PM, paul_kon...@dell.com wrote:
 On Aug 6, 2014, at 2:38 PM, David Gero david.g...@exfo.com wrote:
 
 Accessing https://gcc.gnu.org/viewvc/gcc/trunk/
 
 Says it is showing 38 files.  But in fact, it shows only the first 25.  As 
 an example, libstdc++-v3 is missing.
 
 Same thing happens in other parts of the tree.
 
 I checked the HTML page source, and the files simply aren't there.
 The same on https://gcc.gnu.org/viewvc/gcc/trunk/gcc/ — except in that case 
 it claims there should be 712 files, and here too is only shows 25 lines.
 
 Time to revert whatever change was made that broke this; as it stands the 
 website is completely unuseable.
 Thus, the widget on top of the page, meant to select the page the user wants 
 to see (eg, 30 pages overall for ../gcc/trunk) does *not* work for you?!? It 
 works perfectly well for me.

It doesn’t work because I didn’t see it, and when I looked at it some more I 
had no clue what it’s for.

This is not a good way of designing a UI.  It’s cryptic, it’s hard to find, the 
default is questionable, and it doesn’t offer a “see everything” feature.  
There is no visual indication (other than the “wrong” value of the files count) 
that the display is incomplete.  At the very least, it needs to say “more 
entries” or “... before and/or after the subset that is displayed, if a subset 
is displayed.

But the preferred answer in my mind is to get rid of this thing and go back to 
displaying the whole page.  If you do want to keep the subset thing, at least 
make it NOT the default.

paul



RE: ViewVC is broken on your web site

2014-08-06 Thread David Gero
Hi,

On 08/06/2014 08:48 PM, paul_kon...@dell.com wrote:
 On Aug 6, 2014, at 2:38 PM, David Gero david.g...@exfo.com wrote:

 Accessing https://gcc.gnu.org/viewvc/gcc/trunk/

 Says it is showing 38 files.  But in fact, it shows only the first 25.  As 
 an example, libstdc++-v3 is missing.

 Same thing happens in other parts of the tree.

 I checked the HTML page source, and the files simply aren't there.
 The same on https://gcc.gnu.org/viewvc/gcc/trunk/gcc/ - except in that case 
 it claims there should be 712 files, and here too is only shows 25 lines.

 Time to revert whatever change was made that broke this; as it stands the 
 website is completely unuseable.

Thus, the widget on top of the page, meant to select the page the user wants 
to see (eg, 30 pages overall for ../gcc/trunk) does *not* work for you?!? It 
works perfectly well for me.

Paolo.

Wow.  What an amazingly unintuitive widget.  I looked all over the page for a 
Next 25 files button.  A Go To button that doesn't talk about next 25 files 
meant nothing.

ViewVC used to display all the files.  This is a giant leap backward in the 
User Interface.

David


Re: ViewVC is broken on your web site

2014-08-06 Thread Paolo Carlini

Hi,

On 08/06/2014 09:19 PM, David Gero wrote:
Wow. What an amazingly unintuitive widget. I looked all over the page 
for a Next 25 files button. A Go To button that doesn't talk about 
next 25 files meant nothing. ViewVC used to display all the files. 
This is a giant leap backward in the User Interface.
AFAIK the tool is neither part of GCC neither part of the GNU Project, 
GCC is simply using it. Thus my guess would be that somebody installed 
an updated version which, together with a number of improvements, has 
also this questionable change. Personally, I don't have a strong 
opinion, but since you guys have one, I would recommend getting in 
contact with the authors of the tool, contribute ideas, maybe code too.


Paolo.



Re: ViewVC is broken on your web site

2014-08-06 Thread Oleg Endo
On Wed, 2014-08-06 at 21:34 +0200, Paolo Carlini wrote:
 Hi,
 
 On 08/06/2014 09:19 PM, David Gero wrote:
  Wow. What an amazingly unintuitive widget. I looked all over the page 
  for a Next 25 files button. A Go To button that doesn't talk about 
  next 25 files meant nothing. ViewVC used to display all the files. 
  This is a giant leap backward in the User Interface.
 AFAIK the tool is neither part of GCC neither part of the GNU Project, 
 GCC is simply using it. Thus my guess would be that somebody installed 
 an updated version which, together with a number of improvements, has 
 also this questionable change. Personally, I don't have a strong 
 opinion, but since you guys have one, I would recommend getting in 
 contact with the authors of the tool, contribute ideas, maybe code too.

It seems this behavior can be configured 'use_pagesize = 0'
See also: http://oss.segetech.com/bugz-svn-wiki/viewvc.conf 

This page limit thing is really ... argh ... 

Cheers,
Oleg





Re: ViewVC is broken on your web site

2014-08-06 Thread Jonathan Wakely
On 6 August 2014 20:12,  paul_kon...@dell.com wrote:
 But the preferred answer in my mind is to get rid of this thing and go back 
 to displaying the whole page.  If you do want to keep the subset thing, at 
 least make it NOT the default.

IIRC that causes timeouts when the site is busy, because it has to
fetch a lot of information about a lot of files.

Only showing a subset of files is an OK compromise, but the UI could
be much better. Complaining about it here is pointless though.


gcc-4.9-20140806 is now available

2014-08-06 Thread gccadmin
Snapshot gcc-4.9-20140806 is now available on
  ftp://gcc.gnu.org/pub/gcc/snapshots/4.9-20140806/
and on various mirrors, see http://gcc.gnu.org/mirrors.html for details.

This snapshot has been generated from the GCC 4.9 SVN branch
with the following options: svn://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch 
revision 213683

You'll find:

 gcc-4.9-20140806.tar.bz2 Complete GCC

  MD5=15b7e719773e7f6a4b983ab453f955ab
  SHA1=bd87edd995a192c8b3499445abcb2a5083a388c9

Diffs from 4.9-20140730 are available in the diffs/ subdirectory.

When a particular snapshot is ready for public consumption the LATEST-4.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.


Re: LTO and version scripts

2014-08-06 Thread Alan Modra
On Tue, Aug 05, 2014 at 08:18:06PM -0400, Ulrich Drepper wrote:
 On Tue, Aug 5, 2014 at 12:57 AM, Alan Modra amo...@gmail.com wrote:
  What version linker?  In particular, do you have the fix for PR12975?
 
 The Fedora 19 version.  I think it hasn't changed since then which
 means it is 2.23.88.0.1-13 (from the RPM version number).  No idea
 whether that fix is included and unfortunately won't have time to try
 before the weekend.

Both Fedora 19 and 20 have the patch needed for this to work.  Hmm, I
suppose the other thing necessary is a gcc that implements
LDPT_GET_SYMBOLS_V2.  You may be lacking that.  Here's what I see with
mainline gcc and ld.

cat  ltoshare.c \EOF
int
cond (void)
{
  return 0;
}

extern void something (void);

int
main (void)
{
  if (cond ())
something ();
  return 0;
}
EOF
cat  ltoshare.ver \EOF
{
  global: main;
  local: *;
};
EOF
~/build/gcc-current/gcc/xgcc -B ~/build/gcc-current/gcc/ -B ld/tmpdir/ld -O2 
-fPIC -flto -c ltoshare.c
~/build/gcc-current/gcc/xgcc -B ~/build/gcc-current/gcc/ -B ld/tmpdir/ld 
-shared -flto -o ltoshare.so ltoshare.o
nm -D ltoshare.so | grep something
 U something
~/build/gcc-current/gcc/xgcc -B ~/build/gcc-current/gcc/ -B ld/tmpdir/ld 
-shared -flto -o ltoshare.so ltoshare.o -Wl,--version-script=ltoshare.ver
nm -D ltoshare.so | grep something


-- 
Alan Modra
Australia Development Lab, IBM


Re: Help w/ PR61538?

2014-08-06 Thread Joshua Kinard
On 07/28/2014 17:38, Matthew Fortune wrote:
 I'll switch to replying on PR61538. I had not read all the ticket
 previously and although I may have found a problem it seems it may not
 be the cause of this failure.
 
 The generated code differences after the patches seem significant but
 I may not get chance to look at the differences in detail for a little
 while.


For my own information, what's the cutoff date for fixes to regressions like
this to make it into gcc-4.9.1?

-- 
Joshua Kinard
Gentoo/MIPS
ku...@gentoo.org
4096R/D25D95E3 2011-03-28

The past tempts us, the present confuses us, the future frightens us.  And
our lives slip away, moment by moment, lost in that vast, terrible in-between.

--Emperor Turhan, Centauri Republic


[Bug bootstrap/61320] [4.10 regression] ICE in jcf-parse.c:1622 (parse_class_file

2014-08-06 Thread tony.wang at arm dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320

wangzheyu tony.wang at arm dot com changed:

   What|Removed |Added

 CC||tony.wang at arm dot com

--- Comment #64 from wangzheyu tony.wang at arm dot com ---
 
 Fix:
 
 Index: gcc/tree-ssa-loop-ivopts.c
 ===
 --- gcc/tree-ssa-loop-ivopts.c  (revision 213050)
 +++ gcc/tree-ssa-loop-ivopts.c  (working copy)
 @@ -1704,6 +1704,8 @@ may_be_unaligned_p (tree ref, tree step)
  return false;
  
unsigned int align = TYPE_ALIGN (TREE_TYPE (ref));
 +  if (GET_MODE_ALIGNMENT (TYPE_MODE (TREE_TYPE (ref)))  align)
 +align = GET_MODE_ALIGNMENT (TYPE_MODE (TREE_TYPE (ref)));
  
unsigned HOST_WIDE_INT bitpos;
unsigned int ref_align;
 
 can you test and apply that patch?

Also run into a similar regression on arm target, which will generate unaligned
memory access on target which don't support unaligned data access. This patch
does fix this regression.

Thx


[Bug rtl-optimization/62030] wrong code due to ifcvt merging two stores which have different aliasing sets

2014-08-06 Thread vries at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62030

vries at gcc dot gnu.org changed:

   What|Removed |Added

 CC||vries at gcc dot gnu.org

--- Comment #2 from vries at gcc dot gnu.org ---
I think the test-case is reading an undefined value from n-next, but that's
easy enough to fix with an intializer for node.

Taking the tentative patch from PR62004, (
https://gcc.gnu.org/bugzilla/attachment.cgi?id=33242action=diff ), with this
patch added prevents the if-conversion in this case:
...
@@ -2504,7 +2534,9 @@ noce_process_if_block (struct noce_if_info *if_info)
   if (! insn_b
  || insn_b != last_active_insn (else_bb, FALSE)
  || (set_b = single_set (insn_b)) == NULL_RTX
- || ! rtx_equal_p (x, SET_DEST (set_b)))
+ || ! (rtx_equal_p (x, SET_DEST (set_b))
+(GET_CODE (x) != MEM
+   || mem_interchangeable_p (x, SET_DEST (set_b
return FALSE;
 }
   else
...


[Bug rtl-optimization/62030] wrong code due to ifcvt merging two stores which have different aliasing sets

2014-08-06 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62030

--- Comment #3 from Andrew Pinski pinskia at gcc dot gnu.org ---
(In reply to vries from comment #2)
 I think the test-case is reading an undefined value from n-next, but that's
 easy enough to fix with an intializer for node.

Since node is a global variable, it is zero initialized so there is no reading
from an uninitialized area.


[Bug rtl-optimization/62004] dead type-unsafe load replaces type-safe load

2014-08-06 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62004

--- Comment #3 from Andrew Pinski pinskia at gcc dot gnu.org ---
(In reply to Richard Biener from comment #1)
 Heh, interesting set of events ;)

I have a store version that fires on mips64 with a modified testcase too, see
bug 62030.


[Bug c/62031] New: Different results between O2 and O3 for gcc-4.7.2-5 (Debian 4.7.2-5)

2014-08-06 Thread tomasz.ostaszewski at interia dot pl
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62031

Bug ID: 62031
   Summary: Different results between O2 and O3 for gcc-4.7.2-5
(Debian 4.7.2-5)
   Product: gcc
   Version: 4.7.2
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: tomasz.ostaszewski at interia dot pl

Created attachment 33255
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33255action=edit
problematic code, preprocessed

Hello, 

My little program produces different results when compiled with O2 and O3
options. Turning on/off '-fstrict-aliasing' does not make any difference. 

#include stdlib.h
#include stdio.h

#define NUM_OF_STATES 4
typedef unsigned int entry_t[2];
typedef struct entries_item { entry_t metricEntries_[0]; } entries_item_t;

void test_00(size_t numOfStates, entries_item_t* p_bm, const unsigned int*
polyArray,
  size_t polyArraySize) {
size_t idx;
unsigned int hlp0, hlp1;
for (idx = 0; idx  numOfStates; ++idx) {
size_t idy;

hlp0 = (idx  1) | 0x00;
hlp1 = (idx  1) | 0x01;
p_bm-metricEntries_[idx][0] = 0;
p_bm-metricEntries_[idx][1] = 0;
for (idy = 0; idy  polyArraySize; ++idy) {
p_bm-metricEntries_[idx][0] |= __builtin_parity(hlp0 
polyArray[idy])  idy;
p_bm-metricEntries_[idx][1] |= __builtin_parity(hlp1 
polyArray[idy])  idy;
#if 0
fprintf(stderr, %4.4u : %8.8x %8.8x\n, __LINE__,
p_bm-metricEntries_[idx][0], p_bm-metricEntries_[idx][1]);
#endif
}
}
fprintf(stderr, %4.4u :, __LINE__);
for (idx = 0; idx  numOfStates; ++idx) {
fprintf(stderr, %2u:%2u , p_bm-metricEntries_[idx][0],
p_bm-metricEntries_[idx][1]);
}
fprintf(stderr, \n);
}

int main(__attribute__((unused)) int argc, __attribute__((unused)) char** argv)
{
unsigned int polyArray[] = { 0x07, 0x05 };
entries_item_t* pBranchMetrics;

pBranchMetrics = malloc(sizeof(entry_t) * NUM_OF_STATES);
test_00(NUM_OF_STATES, pBranchMetrics, polyArray, sizeof(polyArray) /
sizeof(polyArray[0]));
free(pBranchMetrics);
return 0;
}

When compiled with O2 produces a correct result:
0029 : 0: 3  1: 2  3: 0  2: 1 

When compiled with O3 produces an incorrect result:
0029 : 0: 2  0: 2  2: 0  2: 0 

Suprisingly, changing #if 0 to #if 1 forces program to produce correct results.
Also adding the 'static' keyword before 'void test_00' also changes program to
produce a correct result. Also, changing zero sized array to fixed array (size
1) also makes the problem go away. 

Valgrind does not report any violations in either case (O2/O3). Both gcc-4.6.3
and clang 3.5.0 produce correct results with O3. 

problematic gcc version: 
$ gcc --verbose
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i486-linux-gnu/4.7/lto-wrapper
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5'
--with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs
--enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.7 --enable-shared --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7
--libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object
--enable-plugin --enable-objc-gc --enable-targets=all --with-arch-32=i586
--with-tune=generic --enable-checking=release --build=i486-linux-gnu
--host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-5) 

Assembler:
$as --version
GNU assembler (GNU Binutils for Debian) 2.22
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `i486-linux-gnu'.

System:
Linux debian-vm-x86 3.2.0-4-686-pae #1 SMP Debian 3.2.60-1+deb7u3 i686
GNU/Linux

LibC:
 /lib/i386-linux-gnu/libc-2.13.so 
GNU C Library (Debian EGLIBC 2.13-38+deb7u3) stable release version 2.13, by
Roland McGrath et al.
Copyright (C) 2011 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.
Compiled by GNU CC version 4.4.7.
Compiled on a Linux 3.2.57 system on 2014-07-09.
Available extensions:
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
http://www.debian.org/Bugs/.


[Bug rtl-optimization/62030] wrong code due to ifcvt merging two stores which have different aliasing sets

2014-08-06 Thread vries at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62030

--- Comment #4 from vries at gcc dot gnu.org ---
(In reply to Andrew Pinski from comment #3)
 (In reply to vries from comment #2)
  I think the test-case is reading an undefined value from n-next, but that's
  easy enough to fix with an intializer for node.
 
 Since node is a global variable, it is zero initialized so there is no
 reading from an uninitialized area.

Ah, right, I thought that only applied to static. Thanks for setting that
straight.


[Bug target/62014] [AArch64] Using -mgeneral-regs-only may lead to ICE

2014-08-06 Thread ktkachov at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62014

--- Comment #15 from ktkachov at gcc dot gnu.org ---
I can't reproduce this with current trunk and 4.9.1.
What exact compiler version and options did you use?
I used -O2 -mgeneral-regs-only on an aarch64-none-elf compiler
gcc version 4.10.0 20140805


[Bug tree-optimization/62032] New: FAIL: vsnprintf-chk.c execution, -O2 -flto -fno-use-linker-plugin -flto-partition=none

2014-08-06 Thread amker.cheng at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62032

Bug ID: 62032
   Summary: FAIL: vsnprintf-chk.c execution,  -O2 -flto
-fno-use-linker-plugin -flto-partition=none
   Product: gcc
   Version: 4.10.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: amker.cheng at gmail dot com

Created attachment 33256
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33256action=edit
tarball of dump files

Hi,
I monitored below failures on both aarch64-none-elf and arm-none-eabi.
FAIL: gcc.c-torture/execute/builtins/vsnprintf-chk.c execution,  -O2 -flto
-fno-use-linker-plugin -flto-partition=none
FAIL: gcc.c-torture/execute/builtins/vsnprintf-chk.c execution,  -O2 -flto
-fuse-linker-plugin -fno-fat-lto-objects

It's first introduced by r213585, but I am not sure if it's revealed by the
change.  The corresponding (goodbogus) dump files are attached.

arm-none-eabi is configured like:
../gcc/configure --build=x86_64-linux-gnu --host=x86_64-linux-gnu
--target=arm-none-eabi --prefix=.../trunk-orig/target/ --disable-decimal-float
--disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath
--disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared
--disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib
--with-headers=yes --with-sysroot=.../trunk-orig/target/arm-none-eabi
--with-host-libstdcxx=... --with-mode=thumb --with-arch=armv7-m
--disable-multilib --enable-lto --enable-languages=c,c++,lto

Thanks.


[Bug c/62031] Different results between O2 and O3 for gcc-4.7.2-5 (Debian 4.7.2-5)

2014-08-06 Thread mikpelinux at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62031

Mikael Pettersson mikpelinux at gmail dot com changed:

   What|Removed |Added

 CC||mikpelinux at gmail dot com

--- Comment #1 from Mikael Pettersson mikpelinux at gmail dot com ---
I can reproduce with 4.8.3 and 4.9.1.  -fsanitize={address,undefined} finds
nothing to complain about.


[Bug tree-optimization/62032] FAIL: vsnprintf-chk.c execution, -O2 -flto -fno-use-linker-plugin -flto-partition=none

2014-08-06 Thread amker.cheng at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62032

--- Comment #1 from bin.cheng amker.cheng at gmail dot com ---
Only fail with lto options.


[Bug rtl-optimization/61801] sched2 miscompiles syscall sequence with -g

2014-08-06 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801

--- Comment #21 from Jakub Jelinek jakub at gcc dot gnu.org ---
Author: jakub
Date: Wed Aug  6 08:40:19 2014
New Revision: 213652

URL: https://gcc.gnu.org/viewcvs?rev=213652root=gccview=rev
Log:
PR rtl-optimization/61801
* gcc.target/i386/pr61801.c: Rewritten.

Modified:
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gcc.target/i386/pr61801.c


[Bug rtl-optimization/61801] sched2 miscompiles syscall sequence with -g

2014-08-06 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801

--- Comment #22 from Jakub Jelinek jakub at gcc dot gnu.org ---
Author: jakub
Date: Wed Aug  6 08:44:05 2014
New Revision: 213653

URL: https://gcc.gnu.org/viewcvs?rev=213653root=gccview=rev
Log:
PR rtl-optimization/61801
* gcc.target/i386/pr61801.c: Rewritten.

Modified:
branches/gcc-4_9-branch/gcc/testsuite/ChangeLog
branches/gcc-4_9-branch/gcc/testsuite/gcc.target/i386/pr61801.c


[Bug rtl-optimization/61801] sched2 miscompiles syscall sequence with -g

2014-08-06 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61801

--- Comment #23 from Jakub Jelinek jakub at gcc dot gnu.org ---
Author: jakub
Date: Wed Aug  6 08:50:12 2014
New Revision: 213654

URL: https://gcc.gnu.org/viewcvs?rev=213654root=gccview=rev
Log:
PR rtl-optimization/61801
* gcc.target/i386/pr61801.c: Rewritten.

Modified:
branches/gcc-4_8-branch/gcc/testsuite/ChangeLog
branches/gcc-4_8-branch/gcc/testsuite/gcc.target/i386/pr61801.c


[Bug tree-optimization/62032] FAIL: vsnprintf-chk.c execution, -O2 -flto -fno-use-linker-plugin -flto-partition=none

2014-08-06 Thread ktkachov at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62032

ktkachov at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
  Known to work||4.9.1
   Keywords||lto
   Last reconfirmed||2014-08-06
 CC||ktkachov at gcc dot gnu.org
 Ever confirmed|0   |1
   Target Milestone|--- |4.10.0
  Known to fail||4.10.0

--- Comment #2 from ktkachov at gcc dot gnu.org ---
confirmed, I've noticed this as well.
This seems to appear with LTO


[Bug tree-optimization/62031] [4.8/4.9/4.10 Regression] Different results between O2 and O2 -fpredictive-commoning

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62031

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
  Known to work||4.3.4
   Keywords||wrong-code
   Last reconfirmed||2014-08-06
  Component|c   |tree-optimization
 CC||rguenth at gcc dot gnu.org
 Ever confirmed|0   |1
Summary|Different results between   |[4.8/4.9/4.10 Regression]
   |O2 and O3 for gcc-4.7.2-5   |Different results between
   |(Debian 4.7.2-5)|O2 and O2
   ||-fpredictive-commoning
   Target Milestone|--- |4.8.4
  Known to fail||4.7.4, 4.9.1

--- Comment #2 from Richard Biener rguenth at gcc dot gnu.org ---
-O2 -fpredictive-commoning fails as well (thus culprit found).


[Bug lto/62026] [4.9/4.10 Regression] Crash in lto_get_decl_name_mapping

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62026

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 CC||hubicka at gcc dot gnu.org
   Target Milestone|--- |4.9.2


[Bug tree-optimization/62033] New: okteta 4.13.97 error at -O3 -D_FORTIFY_SOURCE=2

2014-08-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62033

Bug ID: 62033
   Summary: okteta 4.13.97 error at -O3 -D_FORTIFY_SOURCE=2
   Product: gcc
   Version: 4.10.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: amodra at gmail dot com

Created attachment 33257
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33257action=edit
delta+hand reduced testcase

Found on powerpc64le with 4.9, and then with x86_64 4.10.0 20140727

Due to __warn_memset_zero_len reference in object, we get
.../bytearraymodel_p.o: In function `memset':
.../bits/string3.h:81: warning: memset used with constant zero length
parameter; this could be due to transposed parameters
collect2: error: ld returned 1 exit status

Compile testcase with 
-O3 -fvisibility=hidden -Werror=return-type -fvisibility-inlines-hidden


[Bug tree-optimization/62033] okteta 4.13.97 error at -O3 -D_FORTIFY_SOURCE=2

2014-08-06 Thread pinskia at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62033

--- Comment #1 from Andrew Pinski pinskia at gcc dot gnu.org ---
I don't see a bug here as there is one case where addSize can return 0 and with
jump threading and basic block copying, we get a zero size passed to memset.


[Bug rtl-optimization/62030] wrong code due to ifcvt merging two stores which have different aliasing sets

2014-08-06 Thread vries at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62030

--- Comment #5 from vries at gcc dot gnu.org ---
Created attachment 33258
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33258action=edit
Updated tentative patch for if-conversion, including fix for pr62030

Updated tentative patch for if-conversion, including fix for pr62030


[Bug tree-optimization/62033] okteta 4.13.97 error at -O3 -D_FORTIFY_SOURCE=2

2014-08-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62033

--- Comment #2 from Alan Modra amodra at gmail dot com ---
I can see where you're coming from Andrew, but what is disconcerting about this
is that the _FORTIFY_SOURCE warning is plainly incorrect here.  How is one
supposed to write a string.h memset macro using __builtin_constant_p() to
provide a useful _FORTIFY_SOURCE warning, in the face of this sort of
optimisation?

Users are going to see this as __builtin_constant_p() is broken.


[Bug lto/49571] -flto -Wl,--as-needed drops needed libraries with GNU ld and linker plugin

2014-08-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49571

Alan Modra amodra at gmail dot com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 CC||amodra at gmail dot com
 Resolution|--- |WORKSFORME

--- Comment #3 from Alan Modra amodra at gmail dot com ---
Works with BFD ld too.


[Bug lto/52401] lto can't handle ld script

2014-08-06 Thread amodra at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52401

Alan Modra amodra at gmail dot com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 CC||amodra at gmail dot com
 Resolution|--- |WORKSFORME

--- Comment #4 from Alan Modra amodra at gmail dot com ---
Works with mainline ld.  Has been fixed for quite a while.


[Bug tree-optimization/62031] [4.8/4.9/4.10 Regression] Different results between O2 and O2 -fpredictive-commoning

2014-08-06 Thread mpolacek at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62031

Marek Polacek mpolacek at gcc dot gnu.org changed:

   What|Removed |Added

 CC||mpolacek at gcc dot gnu.org

--- Comment #3 from Marek Polacek mpolacek at gcc dot gnu.org ---
Started with r175704.


[Bug lto/62034] New: ICE for big statically initialized arrays compiled with LTO

2014-08-06 Thread enkovich.gnu at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62034

Bug ID: 62034
   Summary: ICE for big statically initialized arrays compiled
with LTO
   Product: gcc
   Version: 4.10.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: lto
  Assignee: unassigned at gcc dot gnu.org
  Reporter: enkovich.gnu at gmail dot com

Created attachment 33259
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33259action=edit
Reproducer

I get ICE when try to compile tests with big amount of statically initialized
data.

gcc --version
gcc (GCC) 4.10.0 20140806 (experimental)
Copyright (C) 2014 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.

gcc -flto test.c
gcc: internal compiler error: Segmentation fault (program lto1)
0x405c80 execute
../../gcc-ref/gcc/gcc.c:2900
0x409fe9 do_spec_1
../../gcc-ref/gcc/gcc.c:4704
0x40d475 process_brace_body
../../gcc-ref/gcc/gcc.c:5987
0x40d2b1 handle_braces
../../gcc-ref/gcc/gcc.c:5901
0x40bf9d do_spec_1
../../gcc-ref/gcc/gcc.c:5358
0x40d475 process_brace_body
../../gcc-ref/gcc/gcc.c:5987
0x40d2b1 handle_braces
../../gcc-ref/gcc/gcc.c:5901
0x40bf9d do_spec_1
../../gcc-ref/gcc/gcc.c:5358
0x40c38c do_spec_1
../../gcc-ref/gcc/gcc.c:5473
0x40d475 process_brace_body
../../gcc-ref/gcc/gcc.c:5987
0x40d2b1 handle_braces
../../gcc-ref/gcc/gcc.c:5901
0x40bf9d do_spec_1
../../gcc-ref/gcc/gcc.c:5358
0x409664 do_spec_2
../../gcc-ref/gcc/gcc.c:4405
0x409582 do_spec(char const*)
../../gcc-ref/gcc/gcc.c:4372
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See http://gcc.gnu.org/bugs.html for instructions.
lto-wrapper: fatal error: gcc-ref-build/bin/gcc returned 4 exit status
compilation terminated.
/usr/bin/ld: lto-wrapper failed
collect2: error: ld returned 1 exit status

Debugger shows that problem appears when lto_input_tree tries to dig through a
bunch of SCC entries in input stream.  Each SCC entry cause two new functions
(lto_input_tree and lto_input_tree_1) in the call stack.  With many consequent
SCC entries stack may grow too much (in my case compiler segfaulted with ~600
000 entries in the call stack).

Attached test has a statically initialized array with a million elements. 
Bigger data set may be required to break the compiler if you use increased
stack size.

Problem appeared after this commit:
https://gcc.gnu.org/ml/gcc-cvs/2014-07/msg00291.html

Following patch removing recursion helps me to compile my tests:

diff --git a/gcc/lto-streamer-in.c b/gcc/lto-streamer-in.c
index 698f926..25657da 100644
--- a/gcc/lto-streamer-in.c
+++ b/gcc/lto-streamer-in.c
@@ -1345,7 +1345,16 @@ lto_input_tree_1 (struct lto_input_block *ib, struct
data_in *data_in,
 tree
 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
 {
-  return lto_input_tree_1 (ib, data_in, streamer_read_record_start (ib), 0);
+  enum LTO_tags tag;
+
+  /* Skip SCC entries.  */
+  while ((tag = streamer_read_record_start (ib)) == LTO_tree_scc)
+{
+  unsigned len, entry_len;
+  lto_input_scc (ib, data_in, len, entry_len);
+}
+
+  return lto_input_tree_1 (ib, data_in, tag, 0);
 }

Did not fully test this patch yet.


[Bug bootstrap/61320] [4.10 regression] ICE in jcf-parse.c:1622 (parse_class_file

2014-08-06 Thread ro at CeBiTec dot Uni-Bielefeld.DE
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320

--- Comment #65 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE ---
 --- Comment #61 from Eric Botcazou ebotcazou at gcc dot gnu.org ---
[...]
 can you test and apply that patch?

 I think that it needs to be applied on both mainline and 4.9 branch then.

Testing on the 4.9 branch also completed successfully, so from my POV
the patch is good to go in both mainline and branch.

Thanks.
Rainer


[Bug tree-optimization/62031] [4.8/4.9/4.10 Regression] Different results between O2 and O2 -fpredictive-commoning

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62031

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

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

--- Comment #4 from Richard Biener rguenth at gcc dot gnu.org ---
Mine then.


[Bug bootstrap/61320] [4.10 regression] ICE in jcf-parse.c:1622 (parse_class_file

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320

--- Comment #66 from Richard Biener rguenth at gcc dot gnu.org ---
Author: rguenth
Date: Wed Aug  6 11:41:13 2014
New Revision: 213661

URL: https://gcc.gnu.org/viewcvs?rev=213661root=gccview=rev
Log:
2014-08-06  Richard Biener  rguent...@suse.de

PR tree-optimization/61320
* tree-ssa-loop-ivopts.c (may_be_unaligned_p): Properly
handle misaligned loads.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/tree-ssa-loop-ivopts.c


[Bug bootstrap/61320] [4.10 regression] ICE in jcf-parse.c:1622 (parse_class_file

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320

--- Comment #67 from Richard Biener rguenth at gcc dot gnu.org ---
Author: rguenth
Date: Wed Aug  6 11:42:22 2014
New Revision: 213662

URL: https://gcc.gnu.org/viewcvs?rev=213662root=gccview=rev
Log:
2014-08-06  Richard Biener  rguent...@suse.de

PR tree-optimization/61320
* tree-ssa-loop-ivopts.c (may_be_unaligned_p): Properly
handle misaligned loads.

Modified:
branches/gcc-4_9-branch/gcc/ChangeLog
branches/gcc-4_9-branch/gcc/tree-ssa-loop-ivopts.c


[Bug bootstrap/61320] [4.10 regression] ICE in jcf-parse.c:1622 (parse_class_file

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61320

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
  Known to work||4.10.0, 4.8.3, 4.9.2
 Resolution|--- |FIXED
   Target Milestone|4.10.0  |4.9.2
  Known to fail|4.8.3   |4.9.1

--- Comment #68 from Richard Biener rguenth at gcc dot gnu.org ---
Fixed.


[Bug tree-optimization/62021] ICE in verify_gimple_assign_single

2014-08-06 Thread jakub at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62021

--- Comment #3 from Jakub Jelinek jakub at gcc dot gnu.org ---
The problem is that get_vectype_for_scalar_type_and_size for pointers just
returns vectors of pointer sized integers instead of vectors of pointers.
So, either we need to VCE it, or change the simd_clones to instead use vectors
of
pointer sized integers instead of vectors of pointers for the arguments.


[Bug target/61535] [4.10 Regression] SIGBUS in gen_group_rtx compiling 64-bit gcc.dg/vect/vect-singleton_1.c

2014-08-06 Thread ro at CeBiTec dot Uni-Bielefeld.DE
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61535

--- Comment #2 from ro at CeBiTec dot Uni-Bielefeld.DE ro at CeBiTec dot 
Uni-Bielefeld.DE ---
I'm seeing the same on the 4.7, 4.8, and 4.9 branches.  Also
reproducible in i386-pc-solaris2.11 x sparc-solaris2.11 and
x86_64-unknown-linux-gnu crosses.

Rainer


[Bug lto/62034] ICE for big statically initialized arrays compiled with LTO

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62034

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2014-08-06
 Ever confirmed|0   |1

--- Comment #1 from Richard Biener rguenth at gcc dot gnu.org ---
Ah, the issue is that the tail-recursion doesn't work.  Mine.


[Bug lto/62034] ICE for big statically initialized arrays compiled with LTO

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62034

--- Comment #2 from Richard Biener rguenth at gcc dot gnu.org ---
Better patch:

Index: gcc/lto-streamer-in.c
===
--- gcc/lto-streamer-in.c   (revision 213660)
+++ gcc/lto-streamer-in.c   (working copy)
@@ -1325,13 +1325,17 @@ lto_input_tree_1 (struct lto_input_block
 }
   else if (tag == LTO_tree_scc)
 {
-  unsigned len, entry_len;
-
-  /* Input and skip the SCC.  */
-  lto_input_scc (ib, data_in, len, entry_len);
+  /* Input and skip SCCs.  */
+  do
+   {
+ unsigned len, entry_len;
+ lto_input_scc (ib, data_in, len, entry_len);
+ tag = streamer_read_record_start (ib);
+   }
+  while (tag == LTO_tree_scc);

   /* Recurse.  */
-  return lto_input_tree (ib, data_in);
+  return lto_input_tree_1 (ib, data_in, tag, 0);
 }
   else
 {


[Bug tree-optimization/62021] ICE in verify_gimple_assign_single

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62021

--- Comment #4 from Richard Biener rguenth at gcc dot gnu.org ---
(In reply to Jakub Jelinek from comment #3)
 The problem is that get_vectype_for_scalar_type_and_size for pointers just
 returns vectors of pointer sized integers instead of vectors of pointers.
 So, either we need to VCE it, or change the simd_clones to instead use
 vectors of
 pointer sized integers instead of vectors of pointers for the arguments.

The latter.  There are no vectors of pointers.

Richard.


[Bug lto/62034] ICE for big statically initialized arrays compiled with LTO

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62034

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

   Assignee|unassigned at gcc dot gnu.org  |rguenth at gcc dot 
gnu.org

--- Comment #3 from Richard Biener rguenth at gcc dot gnu.org ---
Or actually

Index: gcc/lto-streamer-in.c
===
--- gcc/lto-streamer-in.c   (revision 213660)
+++ gcc/lto-streamer-in.c   (working copy)
@@ -1324,15 +1324,7 @@ lto_input_tree_1 (struct lto_input_block
   streamer_tree_cache_append (data_in-reader_cache, result, hash);
 }
   else if (tag == LTO_tree_scc)
-{
-  unsigned len, entry_len;
-
-  /* Input and skip the SCC.  */
-  lto_input_scc (ib, data_in, len, entry_len);
-
-  /* Recurse.  */
-  return lto_input_tree (ib, data_in);
-}
+gcc_unreachable ();
   else
 {
   /* Otherwise, materialize a new node from IB.  */
@@ -1345,7 +1337,15 @@ lto_input_tree_1 (struct lto_input_block
 tree
 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
 {
-  return lto_input_tree_1 (ib, data_in, streamer_read_record_start (ib), 0);
+  enum LTO_tags tag;
+
+  /* Input and skip SCCs.  */
+  while ((tag = streamer_read_record_start (ib)) == LTO_tree_scc)
+{
+  unsigned len, entry_len;
+  lto_input_scc (ib, data_in, len, entry_len);
+}
+  return lto_input_tree_1 (ib, data_in, tag, 0);
 }


[Bug tree-optimization/62035] New: [4.9 Regresion] wrong code building libapache-mod-perl with -O1, works with -O1 -fno-tree-dse

2014-08-06 Thread doko at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62035

Bug ID: 62035
   Summary: [4.9 Regresion] wrong code building libapache-mod-perl
with -O1, works with -O1 -fno-tree-dse
   Product: gcc
   Version: 4.9.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: tree-optimization
  Assignee: unassigned at gcc dot gnu.org
  Reporter: doko at gcc dot gnu.org

Created attachment 33260
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33260action=edit
test case

[forwarded from http://bugs.debian.org/754901]

libapache2-mod-perl2 build segfaults in the test suite when built with gcc 4.9
(r213317) with -O1 or higher, building with -O1 -fno-tree-dse works around it.
seen at least on x86_64-linux-gnu.

attributing one function with

__attribute__((optimize(-fno-tree-dse)))
modperl_enc.c (modperl_env_table_populate)

is enough to avoid the segfaults in the test suite. The diff in the assembler
is:

--- ok/modperl_env.s2014-08-06 12:42:36.714269110 +
+++ bad/modperl_env.s   2014-08-06 12:40:44.441445210 +
@@ -118,7 +118,6 @@
 .LVL15:
movq%rax, %r14
 .LVL16:
-   movq%rax, 40(%rsp)
subq$8, %rsp
.cfi_def_cfa_offset 120
pushq   $0


[Bug go/60874] FAIL: go.test/test/recover.go execution

2014-08-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874

--- Comment #8 from Uroš Bizjak ubizjak at gmail dot com ---
After lots of debugging...

The problem is with the label that is passed as an argument to
__go_set_defer_retaddr. In function main.$thunk0, in _.179r.cse1 dump, we have:

...

(insn 7 3 8 2 (set (reg:DI 84)
(high:DI (label_ref:DI 47))) rr.go:57 236 {*movdi}
 (insn_list:REG_LABEL_OPERAND 47 (nil)))
(insn 8 7 9 2 (set (reg:DI 83)
(lo_sum:DI (reg:DI 84)
(label_ref:DI 47))) rr.go:57 230 {*movdi_er_low_l}
 (insn_list:REG_LABEL_OPERAND 47 (expr_list:REG_EQUAL (label_ref:DI 47)
(nil
(insn 9 8 10 2 (set (reg:DI 16 $16)
(reg:DI 83)) rr.go:57 236 {*movdi}
 (nil))
(call_insn 10 9 11 2 (parallel [
(set (reg:DI 0 $0)
(call (mem:DI (symbol_ref:DI (__go_set_defer_retaddr) [flags
0x41]  function_decl 0x266a900 __go_set_defer_retaddr) [0
__go_set_defer_retaddr S8 A64])
(const_int 0 [0])))
(use (reg:DI 29 $29))
(clobber (reg:DI 26 $26))
]) rr.go:57 357 {*call_value_osf_1_er}
 (expr_list:REG_CALL_DECL (symbol_ref:DI (__go_set_defer_retaddr) [flags
0x41]  function_decl 0x266a900 __go_set_defer_retaddr)
(nil))
(expr_list:DI (use (reg:DI 16 $16))
(nil)))

...

(call_insn 46 45 47 5 (parallel [
(call (mem:DI (reg/f:DI 80 [ D.1014 ]) [0 *_42 S8 A64])
(const_int 4048 [0xfd0]))
(use (reg:DI 29 $29))
(clobber (reg:DI 26 $26))
]) rr.go:57 210 {*call_osf_1_er}
 (expr_list:REG_DEAD (reg/f:DI 80 [ D.1014 ])
(expr_list:REG_DEAD (reg:DI 21 $21)
(expr_list:REG_DEAD (reg:DI 20 $20)
(expr_list:REG_DEAD (reg:DI 19 $19)
(expr_list:REG_DEAD (reg:DI 18 $18)
(expr_list:REG_DEAD (reg:DI 17 $17)
(expr_list:REG_DEAD (reg:DI 16 $16)
(expr_list:REG_CALL_DECL (nil)
(nil)
(expr_list (use (reg:DI 21 $21))
(expr_list (use (reg:DI 20 $20))
(expr_list (use (reg:DI 19 $19))
(expr_list (use (reg:DI 18 $18))
(expr_list (use (reg:DI 17 $17))
(expr_list (use (reg:DI 16 $16))
(expr_list:BLK (use (mem:BLK (reg/f:DI 30 $30) [0 
S4048 A64]))
(nil)
;;  succ:   6 [100.0%]  (FALLTHRU)
;; lr  out   15 [$15] 26 [$26] 29 [$29] 30 [$30] 31 [AP] 63 [FP]
;; live  out 15 [$15] 29 [$29] 30 [$30] 31 [AP] 63 [FP]

;; basic block 6, loop depth 0, count 0, freq 1, maybe hot
;;  prev block 5, next block 7, flags: (REACHABLE, RTL, MODIFIED)
;;  pred:   2 [39.0%]
;;  5 [100.0%]  (FALLTHRU)
;; bb 6 artificial_defs: { }
;; bb 6 artificial_uses: { u-1(15){ }u-1(29){ }u-1(30){ }u-1(31){ }u-1(63){ }}
;; lr  in15 [$15] 26 [$26] 29 [$29] 30 [$30] 31 [AP] 63 [FP]
;; lr  use   15 [$15] 29 [$29] 30 [$30] 31 [AP] 63 [FP]
;; lr  def   81
;; live  in  15 [$15] 29 [$29] 30 [$30] 31 [AP] 63 [FP]
;; live  gen 81
;; live  kill
(code_label/s 47 46 48 6 2 (retaddr) [5 uses])
(note 48 47 49 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
(insn 49 48 52 6 (set (reg:DI 81 [ retval ])
(const_int 0 [0])) rr.go:57 236 {*movdi}
 (nil))

 succ:   8 [100.0%]  (FALLTHRU)

Unfortunatelly, this is not a robust approach, since in a follow-up
_.180r.fwprop1 pass (insn 49) propagates to function return value, leaving:

(code_label/s 47 46 48 6 2 (retaddr) [5 uses])
(note 48 47 52 6 [bb 6] NOTE_INSN_BASIC_BLOCK)
;;  succ:   8 [100.0%]  (FALLTHRU)

The following 181r.cprop pass removes the label (also updates passed argument
to __go_set_defer_retaddr in (insn 7) and (insn 8)) and merges bb after a thunk
call:

(insn 7 3 8 2 (set (reg/f:DI 84)
(high:DI (label_ref:DI [47 deleted]))) rr.go:57 236 {*movdi}
 (insn_list:REG_LABEL_OPERAND 47 (nil)))
(insn 8 7 9 2 (set (reg/f:DI 83)
(lo_sum:DI (reg/f:DI 84)
(label_ref:DI [47 deleted]))) rr.go:57 230 {*movdi_er_low_l}
 (expr_list:REG_DEAD (reg/f:DI 84)
(insn_list:REG_LABEL_OPERAND 47 (expr_list:REG_EQUAL (label_ref:DI [47
deleted])
(nil)

...

(call_insn 46 45 47 5 (parallel [
(call (mem:DI (reg/f:DI 80 [ D.1014 ]) [0 *_42 S8 A64])
(const_int 4048 [0xfd0]))
(use (reg:DI 29 $29))
(clobber (reg:DI 26 $26))
]) rr.go:57 210 {*call_osf_1_er}
 (expr_list:REG_DEAD (reg/f:DI 80 [ D.1014 ])
(expr_list:REG_DEAD (reg:DI 21 $21)
(expr_list:REG_DEAD (reg:DI 20 $20)
(expr_list:REG_DEAD (reg:DI 19 $19)
(expr_list:REG_DEAD (reg:DI 18 $18)
(expr_list:REG_DEAD (reg:DI 17 $17)
(expr_list:REG_DEAD (reg:DI 16 $16)
 

[Bug tree-optimization/62035] [4.9 Regresion] wrong code building libapache-mod-perl with -O1, works with -O1 -fno-tree-dse

2014-08-06 Thread doko at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62035

--- Comment #1 from Matthias Klose doko at gcc dot gnu.org ---
seen with r213518 on the trunk as well


[Bug go/60874] FAIL: go.test/test/recover.go execution

2014-08-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874

--- Comment #9 from Uroš Bizjak ubizjak at gmail dot com ---
To illustrate unreliable approach, please compile following test:

--cut here--
extern void foo (void *);

int test(void)
{
  __label__ bla;

  foo (bla);
 bla:
  return 0;
}
--cut here--

gcc -O2:

test:
.L2:
pushl   %ebp
movl%esp, %ebp
subl$8, %esp
movl$.L2, (%esp)
callfoo
xorl%eax, %eax
leave
ret

The passed argument doesn't represent return address.

[Bug target/61749] arm_neon.h _lane and _n intrinsics can cause ICEs

2014-08-06 Thread ktkachov at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61749

--- Comment #3 from ktkachov at gcc dot gnu.org ---
vqdmlal_lane_s16 expects an immediate/literal lane number as the fourth
argument and the builtin expansion code in aarch64-builtins.c is actually
equipped to error out when given a variable (in the SIMD_ARG_CONSTANT case of
aarch64_simd_expand_args).

However the type qualifiers for vqdmlal_lane_s16 are the QUADOP qualifiers
which don't enforce qualifier_immediate on the builtin, thus falling into the
SIMD_ARG_COPY_TO_REG and later on failing the CONST_INT_P assert when
processing the lane numbers.

If I give qualifier_immediate to the 4th argument I get a more helpful:
error: incompatible type for argument 4, expected 'const int'
message but the compiler still tries to proceed and ends up ICEing anyway.


[Bug go/60874] FAIL: go.test/test/recover.go execution

2014-08-06 Thread sch...@linux-m68k.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874

--- Comment #10 from Andreas Schwab sch...@linux-m68k.org ---
If you never use goto *exp in the same function the value of label is
undefined.


[Bug go/60874] FAIL: go.test/test/recover.go execution

2014-08-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874

--- Comment #11 from Uroš Bizjak ubizjak at gmail dot com ---
(In reply to Andreas Schwab from comment #10)
 If you never use goto *exp in the same function the value of label is
 undefined.

I did try adding goto bla: just before label, but never managed to get
something around return address. Care to post and example, please?

[Bug tree-optimization/62035] [4.9/4.10 Regresion] wrong code building libapache-mod-perl with -O1, works with -O1 -fno-tree-dse

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62035

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

   Target Milestone|--- |4.9.2


[Bug lto/62034] ICE for big statically initialized arrays compiled with LTO

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62034

--- Comment #4 from Richard Biener rguenth at gcc dot gnu.org ---
Author: rguenth
Date: Wed Aug  6 13:53:09 2014
New Revision: 213664

URL: https://gcc.gnu.org/viewcvs?rev=213664root=gccview=rev
Log:
2014-08-06  Richard Biener  rguent...@suse.de

PR lto/62034
* lto-streamer-in.c (lto_input_tree_1): Assert we do not read
SCCs here.
(lto_input_tree): Pop SCCs here.

Modified:
trunk/gcc/ChangeLog
trunk/gcc/lto-streamer-in.c


[Bug lto/62034] ICE for big statically initialized arrays compiled with LTO

2014-08-06 Thread rguenth at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62034

Richard Biener rguenth at gcc dot gnu.org changed:

   What|Removed |Added

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

--- Comment #5 from Richard Biener rguenth at gcc dot gnu.org ---
Fixed.


[Bug go/60874] FAIL: go.test/test/recover.go execution

2014-08-06 Thread ian at airs dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874

--- Comment #12 from Ian Lance Taylor ian at airs dot com ---
Thanks for the analysis.  See also PR 60406.

Dominik sent me a patch for 60406 but 1) he has no copyright assignment; 2) I
think that his patch does not work for SJLJ exceptions.


[Bug ipa/61393] [trans-mem] O3 optimization level constant propagation problem

2014-08-06 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61393

--- Comment #7 from Martin Jambor jamborm at gcc dot gnu.org ---
Author: jamborm
Date: Wed Aug  6 13:59:18 2014
New Revision: 213666

URL: https://gcc.gnu.org/viewcvs?rev=213666root=gccview=rev
Log:
2014-08-06  Martin Jambor  mjam...@suse.cz

PR ipa/61393
* cgraphclones.c (cgraph_node::create_clone): Also copy tm_clone.


Modified:
trunk/gcc/ChangeLog
trunk/gcc/cgraphclones.c


[Bug ipa/61393] [trans-mem] O3 optimization level constant propagation problem

2014-08-06 Thread jamborm at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61393

Martin Jambor jamborm at gcc dot gnu.org changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution|--- |FIXED

--- Comment #8 from Martin Jambor jamborm at gcc dot gnu.org ---
Hopefully fixed even on trunk.


[Bug c++/62036] New: Braced-init-list issuing -Wsequence-point warning

2014-08-06 Thread dacamara.cameron at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62036

Bug ID: 62036
   Summary: Braced-init-list issuing -Wsequence-point warning
   Product: gcc
   Version: 4.8.2
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: dacamara.cameron at gmail dot com

#include algorithm
#include iostream
#include iterator
#include thread

int main() {
int arr[10];
std::iota(std::begin(arr), std::end(arr), 1);
using itr_t = decltype(std::begin(arr));

// the function that will display each element
auto f = [] (itr_t first, itr_t last) {while (first != last)
std::cout*(first++)' ';};

// we have 3 threads so we need to figure out the ranges for each thread to
show
int increment = std::distance(std::begin(arr), std::end(arr)) / 3;
auto first= std::begin(arr);
auto to   = first + increment;
auto last = std::end(arr);
std::thread threads[3] = {
std::thread{f, first, to},
std::thread{f, (first = to), (to += increment)},
std::thread{f, (first = to), last} // go to last here to account for
odd array sizes
};
for (auto t : threads) t.join();
}


I'm getting the sequence point warning with this piece of code and when I
execute it the thread at threads[1] prints nothing whatsoever. This should be
well defined according to the standard (I'm using sec. 8.5.4.4 as reference).
The fact that gcc even issues the -Wsequence-point warning is indicative that
the standard isn't being followed.


[Bug go/60874] FAIL: go.test/test/recover.go execution

2014-08-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874

Uroš Bizjak ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED
   Target Milestone|--- |4.10.0

--- Comment #13 from Uroš Bizjak ubizjak at gmail dot com ---
(In reply to Ian Lance Taylor from comment #12)
 Thanks for the analysis.  See also PR 60406.
 
 Dominik sent me a patch for 60406 but 1) he has no copyright assignment; 2)
 I think that his patch does not work for SJLJ exceptions.

Actually, this remaining problem is the same as PR60406.

The original problem is fixed.

[Bug go/60406] reflect.go:test13reflect2 test failure

2014-08-06 Thread ubizjak at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60406

Uroš Bizjak ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Last reconfirmed||2014-08-06
 CC||ubizjak at gmail dot com
 Ever confirmed|0   |1

--- Comment #1 from Uroš Bizjak ubizjak at gmail dot com ---
This problem also happens on alpha, please see analysis at [1].

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60874#c8

[Bug c/62037] New: cannot pass 'int **' as a 'int const* const*' parameter

2014-08-06 Thread mrolnik at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62037

Bug ID: 62037
   Summary: cannot pass 'int **' as a 'int const* const*'
parameter
   Product: gcc
   Version: 4.8.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: mrolnik at gmail dot com

Created attachment 33261
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33261action=edit
.i file

when I pass 'int **' object as a function parameter declares as 'int const*
const*' I get a warning (see below)


Using built-in specs.
COLLECT_GCC=c:\MinGW\bin\gcc.exe
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.8.1/configure --prefix=/mingw --host=mingw32
--build=mingw32 --without-pic --enable-shared --enable-static --with-gnu-ld
--enable-lto --enable-libssp --disable-multilib
--enable-languages=c,c++,fortran,objc,obj-c++,ada --disable-sjlj-exceptions
--with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug
--enable-version-specific-runtime-libs
--with-gmp=/usr/src/pkg/gmp-5.1.2-1-mingw32-src/bld
--with-mpc=/usr/src/pkg/mpc-1.0.1-1-mingw32-src/bld --with-mpfr=
--with-system-zlib --with-gnu-as --enable-decimal-float=yes --enable-libgomp
--enable-threads --with-libiconv-prefix=/mingw32 --with-libintl-prefix=/mingw
--disable-bootstrap LDFLAGS=-s CFLAGS=-D_USE_32BIT_TIME_T
Thread model: win32
gcc version 4.8.1 (GCC) 
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro'
 c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/cc1.exe -E -quiet -v -iprefix
c:\mingw\bin\../lib/gcc/mingw32/4.8.1/ test.c -mtune=generic -march=pentiumpro
-fpch-preprocess -o test.i
ignoring duplicate directory
c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/include
ignoring duplicate directory
c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/../../../../include
ignoring duplicate directory /mingw/include
ignoring duplicate directory
c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/include-fixed
ignoring duplicate directory
c:/mingw/lib/gcc/../../lib/gcc/mingw32/4.8.1/../../../../mingw32/include
ignoring duplicate directory /mingw/include
#include ... search starts here:
#include ... search starts here:
 c:\mingw\bin\../lib/gcc/mingw32/4.8.1/include
 c:\mingw\bin\../lib/gcc/mingw32/4.8.1/../../../../include
 c:\mingw\bin\../lib/gcc/mingw32/4.8.1/include-fixed
 c:\mingw\bin\../lib/gcc/mingw32/4.8.1/../../../../mingw32/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro'
 c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/cc1.exe -fpreprocessed test.i -quiet
-dumpbase test.c -mtune=generic -march=pentiumpro -auxbase test -version -o
test.s
GNU C (GCC) version 4.8.1 (mingw32)
compiled by GNU C version 4.8.1, GMP version 5.1.2, MPFR version 3.1.2, MPC
version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C (GCC) version 4.8.1 (mingw32)
compiled by GNU C version 4.8.1, GMP version 5.1.2, MPFR version 3.1.2, MPC
version 1.0.1
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 767202a405449496e68a54c4eee91a28
test.c: In function 'main':
test.c:13:2: warning: passing argument 1 of 'foo' from incompatible pointer
type [enabled by default]
  foo(pA);
  ^
test.c:3:6: note: expected 'const int * const*' but argument is of type 'int
**'
 void foo(const int * const* a)
  ^
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro'
 c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/as.exe -v -o
test.o test.s
GNU assembler version 2.23.2 (mingw32) using BFD version (GNU Binutils) 2.23.2
COMPILER_PATH=c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/;c:/mingw/bin/../libexec/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/
LIBRARY_PATH=c:/mingw/bin/../lib/gcc/mingw32/4.8.1/;c:/mingw/bin/../lib/gcc/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/;c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-mtune=generic' '-march=pentiumpro'
 c:/mingw/bin/../libexec/gcc/mingw32/4.8.1/collect2.exe -Bdynamic
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/crt2.o
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/crtbegin.o
-Lc:/mingw/bin/../lib/gcc/mingw32/4.8.1 -Lc:/mingw/bin/../lib/gcc
-Lc:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib
-Lc:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../.. test.o -lmingw32 -lgcc
-lgcc_eh -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32
-lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/crtend.o


[Bug c/62037] cannot pass 'int **' as a 'int const* const*' parameter

2014-08-06 Thread mrolnik at gmail dot com
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62037

--- Comment #1 from Michael Rolnik mrolnik at gmail dot com ---
Created attachment 33262
  -- https://gcc.gnu.org/bugzilla/attachment.cgi?id=33262action=edit
compiler output


[Bug rtl-optimization/61608] [4.10 regression] FAIL: gcc.target/arm/epilog-1.c scan-assembler tests

2014-08-06 Thread jgreenhalgh at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61608

jgreenhalgh at gcc dot gnu.org changed:

   What|Removed |Added

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

--- Comment #6 from jgreenhalgh at gcc dot gnu.org ---
This looks resolved to me.


  1   2   3   4   5   >