diff mbox series

[committed] Fix -Wmissing-attributes warning in libstdc++ (PR libstdc++/89402)

Message ID 20190220080731.GC2135@tucnak
State New
Headers show
Series [committed] Fix -Wmissing-attributes warning in libstdc++ (PR libstdc++/89402) | expand

Commit Message

Jakub Jelinek Feb. 20, 2019, 8:07 a.m. UTC
Hi!

The following patch fixes a warning when building on targets where long
double switched from being the same as double to something wider,
like e.g. powerpc*-linux, alpha*-linux, s390*-linux etc.

Fixed thusly, bootstrapped/regtested on {x86_64,i686,s390x}-linux and
bootstrapped on powerpc64le-linux, on both s390x and powerpc64le it removed
all
../../../../libstdc++-v3/src/c++98/compatibility-ldbl.cc:77:17: warning: 'void _ZNKSt4hashIeEclEe()' specifies less restrictive attribute than its target 'std::size_t std::tr1::hash<_Tp>::operator()(_Tp) const [with _Tp = long double]': 'pure' [-Wmissing-attributes]
warnings from the build log.  Preapproved by Jonathan in the PR, committed
to trunk.

2019-02-20  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/89402
	* src/c++98/compatibility-ldbl.cc (_ZNKSt4hashIeEclEe): Add
	_GLIBCXX_PURE to the alias declaration.



	Jakub

Comments

Jonathan Wakely Feb. 22, 2019, 1:10 a.m. UTC | #1
On 20/02/19 09:07 +0100, Jakub Jelinek wrote:
>Hi!
>
>The following patch fixes a warning when building on targets where long
>double switched from being the same as double to something wider,
>like e.g. powerpc*-linux, alpha*-linux, s390*-linux etc.
>
>Fixed thusly, bootstrapped/regtested on {x86_64,i686,s390x}-linux and
>bootstrapped on powerpc64le-linux, on both s390x and powerpc64le it removed
>all
>../../../../libstdc++-v3/src/c++98/compatibility-ldbl.cc:77:17: warning: 'void _ZNKSt4hashIeEclEe()' specifies less restrictive attribute than its target 'std::size_t std::tr1::hash<_Tp>::operator()(_Tp) const [with _Tp = long double]': 'pure' [-Wmissing-attributes]
>warnings from the build log.  Preapproved by Jonathan in the PR, committed
>to trunk.

Now I see:

/home/jwakely/src/gcc/libstdc++-v3/src/c++98/compatibility-ldbl.cc:78:65: warning: ‘pure’ attribute on function returning ‘void’ [-Wattributes]
   78 |   _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
      |                                                                 ^

We can disable that with a diagnostic pragma.



>2019-02-20  Jakub Jelinek  <jakub@redhat.com>
>
>	PR libstdc++/89402
>	* src/c++98/compatibility-ldbl.cc (_ZNKSt4hashIeEclEe): Add
>	_GLIBCXX_PURE to the alias declaration.
>
>--- libstdc++-v3/src/c++98/compatibility-ldbl.cc.jj	2019-01-01 12:39:41.530606161 +0100
>+++ libstdc++-v3/src/c++98/compatibility-ldbl.cc	2019-02-19 16:12:52.402123217 +0100
>@@ -75,6 +75,6 @@ namespace std _GLIBCXX_VISIBILITY(defaul
> // and std::hash<long double>::operator()
> // are the same, no need to duplicate them.
> extern "C" void _ZNKSt4hashIeEclEe (void)
>-  __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>+  _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>
> #endif
>
>
>	Jakub
Jakub Jelinek Feb. 22, 2019, 1:23 a.m. UTC | #2
On Fri, Feb 22, 2019 at 01:10:32AM +0000, Jonathan Wakely wrote:
> On 20/02/19 09:07 +0100, Jakub Jelinek wrote:
> > Hi!
> > 
> > The following patch fixes a warning when building on targets where long
> > double switched from being the same as double to something wider,
> > like e.g. powerpc*-linux, alpha*-linux, s390*-linux etc.
> > 
> > Fixed thusly, bootstrapped/regtested on {x86_64,i686,s390x}-linux and
> > bootstrapped on powerpc64le-linux, on both s390x and powerpc64le it removed
> > all
> > ../../../../libstdc++-v3/src/c++98/compatibility-ldbl.cc:77:17: warning: 'void _ZNKSt4hashIeEclEe()' specifies less restrictive attribute than its target 'std::size_t std::tr1::hash<_Tp>::operator()(_Tp) const [with _Tp = long double]': 'pure' [-Wmissing-attributes]
> > warnings from the build log.  Preapproved by Jonathan in the PR, committed
> > to trunk.
> 
> Now I see:
> 
> /home/jwakely/src/gcc/libstdc++-v3/src/c++98/compatibility-ldbl.cc:78:65: warning: ‘pure’ attribute on function returning ‘void’ [-Wattributes]
>   78 |   _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>      |                                                                 ^
> 
> We can disable that with a diagnostic pragma.

Oops, sorry, missed that.
Or make it extern "C" size_t _ZNKSt4hashIeEclEe (long double) or so, after all,
that is what it returns and what it takes as an argument.

> > 2019-02-20  Jakub Jelinek  <jakub@redhat.com>
> > 
> > 	PR libstdc++/89402
> > 	* src/c++98/compatibility-ldbl.cc (_ZNKSt4hashIeEclEe): Add
> > 	_GLIBCXX_PURE to the alias declaration.
> > 
> > --- libstdc++-v3/src/c++98/compatibility-ldbl.cc.jj	2019-01-01 12:39:41.530606161 +0100
> > +++ libstdc++-v3/src/c++98/compatibility-ldbl.cc	2019-02-19 16:12:52.402123217 +0100
> > @@ -75,6 +75,6 @@ namespace std _GLIBCXX_VISIBILITY(defaul
> > // and std::hash<long double>::operator()
> > // are the same, no need to duplicate them.
> > extern "C" void _ZNKSt4hashIeEclEe (void)
> > -  __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
> > +  _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
> > 
> > #endif

	Jakub
Jonathan Wakely Feb. 22, 2019, 1:42 a.m. UTC | #3
On 22/02/19 02:23 +0100, Jakub Jelinek wrote:
>On Fri, Feb 22, 2019 at 01:10:32AM +0000, Jonathan Wakely wrote:
>> On 20/02/19 09:07 +0100, Jakub Jelinek wrote:
>> > Hi!
>> >
>> > The following patch fixes a warning when building on targets where long
>> > double switched from being the same as double to something wider,
>> > like e.g. powerpc*-linux, alpha*-linux, s390*-linux etc.
>> >
>> > Fixed thusly, bootstrapped/regtested on {x86_64,i686,s390x}-linux and
>> > bootstrapped on powerpc64le-linux, on both s390x and powerpc64le it removed
>> > all
>> > ../../../../libstdc++-v3/src/c++98/compatibility-ldbl.cc:77:17: warning: 'void _ZNKSt4hashIeEclEe()' specifies less restrictive attribute than its target 'std::size_t std::tr1::hash<_Tp>::operator()(_Tp) const [with _Tp = long double]': 'pure' [-Wmissing-attributes]
>> > warnings from the build log.  Preapproved by Jonathan in the PR, committed
>> > to trunk.
>>
>> Now I see:
>>
>> /home/jwakely/src/gcc/libstdc++-v3/src/c++98/compatibility-ldbl.cc:78:65: warning: ‘pure’ attribute on function returning ‘void’ [-Wattributes]
>>   78 |   _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>>      |                                                                 ^
>>
>> We can disable that with a diagnostic pragma.
>
>Oops, sorry, missed that.
>Or make it extern "C" size_t _ZNKSt4hashIeEclEe (long double) or so, after all,
>that is what it returns and what it takes as an argument.

Ah yes, even better.

>> > 2019-02-20  Jakub Jelinek  <jakub@redhat.com>
>> >
>> > 	PR libstdc++/89402
>> > 	* src/c++98/compatibility-ldbl.cc (_ZNKSt4hashIeEclEe): Add
>> > 	_GLIBCXX_PURE to the alias declaration.
>> >
>> > --- libstdc++-v3/src/c++98/compatibility-ldbl.cc.jj	2019-01-01 12:39:41.530606161 +0100
>> > +++ libstdc++-v3/src/c++98/compatibility-ldbl.cc	2019-02-19 16:12:52.402123217 +0100
>> > @@ -75,6 +75,6 @@ namespace std _GLIBCXX_VISIBILITY(defaul
>> > // and std::hash<long double>::operator()
>> > // are the same, no need to duplicate them.
>> > extern "C" void _ZNKSt4hashIeEclEe (void)
>> > -  __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>> > +  _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>> >
>> > #endif
>
>	Jakub
Martin Sebor Feb. 22, 2019, 3:35 p.m. UTC | #4
On 2/21/19 6:10 PM, Jonathan Wakely wrote:
> On 20/02/19 09:07 +0100, Jakub Jelinek wrote:
>> Hi!
>>
>> The following patch fixes a warning when building on targets where long
>> double switched from being the same as double to something wider,
>> like e.g. powerpc*-linux, alpha*-linux, s390*-linux etc.
>>
>> Fixed thusly, bootstrapped/regtested on {x86_64,i686,s390x}-linux and
>> bootstrapped on powerpc64le-linux, on both s390x and powerpc64le it 
>> removed
>> all
>> ../../../../libstdc++-v3/src/c++98/compatibility-ldbl.cc:77:17: 
>> warning: 'void _ZNKSt4hashIeEclEe()' specifies less restrictive 
>> attribute than its target 'std::size_t 
>> std::tr1::hash<_Tp>::operator()(_Tp) const [with _Tp = long double]': 
>> 'pure' [-Wmissing-attributes]
>> warnings from the build log.  Preapproved by Jonathan in the PR, 
>> committed
>> to trunk.
> 
> Now I see:
> 
> /home/jwakely/src/gcc/libstdc++-v3/src/c++98/compatibility-ldbl.cc:78:65: warning: 
> ‘pure’ attribute on function returning ‘void’ [-Wattributes]
>    78 |   _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>       |                                                                 ^

Are the attributes on this alias ever considered in calls to it?
If not (and assuming there's a way to tell, which I think there
should be but haven't verified it) the warning could be relaxed
to only trigger for those that are.  I think those would be
either aliases declared in headers, or those with the TREE_USED
bit set.

Martin

> 
> We can disable that with a diagnostic pragma.
> 
> 
> 
>> 2019-02-20  Jakub Jelinek  <jakub@redhat.com>
>>
>>     PR libstdc++/89402
>>     * src/c++98/compatibility-ldbl.cc (_ZNKSt4hashIeEclEe): Add
>>     _GLIBCXX_PURE to the alias declaration.
>>
>> --- libstdc++-v3/src/c++98/compatibility-ldbl.cc.jj    2019-01-01 
>> 12:39:41.530606161 +0100
>> +++ libstdc++-v3/src/c++98/compatibility-ldbl.cc    2019-02-19 
>> 16:12:52.402123217 +0100
>> @@ -75,6 +75,6 @@ namespace std _GLIBCXX_VISIBILITY(defaul
>> // and std::hash<long double>::operator()
>> // are the same, no need to duplicate them.
>> extern "C" void _ZNKSt4hashIeEclEe (void)
>> -  __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>> +  _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
>>
>> #endif
>>
>>
>>     Jakub
diff mbox series

Patch

--- libstdc++-v3/src/c++98/compatibility-ldbl.cc.jj	2019-01-01 12:39:41.530606161 +0100
+++ libstdc++-v3/src/c++98/compatibility-ldbl.cc	2019-02-19 16:12:52.402123217 +0100
@@ -75,6 +75,6 @@  namespace std _GLIBCXX_VISIBILITY(defaul
 // and std::hash<long double>::operator()
 // are the same, no need to duplicate them.
 extern "C" void _ZNKSt4hashIeEclEe (void)
-  __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
+  _GLIBCXX_PURE __attribute__((alias ("_ZNKSt3tr14hashIeEclEe")));
 
 #endif