tstellar / rpms / gcc

Forked from rpms/gcc 4 years ago
Clone
Blob Blame History Raw
2008-04-15  Jakub Jelinek  <jakub@redhat.com>

	PR target/35662
	* f95-lang.c (gfc_init_builtin_functions): Make sure
	BUILT_IN_SINCOS{,F,L} types aren't varargs.

	* gfortran.dg/pr35662.f90: New test.

--- gcc/fortran/f95-lang.c.jj	2008-02-29 09:11:54.000000000 +0100
+++ gcc/fortran/f95-lang.c	2008-04-15 13:17:50.000000000 +0200
@@ -1,5 +1,5 @@
 /* gfortran backend interface
-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
    Free Software Foundation, Inc.
    Contributed by Paul Brook.
 
@@ -853,21 +853,21 @@ gfc_init_builtin_functions (void)
   ptype = build_pointer_type (float_type_node);
   tmp = tree_cons (NULL_TREE, float_type_node,
 		   tree_cons (NULL_TREE, ptype,
-		   	      build_tree_list (NULL_TREE, ptype)));
+		   	      tree_cons (NULL_TREE, ptype, void_list_node)));
   func_float_floatp_floatp =
     build_function_type (void_type_node, tmp);
 
   ptype = build_pointer_type (double_type_node);
   tmp = tree_cons (NULL_TREE, double_type_node,
 		   tree_cons (NULL_TREE, ptype,
-		   	      build_tree_list (NULL_TREE, ptype)));
+		   	      tree_cons (NULL_TREE, ptype, void_list_node)));
   func_double_doublep_doublep =
     build_function_type (void_type_node, tmp);
 
   ptype = build_pointer_type (long_double_type_node);
   tmp = tree_cons (NULL_TREE, long_double_type_node,
 		   tree_cons (NULL_TREE, ptype,
-		   	      build_tree_list (NULL_TREE, ptype)));
+		   	      tree_cons (NULL_TREE, ptype, void_list_node)));
   func_longdouble_longdoublep_longdoublep =
     build_function_type (void_type_node, tmp);
 
--- gcc/testsuite/gfortran.dg/pr35662.f90.jj	2008-04-15 13:44:17.000000000 +0200
+++ gcc/testsuite/gfortran.dg/pr35662.f90	2008-04-15 13:44:09.000000000 +0200
@@ -0,0 +1,20 @@
+! PR target/35662
+! { dg-do run }
+! { dg-options "-O1" }
+
+subroutine f(x, y, z)
+  real, intent (in) :: x
+  real, intent (out) :: y, z
+  y = sin (x)
+  z = cos (x)
+end subroutine f
+
+program pr35662
+  real :: x, y, z
+  x = 3.1415926535897932384626433832795029
+  call f (x, y, z)
+  if (abs (y) > 1.0e-5 .or. abs (z + 1.0) > 1.0e-5) call abort
+  x = x / 2.0
+  call f (x, y, z)
+  if (abs (y - 1.0) > 1.0e-5 .or. abs (z) > 1.0e-5) call abort
+end program pr35662