[2/2] use the correct attributes for ___errno_location

Submitted by Samuel Holland on June 29, 2019, 9:22 p.m.

Details

Message ID 20190629212244.42963-3-samuel@sholland.org
State New
Series "Resolve compiler warnings in master"
Headers show

Commit Message

Samuel Holland June 29, 2019, 9:22 p.m.
In the public header, __errno_location is declared with the "const"
attribute, conditional on __GNUC__. Ensure that its internal alias has
the same attributes.
---
 src/errno/__errno_location.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/src/errno/__errno_location.c b/src/errno/__errno_location.c
index 7f9d6027..b59919c3 100644
--- a/src/errno/__errno_location.c
+++ b/src/errno/__errno_location.c
@@ -6,4 +6,8 @@  int *__errno_location(void)
 	return &__pthread_self()->errno_val;
 }
 
-weak_alias(__errno_location, ___errno_location);
+weak_alias(__errno_location, ___errno_location)
+#ifdef __GNUC__
+__attribute__((const))
+#endif
+;

Comments

Rich Felker June 29, 2019, 9:49 p.m.
On Sat, Jun 29, 2019 at 04:22:44PM -0500, Samuel Holland wrote:
> In the public header, __errno_location is declared with the "const"
> attribute, conditional on __GNUC__. Ensure that its internal alias has
> the same attributes.
> ---
>  src/errno/__errno_location.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/src/errno/__errno_location.c b/src/errno/__errno_location.c
> index 7f9d6027..b59919c3 100644
> --- a/src/errno/__errno_location.c
> +++ b/src/errno/__errno_location.c
> @@ -6,4 +6,8 @@ int *__errno_location(void)
>  	return &__pthread_self()->errno_val;
>  }
>  
> -weak_alias(__errno_location, ___errno_location);
> +weak_alias(__errno_location, ___errno_location)
> +#ifdef __GNUC__
> +__attribute__((const))
> +#endif
> +;
> -- 
> 2.21.0

Thanks for catching this. It's probably a significant regression in
codegen. I think the attribute should be on the declaration in
src/include/errno.h though, not on the weak_alias definition. Most
importantly this is needed for it to affect codegen in the callers.
But it's also for consistency with the approach of having attributes
on the declarations rather than the definitions (to ensure everyone
gets a consistent view of them), and to avoid assumptions about what
the weak_alias macro expands to.

Rich