aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-05-05 16:08:24 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-05-05 16:08:24 +0000
commit8d972839dfb7749bd218b9b6804a33e353c83d4f (patch)
tree7e575827eddf3afb9745eccb6ba54bf3460a7b91
parent95e207682899fcbf2bcfc43dd2926a6e866e884a (diff)
downloadgcc-8d972839dfb7749bd218b9b6804a33e353c83d4f.zip
gcc-8d972839dfb7749bd218b9b6804a33e353c83d4f.tar.gz
gcc-8d972839dfb7749bd218b9b6804a33e353c83d4f.tar.bz2
re PR middle-end/40023 (type mismatch in address expression)
2009-05-05 Richard Guenther <rguenther@suse.de> PR middle-end/40023 * builtins.c (gimplify_va_arg_expr): Properly build the address. * gcc.c-torture/compile/pr40023.c: New testcase. From-SVN: r147127
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/builtins.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr40023.c11
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 365176b..f976b77 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2009-05-05 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/40023
+ * builtins.c (gimplify_va_arg_expr): Properly build the
+ address.
+
2009-05-05 Shujing Zhao <pearly.zhao@oracle.com>
* tree.h (strip_float_extensions): Remove duplicate declaration.
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 0436229..e124189 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -5033,7 +5033,7 @@ gimplify_va_arg_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p)
if (TREE_CODE (TREE_TYPE (valist)) == ARRAY_TYPE)
{
tree p1 = build_pointer_type (TREE_TYPE (have_va_type));
- valist = build_fold_addr_expr_with_type (valist, p1);
+ valist = fold_convert (p1, build_fold_addr_expr (valist));
}
gimplify_expr (&valist, pre_p, post_p, is_gimple_val, fb_rvalue);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f6ef3ef..4dae1ab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-05 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/40023
+ * gcc.c-torture/compile/pr40023.c: New testcase.
+
2009-05-05 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.other/overload11.C: Adjust expected errors.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr40023.c b/gcc/testsuite/gcc.c-torture/compile/pr40023.c
new file mode 100644
index 0000000..93d8f68
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr40023.c
@@ -0,0 +1,11 @@
+typedef __builtin_va_list va_list;
+typedef struct {
+ va_list ap;
+} ScanfState;
+void
+GetInt(ScanfState *state, long llval)
+{
+ *__builtin_va_arg(state->ap,long *) = llval;
+ __builtin_va_end(state->ap);
+}
+