Add __stpncpy_chk builtin support

2011-11-28 Thread Romain Geissler
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 

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  

* 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  

* 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.



lion_build.patch
Description: Binary data


Re: Add __stpncpy_chk builtin support

2011-12-08 Thread Romain Geissler
Le 28 nov. 2011 à 12:16, Romain Geissler a écrit :

> 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 
> 
> 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  
> 
>   * 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  
> 
>   * 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.
> 
> 

Ping


Re: Add __stpncpy_chk builtin support

2011-12-08 Thread Jakub Jelinek
On Mon, Nov 28, 2011 at 12:16:52PM +0100, Romain Geissler wrote:
> 2011-11-28  Romain Geissler  
> 
>   * 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  
> 
>   * 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.
> 

This is ok for trunk, if you fix formatting nits mentioned below:

@@ -10910,7 +10911,8 @@ fold_builtin_4 (location_t loc, tree fndecl,
  DECL_FUNCTION_CODE (fndecl));
 
 case BUILT_IN_STRNCPY_CHK:
-  return fold_builtin_strncpy_chk (loc, arg0, arg1, arg2, arg3, NULL_TREE);
+case BUILT_IN_STPNCPY_CHK:
+  return fold_builtin_stxncpy_chk (loc, arg0, arg1, arg2, arg3, NULL_TREE, 
ignore, fcode);

Please watch formatting, this line is too long.
 
 case BUILT_IN_STRNCAT_CHK:
   return fold_builtin_strncat_chk (loc, fndecl, arg0, arg1, arg2, arg3);
@@ -12863,8 +12877,9 @@ fold_builtin_strncpy_chk (location_t loc, tree dest, 
tree src,
return NULL_TREE;
 }
 
-  /* If __builtin_strncpy_chk is used, assume strncpy is available.  */
-  fn = builtin_decl_explicit (BUILT_IN_STRNCPY);
+  /* If __builtin_st{r,p}ncpy_chk is used, assume st{r,p}ncpy is available.  */
+  fn = builtin_decl_explicit (fcode == BUILT_IN_STPNCPY_CHK
+ ? BUILT_IN_STPNCPY : BUILT_IN_STRNCPY);

"? BUILT_IN_STPNCPY" needs to be below "fcode == " on the previous line.

+   result = fold_builtin_stxncpy_chk (loc, gimple_call_arg (stmt, 0),
gimple_call_arg (stmt, 1),
gimple_call_arg (stmt, 2),
gimple_call_arg (stmt, 3),
-  val[2]);
+  val[2],
+  ignore,
+ DECL_FUNCTION_CODE (callee));

Please put ignore, on the same line as val[2], and align DECL_FUNCTION_CODE
properly below val[2].

--- gcc/tree.h
+++ gcc/tree.h
@@ -5444,7 +5444,8 @@ extern tree fold_builtin_memory_chk (location_t, tree, 
tree, tree, tree, tree, t
 enum built_in_function);
 extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, 
bool,
 enum built_in_function);
-extern tree fold_builtin_strncpy_chk (location_t, tree, tree, tree, tree, 
tree);
+extern tree fold_builtin_stxncpy_chk (location_t, tree, tree, tree, tree, 
tree, bool,
+enum built_in_function);

"enum " should be aligned below "location_t,".

Jakub


Re: Add __stpncpy_chk builtin support

2011-12-15 Thread Romain Geissler
Le 8 déc. 2011 à 19:09, Jakub Jelinek a écrit :

> On Mon, Nov 28, 2011 at 12:16:52PM +0100, Romain Geissler wrote:
>> 2011-11-28  Romain Geissler  
>> 
>>  * 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  
>> 
>>  * 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.
>> 
> 
> This is ok for trunk, if you fix formatting nits mentioned below:
> 
> @@ -10910,7 +10911,8 @@ fold_builtin_4 (location_t loc, tree fndecl,
> DECL_FUNCTION_CODE (fndecl));
> 
> case BUILT_IN_STRNCPY_CHK:
> -  return fold_builtin_strncpy_chk (loc, arg0, arg1, arg2, arg3, 
> NULL_TREE);
> +case BUILT_IN_STPNCPY_CHK:
> +  return fold_builtin_stxncpy_chk (loc, arg0, arg1, arg2, arg3, 
> NULL_TREE, ignore, fcode);
> 
> Please watch formatting, this line is too long.
> 
> case BUILT_IN_STRNCAT_CHK:
>   return fold_builtin_strncat_chk (loc, fndecl, arg0, arg1, arg2, arg3);
> @@ -12863,8 +12877,9 @@ fold_builtin_strncpy_chk (location_t loc, tree dest, 
> tree src,
>   return NULL_TREE;
> }
> 
> -  /* If __builtin_strncpy_chk is used, assume strncpy is available.  */
> -  fn = builtin_decl_explicit (BUILT_IN_STRNCPY);
> +  /* If __builtin_st{r,p}ncpy_chk is used, assume st{r,p}ncpy is available.  
> */
> +  fn = builtin_decl_explicit (fcode == BUILT_IN_STPNCPY_CHK
> + ? BUILT_IN_STPNCPY : BUILT_IN_STRNCPY);
> 
> "? BUILT_IN_STPNCPY" needs to be below "fcode == " on the previous line.
> 
> + result = fold_builtin_stxncpy_chk (loc, gimple_call_arg (stmt, 0),
>gimple_call_arg (stmt, 1),
>gimple_call_arg (stmt, 2),
>gimple_call_arg (stmt, 3),
> -val[2]);
> +val[2],
> +ignore,
> +   DECL_FUNCTION_CODE (callee));
> 
> Please put ignore, on the same line as val[2], and align DECL_FUNCTION_CODE
> properly below val[2].
> 
> --- gcc/tree.h
> +++ gcc/tree.h
> @@ -5444,7 +5444,8 @@ extern tree fold_builtin_memory_chk (location_t, tree, 
> tree, tree, tree, tree, t
>enum built_in_function);
> extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, 
> tree, bool,
>enum built_in_function);
> -extern tree fold_builtin_strncpy_chk (location_t, tree, tree, tree, tree, 
> tree);
> +extern tree fold_builtin_stxncpy_chk (location_t, tree, tree, tree, tree, 
> tree, bool,
> +  enum built_in_function);
> 
> "enum " should be aligned below "location_t,".
> 
>   Jakub

Hi

Here is the patch with fixed coding style.
Can you please apply it, i don't have write access to the repository.

Romain Geissler



lion_build.patch
Description: Binary data