aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-09-04 19:32:02 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-09-04 19:32:02 +0000
commit6e1b67b3645308d0543d925baa7aad3e14306c77 (patch)
tree27a5bcd6078a1369a3103494899ef3c7d2310ab8 /gcc
parenta524985e06f2b5bda5bea91b716ad2ad3bcc351a (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/trans-array.c5
-rw-r--r--gcc/fortran/trans-expr.c3
-rw-r--r--gcc/fortran/trans-intrinsic.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/internal_pack_4.f902
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" } }