re PR c/22371 (C front-end produces mis-match types in MODIFY_EXPR)
2008-03-24 Richard Guenther <rguenther@suse.de> PR c/22371 * gimplify.c (gimplify_modify_expr): For frontend type-correct pointer assignments change conversions according to middle-end rules. (gimplify_modify_expr_rhs): Deal with NULL TARGET_EXPR_INITIAL. * configure.ac: Include type checking in yes. * configure: Regenerate. From-SVN: r133479
This commit is contained in:
parent
52249a2e3f
commit
1b24a790e0
4 changed files with 24 additions and 3 deletions
|
@ -1,3 +1,12 @@
|
|||
2008-03-24 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR c/22371
|
||||
* gimplify.c (gimplify_modify_expr): For frontend type-correct
|
||||
pointer assignments change conversions according to middle-end rules.
|
||||
(gimplify_modify_expr_rhs): Deal with NULL TARGET_EXPR_INITIAL.
|
||||
* configure.ac: Include type checking in yes.
|
||||
* configure: Regenerate.
|
||||
|
||||
2008-03-24 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
|
||||
|
||||
* diagnostic.c (diagnostic_count_diagnostic): Delete.
|
||||
|
|
2
gcc/configure
vendored
2
gcc/configure
vendored
|
@ -6439,7 +6439,7 @@ do
|
|||
ac_gc_always_collect= ; ac_rtl_checking= ;
|
||||
ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
|
||||
ac_tree_checking=1 ; ac_valgrind_checking= ;
|
||||
ac_types_checking= ;;
|
||||
ac_types_checking=1 ;;
|
||||
no|none) ac_assert_checking= ; ac_checking= ; ac_df_checking= ;
|
||||
ac_fold_checking= ; ac_gc_checking= ;
|
||||
ac_gc_always_collect= ; ac_rtl_checking= ;
|
||||
|
|
|
@ -367,7 +367,7 @@ do
|
|||
ac_gc_always_collect= ; ac_rtl_checking= ;
|
||||
ac_rtlflag_checking=1 ; ac_runtime_checking=1 ;
|
||||
ac_tree_checking=1 ; ac_valgrind_checking= ;
|
||||
ac_types_checking= ;;
|
||||
ac_types_checking=1 ;;
|
||||
no|none) ac_assert_checking= ; ac_checking= ; ac_df_checking= ;
|
||||
ac_fold_checking= ; ac_gc_checking= ;
|
||||
ac_gc_always_collect= ; ac_rtl_checking= ;
|
||||
|
|
|
@ -3599,7 +3599,8 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p, tree *pre_p,
|
|||
references somehow. */
|
||||
tree init = TARGET_EXPR_INITIAL (*from_p);
|
||||
|
||||
if (!VOID_TYPE_P (TREE_TYPE (init)))
|
||||
if (init
|
||||
&& !VOID_TYPE_P (TREE_TYPE (init)))
|
||||
{
|
||||
*from_p = init;
|
||||
ret = GS_OK;
|
||||
|
@ -3870,6 +3871,17 @@ gimplify_modify_expr (tree *expr_p, tree *pre_p, tree *post_p, bool want_value)
|
|||
|| TREE_CODE (*expr_p) == GIMPLE_MODIFY_STMT
|
||||
|| TREE_CODE (*expr_p) == INIT_EXPR);
|
||||
|
||||
/* Insert pointer conversions required by the middle-end that are not
|
||||
required by the frontend. This fixes middle-end type checking for
|
||||
for example gcc.dg/redecl-6.c. */
|
||||
if (POINTER_TYPE_P (TREE_TYPE (*to_p))
|
||||
&& lang_hooks.types_compatible_p (TREE_TYPE (*to_p), TREE_TYPE (*from_p)))
|
||||
{
|
||||
STRIP_USELESS_TYPE_CONVERSION (*from_p);
|
||||
if (!useless_type_conversion_p (TREE_TYPE (*to_p), TREE_TYPE (*from_p)))
|
||||
*from_p = fold_convert (TREE_TYPE (*to_p), *from_p);
|
||||
}
|
||||
|
||||
/* See if any simplifications can be done based on what the RHS is. */
|
||||
ret = gimplify_modify_expr_rhs (expr_p, from_p, to_p, pre_p, post_p,
|
||||
want_value);
|
||||
|
|
Loading…
Add table
Reference in a new issue