diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2021-05-04 12:40:42 +0200 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2021-05-04 12:53:21 +0200 |
commit | f418bc3cd173bc4e679469928d4d96ffcc05fc7e (patch) | |
tree | 9883221a26c13694cf41f221dddf3f4ac2fc9acc /gcc/builtins.c | |
parent | 1b0f570009825ce53a3967ea9a92b1961b7c122b (diff) | |
download | gcc-f418bc3cd173bc4e679469928d4d96ffcc05fc7e.zip gcc-f418bc3cd173bc4e679469928d4d96ffcc05fc7e.tar.gz gcc-f418bc3cd173bc4e679469928d4d96ffcc05fc7e.tar.bz2 |
Fix libiberty link failures in LTO mode for MinGW
The test for the presence of variables (really symbols) does not work
when you add -Ox -flto to CFLAGS:
for v in $vars; do
AC_MSG_CHECKING([for $v])
AC_CACHE_VAL(libiberty_cv_var_$v,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[int *p;]],[[extern int $v [];
p = $v;]])],
[eval "libiberty_cv_var_$v=yes"],
[eval "libiberty_cv_var_$v=no"])])
if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
AC_MSG_RESULT(yes)
AC_DEFINE_UNQUOTED($n)
else
AC_MSG_RESULT(no)
fi
done
because the assignment to 'p' is optimized away by LTO. This is visible
on MinGW platforms in the form of a link failure for sys_siglist.
There is another link failures for stpcpy: the symbol is both referenced
by libiberty's pex-win32.c and provided by libiberty's stpcpy.c, so it
needs to have a linkage to be resolved in LTO mode.
libiberty/
* configure.ac: Make test for variables more robust.
* configure: Regenerate.
gcc/
* builtins.c (builtin_with_linkage_p): Return true for stp[n]cpy.
* symtab.c (symtab_node::output_to_lto_symbol_table_p): Tidy up.
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 14cfa57..0db4090 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -14480,8 +14480,8 @@ target_char_cst_p (tree t, char *p) } /* Return true if the builtin DECL is implemented in a standard library. - Otherwise returns false which doesn't guarantee it is not (thus the list of - handled builtins below may be incomplete). */ + Otherwise return false which doesn't guarantee it is not (thus the list + of handled builtins below may be incomplete). */ bool builtin_with_linkage_p (tree decl) @@ -14560,6 +14560,14 @@ builtin_with_linkage_p (tree decl) CASE_FLT_FN (BUILT_IN_TRUNC): CASE_FLT_FN_FLOATN_NX (BUILT_IN_TRUNC): return true; + + case BUILT_IN_STPCPY: + case BUILT_IN_STPNCPY: + /* stpcpy is both referenced in libiberty's pex-win32.c and provided + by libiberty's stpcpy.c for MinGW targets so we need to return true + in order to be able to build libiberty in LTO mode for them. */ + return true; + default: break; } |