Hi,

The current trunk have no support for the __stpncpy_chk function. As the latest
OS X (10.7 aka Lion) now defines stpncpy as a call to builtin__stpncpy_chk for
GNUC compliant compiler, the following code won't link:

#include <string.h>

int main(){
        char string[10];
        stpncpy(string,"abcd",8);

        return 0;
}

Undefined symbols for architecture x86_64:
  "___builtin___stpncpy_chk", referenced from:
      _main in ccGFZoZV.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status


This patch add support for this builtin.
Bootstrapped and tested without regression on darwin x86_64.

Romain Geissler

gcc/

2011-11-28  Romain Geissler  <romain.geiss...@gmail.com>

        * builtins.def (BUILT_IN_STPNCPY_CHK): New definition.
        * builtins.c (expand_builtin, fold_builtin_4, maybe_emit_chk_warning):
        Add BUILT_IN_STPNCPY_CHK case.
        * gimple-fold.c (gimple_fold_builtin): Likewise.
        * tree-object-size.c (pass_through_call): Likewise.
        * tree-ssa-alias.c (ref_maybe_used_by_call_p_1,
        call_may_clobber_ref_p_1): Likewise.
        * tree-ssa-structalias.c (find_func_aliases_for_builtin_call,
        find_func_clobbers): Likewise.
        * tree.h (fold_builtin_strncpy_chk): Rename to fold_builtin_stxncpy_chk
        * builtins.c (fold_builtin_strncpy_chk): Likewise.
        Rewrite stpncpy_chk calls to strncpy_chk calls if returned value is
        ignored.

gcc/testsuite/

2011-11-28  Romain Geissler  <romain.geiss...@gmail.com>

        * gcc.c-torture/execute/builtins/chk.h (stpncpy, stpncpy_disallowed):
        New definitions.
        * gcc.c-torture/execute/builtins/lib/chk.c (stpncpy_disallowed):
        Likewise.
        (stpncpy, __stpncpy_chk): New functions.
        * gcc.c-torture/execute/builtins/stpncpy-chk-lib.c: New file.
        * gcc.c-torture/execute/builtins/stpncpy-chk.c: Likewise.

Attachment: lion_build.patch
Description: Binary data

Reply via email to