Index: gcc/fortran/intrinsic.c
===================================================================
--- gcc/fortran/intrinsic.c	(revision 181149)
+++ gcc/fortran/intrinsic.c	(working copy)
@@ -1558,7 +1558,7 @@ add_functions (void)
   make_generic ("dprod", GFC_ISYM_DPROD, GFC_STD_F77);
 
   add_sym_1 ("dreal", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dd, GFC_STD_GNU,
-	     NULL, NULL, NULL,
+	     NULL, gfc_simplify_dreal, NULL,
 	     a, BT_COMPLEX, dd, REQUIRED);
 
   make_generic ("dreal", GFC_ISYM_REAL, GFC_STD_GNU);
Index: gcc/fortran/intrinsic.h
===================================================================
--- gcc/fortran/intrinsic.h	(revision 181149)
+++ gcc/fortran/intrinsic.h	(working copy)
@@ -262,6 +262,7 @@ gfc_expr *gfc_simplify_digits (gfc_expr 
 gfc_expr *gfc_simplify_dim (gfc_expr *, gfc_expr *);
 gfc_expr *gfc_simplify_dprod (gfc_expr *, gfc_expr *);
 gfc_expr *gfc_simplify_dot_product (gfc_expr *, gfc_expr *);
+gfc_expr *gfc_simplify_dreal (gfc_expr *);
 gfc_expr *gfc_simplify_dshiftl (gfc_expr *, gfc_expr *, gfc_expr *);
 gfc_expr *gfc_simplify_dshiftr (gfc_expr *, gfc_expr *, gfc_expr *);
 gfc_expr *gfc_simplify_epsilon (gfc_expr *);
Index: gcc/fortran/simplify.c
===================================================================
--- gcc/fortran/simplify.c	(revision 181149)
+++ gcc/fortran/simplify.c	(working copy)
@@ -939,6 +939,21 @@ gfc_simplify_dint (gfc_expr *e)
 
 
 gfc_expr *
+gfc_simplify_dreal (gfc_expr *e)
+{
+  gfc_expr *result = NULL;
+
+  if (e->expr_type != EXPR_CONSTANT)
+    return NULL;
+
+  result = gfc_get_constant_expr (BT_REAL, e->ts.kind, &e->where);
+  mpc_real (result->value.real, e->value.complex, GFC_RND_MODE);
+
+  return range_check (result, "DREAL");
+}
+
+
+gfc_expr *
 gfc_simplify_anint (gfc_expr *e, gfc_expr *k)
 {
   gfc_expr *result;
Index: gcc/testsuite/gfortran.dg/initialization_29.f90
===================================================================
--- gcc/testsuite/gfortran.dg/initialization_29.f90	(revision 0)
+++ gcc/testsuite/gfortran.dg/initialization_29.f90	(revision 0)
@@ -0,0 +1,15 @@
+! { dg-do compile }
+!
+! PR fortran/38718
+!
+  implicit none
+  real(kind=8), parameter :: r = kind(0) + 0.2
+  complex(kind=8), parameter :: c = (r, -9.3)
+  integer, parameter :: k = nint(dreal(c))
+  integer, parameter :: l = nint(realpart(c))
+  integer(kind=k) :: i
+  integer(kind=l) :: j
+  i = 42
+  j = 42
+  print *, k, i, j, r
+  end
