[PATCH] Use __attribute_optimization_barrier__ for the remaining noclone users

Matt Turner <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
Commit a2b0ff98a0 added __attribute_optimization_barrier__ and converted the
users of __attribute__ ((noinline, noclone)) to it, so that Clang, which does
not implement noclone, gets optnone instead of an unknown-attribute warning
that is an error under -Werror.

Twelve users were missed, all of them in code that a plain x86_64 build never
preprocesses, which is why they survived the sweep:

  - libio/tst-stderr-compat.c is inside
    #if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_1), so it is compiled only on
    ports that still have GLIBC_2.0 compat symbols -- i686 and alpha among
    them, but not x86_64.  Building it with Clang fails.

  - The eleven sysdeps/x86_64/x32/tst-size_t-*.c tests are built only for the
    x32 ABI.

No functional change for GCC, which still gets noinline and noclone.

Checked that both shapes -- the weak function in libio and the static function
in the x32 tests -- compile with GCC and with Clang after the change, and that
the pre-change shape is an error under Clang with -Werror.
---
 libio/tst-stderr-compat.c                   | 2 +-
 sysdeps/x86_64/x32/tst-size_t-memchr.c      | 2 +-
 sysdeps/x86_64/x32/tst-size_t-memcmp-2.c    | 2 +-
 sysdeps/x86_64/x32/tst-size_t-memcmp.c      | 2 +-
 sysdeps/x86_64/x32/tst-size_t-memcpy.c      | 2 +-
 sysdeps/x86_64/x32/tst-size_t-memrchr.c     | 2 +-
 sysdeps/x86_64/x32/tst-size_t-memset.c      | 2 +-
 sysdeps/x86_64/x32/tst-size_t-strncasecmp.c | 2 +-
 sysdeps/x86_64/x32/tst-size_t-strncat.c     | 2 +-
 sysdeps/x86_64/x32/tst-size_t-strncmp.c     | 2 +-
 sysdeps/x86_64/x32/tst-size_t-strncpy.c     | 2 +-
 sysdeps/x86_64/x32/tst-size_t-strnlen.c     | 2 +-
 12 files changed, 12 insertions(+), 12 deletions(-)

diff --git ./libio/tst-stderr-compat.c ./libio/tst-stderr-compat.c
index 924b046dfa..9e0a2cd739 100644
--- ./libio/tst-stderr-compat.c
+++ ./libio/tst-stderr-compat.c
@@ -28,7 +28,7 @@ extern FILE _IO_stderr_;
 compat_symbol_reference (libc, _IO_stderr_, _IO_stderr_, GLIBC_2_0);
 compat_symbol_reference (libc, fclose, fclose, GLIBC_2_0);
 
-__attribute__ ((weak, noclone, noinline))
+__attribute__ ((weak)) __attribute_optimization_barrier__
 void
 do_fclose (FILE *fp)
 {
diff --git ./sysdeps/x86_64/x32/tst-size_t-memchr.c ./sysdeps/x86_64/x32/tst-size_t-memchr.c
index faf5d68584..b1bbf7ef14 100644
--- ./sysdeps/x86_64/x32/tst-size_t-memchr.c
+++ ./sysdeps/x86_64/x32/tst-size_t-memchr.c
@@ -39,7 +39,7 @@ IMPL (MEMCHR, 1)
 typedef CHAR * (*proto_t) (const CHAR*, int, size_t);
 
 static CHAR *
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_memchr (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, (uintptr_t) b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-memcmp-2.c ./sysdeps/x86_64/x32/tst-size_t-memcmp-2.c
index 5e84ee6702..0e28f93c43 100644
--- ./sysdeps/x86_64/x32/tst-size_t-memcmp-2.c
+++ ./sysdeps/x86_64/x32/tst-size_t-memcmp-2.c
@@ -41,7 +41,7 @@ IMPL (MEMCMP, 1)
 typedef int (*proto_t) (const CHAR *, const CHAR *, size_t);
 
 static int
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_memcmp (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-memcmp.c ./sysdeps/x86_64/x32/tst-size_t-memcmp.c
index 75d631bd77..6b487ddf6c 100644
--- ./sysdeps/x86_64/x32/tst-size_t-memcmp.c
+++ ./sysdeps/x86_64/x32/tst-size_t-memcmp.c
@@ -41,7 +41,7 @@ IMPL (MEMCMP, 1)
 typedef int (*proto_t) (const CHAR *, const CHAR *, size_t);
 
 static int
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_memcmp (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-memcpy.c ./sysdeps/x86_64/x32/tst-size_t-memcpy.c
index 34e7da413e..5847a62fa4 100644
--- ./sysdeps/x86_64/x32/tst-size_t-memcpy.c
+++ ./sysdeps/x86_64/x32/tst-size_t-memcpy.c
@@ -24,7 +24,7 @@ IMPL (memcpy, 1)
 typedef void *(*proto_t) (void *, const void *, size_t);
 
 static void *
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_memcpy (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-memrchr.c ./sysdeps/x86_64/x32/tst-size_t-memrchr.c
index ad881b3cff..a215f3389f 100644
--- ./sysdeps/x86_64/x32/tst-size_t-memrchr.c
+++ ./sysdeps/x86_64/x32/tst-size_t-memrchr.c
@@ -24,7 +24,7 @@ IMPL (memchr, 1)
 typedef void * (*proto_t) (const void *, int, size_t);
 
 static void *
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_memrchr (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, (uintptr_t) b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-memset.c ./sysdeps/x86_64/x32/tst-size_t-memset.c
index 70eaa473af..61bbc2e2d0 100644
--- ./sysdeps/x86_64/x32/tst-size_t-memset.c
+++ ./sysdeps/x86_64/x32/tst-size_t-memset.c
@@ -38,7 +38,7 @@ IMPL (MEMSET, 1)
 typedef CHAR *(*proto_t) (CHAR *, int, size_t);
 
 static void *
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_memset (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, (uintptr_t) b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-strncasecmp.c ./sysdeps/x86_64/x32/tst-size_t-strncasecmp.c
index fb99db93a2..d0ad1eb863 100644
--- ./sysdeps/x86_64/x32/tst-size_t-strncasecmp.c
+++ ./sysdeps/x86_64/x32/tst-size_t-strncasecmp.c
@@ -24,7 +24,7 @@ IMPL (strncasecmp, 1)
 typedef int (*proto_t) (const char *, const char *, size_t);
 
 static int
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_strncasecmp (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-strncat.c ./sysdeps/x86_64/x32/tst-size_t-strncat.c
index 2376ff59f2..08c86cc248 100644
--- ./sysdeps/x86_64/x32/tst-size_t-strncat.c
+++ ./sysdeps/x86_64/x32/tst-size_t-strncat.c
@@ -24,7 +24,7 @@ IMPL (strncat, 1)
 typedef char *(*proto_t) (char *, const char*, size_t);
 
 static void *
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_strncat (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-strncmp.c ./sysdeps/x86_64/x32/tst-size_t-strncmp.c
index 4d14de54e9..ff12d5e81b 100644
--- ./sysdeps/x86_64/x32/tst-size_t-strncmp.c
+++ ./sysdeps/x86_64/x32/tst-size_t-strncmp.c
@@ -42,7 +42,7 @@ typedef int (*proto_t) (const CHAR *, const CHAR *, size_t);
 
 
 static int
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_strncmp (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-strncpy.c ./sysdeps/x86_64/x32/tst-size_t-strncpy.c
index aef196eac1..7fb19d59ab 100644
--- ./sysdeps/x86_64/x32/tst-size_t-strncpy.c
+++ ./sysdeps/x86_64/x32/tst-size_t-strncpy.c
@@ -24,7 +24,7 @@ IMPL (strncpy, 1)
 typedef char *(*proto_t) (char *, const char*, size_t);
 
 static void *
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_strncpy (parameter_t a, parameter_t b)
 {
   return CALL (&b, a.p, b.p, a.len);
diff --git ./sysdeps/x86_64/x32/tst-size_t-strnlen.c ./sysdeps/x86_64/x32/tst-size_t-strnlen.c
index d7299a9b35..b289a47b50 100644
--- ./sysdeps/x86_64/x32/tst-size_t-strnlen.c
+++ ./sysdeps/x86_64/x32/tst-size_t-strnlen.c
@@ -38,7 +38,7 @@ IMPL (STRNLEN, 1)
 typedef size_t (*proto_t) (const CHAR *, size_t);
 
 static size_t
-__attribute__ ((noinline, noclone))
+__attribute_optimization_barrier__
 do_strnlen (parameter_t a, parameter_t b)
 {
   return CALL (&a, a.p, b.len);
-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.