diff options
author | Richard Guenther <rguenther@suse.de> | 2008-09-04 19:32:02 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-09-04 19:32:02 +0000 |
commit | 6e1b67b3645308d0543d925baa7aad3e14306c77 (patch) | |
tree | 27a5bcd6078a1369a3103494899ef3c7d2310ab8 | |
parent | a524985e06f2b5bda5bea91b716ad2ad3bcc351a (diff) | |
download | gcc-6e1b67b3645308d0543d925baa7aad3e14306c77.zip gcc-6e1b67b3645308d0543d925baa7aad3e14306c77.tar.gz gcc-6e1b67b3645308d0543d925baa7aad3e14306c77.tar.bz2 |
trans-array.c (gfc_conv_array_parameter): Use correct types in building COND_EXPRs.
2008-09-04 Richard Guenther <rguenther@suse.de>
* trans-array.c (gfc_conv_array_parameter): Use correct types
in building COND_EXPRs.
* trans-expr.c (gfc_conv_missing_dummy): Likewise.
* trans-intrinsics.c (gfc_conv_intrinsic_merge): Likewise.
* gfortran.dg/internal_pack_4.f90: Adjust pattern.
From-SVN: r140001
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/trans-array.c | 5 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 3 | ||||
-rw-r--r-- | gcc/fortran/trans-intrinsic.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/internal_pack_4.f90 | 2 |
6 files changed, 19 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 23dfbdf..459aeb9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2008-09-04 Richard Guenther <rguenther@suse.de> + + * trans-array.c (gfc_conv_array_parameter): Use correct types + in building COND_EXPRs. + * trans-expr.c (gfc_conv_missing_dummy): Likewise. + * trans-intrinsics.c (gfc_conv_intrinsic_merge): Likewise. + 2008-09-04 Daniel Kraft <d@domob.eu> * PR fortran/37099 diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 2d574a3..e0ebbf0 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -5250,8 +5250,9 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr * expr, gfc_ss * ss, int g77, if (fsym && fsym->attr.optional && sym && sym->attr.optional) { tmp = gfc_conv_expr_present (sym); - ptr = build3 (COND_EXPR, TREE_TYPE (se->expr), tmp, ptr, - null_pointer_node); + ptr = build3 (COND_EXPR, TREE_TYPE (se->expr), tmp, + fold_convert (TREE_TYPE (se->expr), ptr), + fold_convert (TREE_TYPE (se->expr), null_pointer_node)); } ptr = gfc_evaluate_now (ptr, &se->pre); diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 8ebda49..d253976 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -161,7 +161,8 @@ gfc_conv_missing_dummy (gfc_se * se, gfc_expr * arg, gfc_typespec ts, int kind) tmp = fold_convert (tmp, build_fold_indirect_ref (se->expr)); /* Test for a NULL value. */ - tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, tmp, integer_one_node); + tmp = build3 (COND_EXPR, TREE_TYPE (tmp), present, tmp, + fold_convert (TREE_TYPE (tmp), integer_one_node)); tmp = gfc_evaluate_now (tmp, &se->pre); se->expr = build_fold_addr_expr (tmp); } diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c index ecb5687..aa5ee45 100644 --- a/gcc/fortran/trans-intrinsic.c +++ b/gcc/fortran/trans-intrinsic.c @@ -2918,7 +2918,8 @@ gfc_conv_intrinsic_merge (gfc_se * se, gfc_expr * expr) se->string_length = len; } type = TREE_TYPE (tsource); - se->expr = fold_build3 (COND_EXPR, type, mask, tsource, fsource); + se->expr = fold_build3 (COND_EXPR, type, mask, tsource, + fold_convert (type, fsource)); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9be16a8..6849f7c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-09-04 Richard Guenther <rguenther@suse.de> + + * gfortran.dg/internal_pack_4.f90: Adjust pattern. + 2008-09-04 Daniel Kraft <d@domob.eu> PR fortran/37099 diff --git a/gcc/testsuite/gfortran.dg/internal_pack_4.f90 b/gcc/testsuite/gfortran.dg/internal_pack_4.f90 index 049931a..0bcfc79 100644 --- a/gcc/testsuite/gfortran.dg/internal_pack_4.f90 +++ b/gcc/testsuite/gfortran.dg/internal_pack_4.f90 @@ -26,6 +26,6 @@ USE M1 CALL S2() END -! { dg-final { scan-tree-dump-times "a != 0B \\? _gfortran_internal_pack" 1 "original" } } +! { dg-final { scan-tree-dump-times "a != 0B \\? \\\(.*\\\) _gfortran_internal_pack" 1 "original" } } ! { dg-final { scan-tree-dump-times "if \\(a != 0B &&" 1 "original" } } ! { dg-final { cleanup-tree-dump "original" } } |