aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2021-05-04 12:40:42 +0200
committerEric Botcazou <ebotcazou@adacore.com>2021-05-04 12:53:21 +0200
commitf418bc3cd173bc4e679469928d4d96ffcc05fc7e (patch)
tree9883221a26c13694cf41f221dddf3f4ac2fc9acc /gcc/builtins.c
parent1b0f570009825ce53a3967ea9a92b1961b7c122b (diff)
downloadgcc-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.c12
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;
}