gcc/gcc43-pr35662.patch

66 lines
2.2 KiB
Diff

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