From: Steven G. Kargl Date: Sun, 19 Jul 2009 15:37:50 +0000 (+0000) Subject: re PR fortran/40727 ([4.4] ICE gfc_simplify_dcmplx(): Bad type when passing BT_COMPLE... X-Git-Tag: releases/gcc-4.5.0~4507 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=20562de4dfb0e8e1b65ae6c157032a480a2529dc;p=thirdparty%2Fgcc.git re PR fortran/40727 ([4.4] ICE gfc_simplify_dcmplx(): Bad type when passing BT_COMPLEX to cmplx) 2009-07-18 Steven G. Kargl PR fortran/40727 * fortran/check.c (gfc_check_cmplx, gfc_check_dcmplx): Add check that the optional second argument isn't of COMPLEX type. 2009-07-18 Steven G. Kargl PR fortran/40727 * gfortran.dg/intrinsic_cmplx.f90: New test. From-SVN: r149793 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 44289a6b66e5..fcf194abc601 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-07-19 Steven G. Kargl + + PR fortran/40727 + * fortran/check.c (gfc_check_cmplx, gfc_check_dcmplx): Add check that + the optional second argument isn't of COMPLEX type. + 2009-07-17 Richard Guenther PR c/40401 diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 8f949d2c093f..e19f8124f095 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -819,6 +819,15 @@ gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind) gfc_current_intrinsic, &y->where); return FAILURE; } + + if (y->ts.type == BT_COMPLEX) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type " + "of either REAL or INTEGER", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &y->where); + return FAILURE; + } + } if (kind_check (kind, 2, BT_COMPLEX) == FAILURE) @@ -977,6 +986,14 @@ gfc_check_dcmplx (gfc_expr *x, gfc_expr *y) gfc_current_intrinsic, &y->where); return FAILURE; } + + if (y->ts.type == BT_COMPLEX) + { + gfc_error ("'%s' argument of '%s' intrinsic at %L must have a type " + "of either REAL or INTEGER", gfc_current_intrinsic_arg[1], + gfc_current_intrinsic, &y->where); + return FAILURE; + } } return SUCCESS; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a1ba3f1d774e..a9cb57bc1721 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-07-18 Steven G. Kargl + + PR fortran/40727 + * gfortran.dg/intrinsic_cmplx.f90: New test. + 2009-07-19 Thomas Koenig PR libfortran/34670 diff --git a/gcc/testsuite/gfortran.dg/intrinsic_cmplx.f90 b/gcc/testsuite/gfortran.dg/intrinsic_cmplx.f90 new file mode 100644 index 000000000000..744e77a85a44 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/intrinsic_cmplx.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/40727 +program test + integer, parameter :: sp = kind(1.e0), dp = kind(1.d0) + complex(sp) :: s + complex(dp) :: d + s = cmplx(0.e0, cmplx(0.e0,0.e0)) ! { dg-error "either REAL or INTEGER" } + d = dcmplx(0.d0, cmplx(0.d0,0.d0)) ! { dg-error "either REAL or INTEGER" } +end program test