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  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  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  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  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  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  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  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 k&r 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  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
 wrote:
> On Wed, Aug 6, 2014 at 12:08 PM, Jonathan Wakely  
> 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  
> 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  wrote:
> On 6 August 2014 11:20, Richard Biener wrote:
>> On Wed, Aug 6, 2014 at 12:08 PM, Jonathan Wakely  
>> 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  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  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  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 
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 
#include 

#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
   NEXT_PASS (pass_tree_if

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
 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  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  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  wrote:

> Hi,
> 
> On 08/06/2014 08:48 PM, paul_kon...@dell.com wrote:
>> On Aug 6, 2014, at 2:38 PM, David Gero  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  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,   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  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