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