From 8d972839dfb7749bd218b9b6804a33e353c83d4f Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Tue, 5 May 2009 16:08:24 +0000 Subject: [PATCH] re PR middle-end/40023 (type mismatch in address expression) 2009-05-05 Richard Guenther 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 --- gcc/ChangeLog | 6 ++++++ gcc/builtins.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr40023.c | 11 +++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr40023.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 365176bc4dc..f976b77ea0a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-05-05 Richard Guenther + + PR middle-end/40023 + * builtins.c (gimplify_va_arg_expr): Properly build the + address. + 2009-05-05 Shujing Zhao * tree.h (strip_float_extensions): Remove duplicate declaration. diff --git a/gcc/builtins.c b/gcc/builtins.c index 0436229fa81..e12418983bf 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 f6ef3ef5e3a..4dae1aba4d4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-05 Richard Guenther + + PR middle-end/40023 + * gcc.c-torture/compile/pr40023.c: New testcase. + 2009-05-05 Nathan Sidwell * 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 00000000000..93d8f68a5e5 --- /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); +} + -- 2.30.2