summaryrefslogtreecommitdiff
path: root/libiberty/configure
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 /libiberty/configure
parent1b0f570009825ce53a3967ea9a92b1961b7c122b (diff)
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 'libiberty/configure')
-rwxr-xr-xlibiberty/configure4
1 files changed, 2 insertions, 2 deletions
diff --git a/libiberty/configure b/libiberty/configure
index fc0c953dd1a..57498d85755 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -7049,11 +7049,11 @@ else
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int *p;
+extern int $v [];
int
main ()
{
-extern int $v []; p = $v;
+if ($v [0]) return 1;
;
return 0;
}