aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/builtins.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr85955.c15
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6f3e654..fda150a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-06-04 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/85955
+ * builtins.c (fold_builtin_sincos): Convert pointers to
+ destination to appropriate type before dereferencing.
+
2018-06-04 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (abs<mode>2 for FLOAT128): Handle IFmode.
diff --git a/gcc/builtins.c b/gcc/builtins.c
index c96ac38..d4150d8 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -8266,6 +8266,9 @@ fold_builtin_sincos (location_t loc,
call = builtin_save_expr (call);
}
+ tree ptype = build_pointer_type (type);
+ arg1 = fold_convert (ptype, arg1);
+ arg2 = fold_convert (ptype, arg2);
return build2 (COMPOUND_EXPR, void_type_node,
build2 (MODIFY_EXPR, void_type_node,
build_fold_indirect_ref_loc (loc, arg1),
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e27cf41..821e088 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-06-04 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/85955
+ * gcc.dg/pr85955.c: New testcase.
+
2018-06-04 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/85981
diff --git a/gcc/testsuite/gcc.dg/pr85955.c b/gcc/testsuite/gcc.dg/pr85955.c
new file mode 100644
index 0000000..7f67f62
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr85955.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -w" } */
+
+extern void sincos(double x, double *sinx, double *cosx);
+void apply(void (*f)(double, double *, double *),
+ double x, double *sinx, double *cosx)
+{
+ f(x, sinx, cosx);
+ return;
+}
+void apply_sincos(double x, double **sinx, double **cosx)
+{
+ apply(sincos, x, sinx, cosx);
+ return;
+}