]> git.ipfire.org Git - thirdparty/glibc.git/commit
Add support for GCC 9 attribute copy.
authorMartin Sebor <msebor@redhat.com>
Sat, 10 Nov 2018 00:24:12 +0000 (17:24 -0700)
committerMartin Sebor <msebor@redhat.com>
Sat, 10 Nov 2018 00:24:12 +0000 (17:24 -0700)
commit1626a1cfcd6ba1cc64721be1036c2873211d499b
tree754c0529edbbb3fba970cfb3bfe49ad107efcd70
parent968ed5301d0921e6ea33dafd60e4a4208be6a6f4
Add support for GCC 9 attribute copy.

GCC 9 has gained an enhancement to help detect attribute mismatches
between alias declarations and their targets.  It consists of a new
warning, -Wattribute-alias, an enhancement to an existing warning,
-Wmissing-attributes, and a new attribute called copy.

The purpose of the warnings is to help identify either possible bugs
(an alias declared with more restrictive attributes than its target
promises) or optimization or diagnostic opportunities (an alias target
missing some attributes that it could be declared with that might
benefit analysis and code generation).  The purpose of the new
attribute is to easily apply (almost) the same set of attributes
to one declaration as those already present on another.

As expected (and intended) the enhancement triggers warnings for
many alias declarations in Glibc code.  This change, tested on
x86_64-linux, avoids all instances of the new warnings by making
use of the attribute where appropriate.  To fully benefit from
the enhancement Glibc will need to be compiled with
 -Wattribute-alias=2 and remaining warnings reviewed and dealt with
(there are a couple of thousand but most should be straightforward
to deal with).

ChangeLog:

* include/libc-symbols.h (__attribute_copy__): Define macro unless
it's already defined.
(_strong_alias): Use __attribute_copy__.
(_weak_alias,  __hidden_ver1,  __hidden_nolink2): Same.
* misc/sys/cdefs.h (__attribute_copy__): New macro.
* sysdeps/x86_64/multiarch/memchr.c (memchr): Use __attribute_copy__.
* sysdeps/x86_64/multiarch/memcmp.c (memcmp): Same.
* sysdeps/x86_64/multiarch/mempcpy.c (mempcpy): Same.
* sysdeps/x86_64/multiarch/memset.c (memset): Same.
* sysdeps/x86_64/multiarch/stpcpy.c (stpcpy): Same.
* sysdeps/x86_64/multiarch/strcat.c (strcat): Same.
* sysdeps/x86_64/multiarch/strchr.c (strchr): Same.
* sysdeps/x86_64/multiarch/strcmp.c (strcmp): Same.
* sysdeps/x86_64/multiarch/strcpy.c (strcpy): Same.
* sysdeps/x86_64/multiarch/strcspn.c (strcspn): Same.
* sysdeps/x86_64/multiarch/strlen.c (strlen): Same.
* sysdeps/x86_64/multiarch/strncmp.c (strncmp): Same.
* sysdeps/x86_64/multiarch/strncpy.c (strncpy): Same.
* sysdeps/x86_64/multiarch/strnlen.c (strnlen): Same.
* sysdeps/x86_64/multiarch/strpbrk.c (strpbrk): Same.
* sysdeps/x86_64/multiarch/strrchr.c (strrchr): Same.
* sysdeps/x86_64/multiarch/strspn.c (strspn): Same.
21 files changed:
ChangeLog
include/libc-symbols.h
misc/sys/cdefs.h
sysdeps/x86_64/multiarch/memchr.c
sysdeps/x86_64/multiarch/memcmp.c
sysdeps/x86_64/multiarch/mempcpy.c
sysdeps/x86_64/multiarch/memset.c
sysdeps/x86_64/multiarch/stpcpy.c
sysdeps/x86_64/multiarch/strcat.c
sysdeps/x86_64/multiarch/strchr.c
sysdeps/x86_64/multiarch/strcmp.c
sysdeps/x86_64/multiarch/strcpy.c
sysdeps/x86_64/multiarch/strcspn.c
sysdeps/x86_64/multiarch/strlen.c
sysdeps/x86_64/multiarch/strncat.c
sysdeps/x86_64/multiarch/strncmp.c
sysdeps/x86_64/multiarch/strncpy.c
sysdeps/x86_64/multiarch/strnlen.c
sysdeps/x86_64/multiarch/strpbrk.c
sysdeps/x86_64/multiarch/strrchr.c
sysdeps/x86_64/multiarch/strspn.c