diff --git a/gcc/builtins.c b/gcc/builtins.c index 14cfa57ad68571c2b2494e1420850dfdb1cd3ecd..0db4090c434eeeb371d980d15d8eda72a8aa4a8b 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; } diff --git a/gcc/symtab.c b/gcc/symtab.c index 2135b34ce275c8b80504da6d6cd4cfc11523802c..8c4cb70b015469633971f25d8cf5d81711eee264 100644 --- a/gcc/symtab.c +++ b/gcc/symtab.c @@ -2526,10 +2526,7 @@ symtab_node::output_to_lto_symbol_table_p (void) in libraries so make sure to output references into the symbol table to make those libraries referenced. Note this is incomplete handling for now and only covers math functions. */ - if (builtin_with_linkage_p (decl)) - return true; - else - return false; + return builtin_with_linkage_p (decl); } /* We have real symbol that should be in symbol table. However try to trim diff --git a/libiberty/configure b/libiberty/configure index fc0c953dd1acecb988046bdd39daff9780e09200..57498d8575505ed5308e74f8bc6686d55cedfb14 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; } diff --git a/libiberty/configure.ac b/libiberty/configure.ac index ad952963971a31968b5d109661b9cab0aa4b95fc..3c03f24d3680a1bd6088271b62d6367f72e9516c 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -665,7 +665,7 @@ if test -z "${setobjs}"; then 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;]])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern int $v [];]],[[if ($v [0]) return 1;]])], [eval "libiberty_cv_var_$v=yes"], [eval "libiberty_cv_var_$v=no"])]) if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then