Re: [PATCH Commitred] Fix PR target/48767
On Wed, 27 Apr 2011, Kaz Kojima wrote: Joseph S. Myers jos...@codesourcery.com wrote: I think you should add a testcase to gcc.c-torture/compile, unless there is already one that this patch fixes. Ah, indeed. How about the attached testcase? Yes, that testcase looks like what I had in mind, but you don't need the dg-* directives (the defaults in gcc.c-torture/compile should be fine). BTW, is it valid C? I think this should be considered the same as passing a type such as short that can never be the promoted argument type: undefined behavior at runtime if the call is executed. -- Joseph S. Myers jos...@codesourcery.com
[PATCH Commitred] Fix PR target/48767
Hi, The attached target specific patch is to fix PR target/48767. In the problematic case, sh.c:sh_gimplify_va_arg_expr calls targetm.calls.must_pass_in_stack with void type as its 2nd argument which is unexpected by the callee. The patch is tested on sh4-unknown-linux-gnu with no new failures. Applied on trunk. Regards, kaz -- 2011-04-26 Kaz Kojima kkoj...@gcc.gnu.org PR target/48767 * config/sh/sh.c (sh_gimplify_va_arg_expr): Don't call targetm.calls.must_pass_in_stack for void type. --- ORIG/trunk/gcc/config/sh/sh.c 2011-04-23 09:43:19.0 +0900 +++ trunk/gcc/config/sh/sh.c2011-04-26 10:40:25.0 +0900 @@ -8062,9 +8062,14 @@ sh_gimplify_va_arg_expr (tree valist, tr HOST_WIDE_INT size, rsize; tree tmp, pptr_type_node; tree addr, lab_over = NULL, result = NULL; - int pass_by_ref = targetm.calls.must_pass_in_stack (TYPE_MODE (type), type); + bool pass_by_ref; tree eff_type; + if (!VOID_TYPE_P (type)) +pass_by_ref = targetm.calls.must_pass_in_stack (TYPE_MODE (type), type); + else +pass_by_ref = false; + if (pass_by_ref) type = build_pointer_type (type);
Re: [PATCH Commitred] Fix PR target/48767
I think you should add a testcase to gcc.c-torture/compile, unless there is already one that this patch fixes. -- Joseph S. Myers jos...@codesourcery.com
Re: [PATCH Commitred] Fix PR target/48767
Joseph S. Myers jos...@codesourcery.com wrote: I think you should add a testcase to gcc.c-torture/compile, unless there is already one that this patch fixes. Ah, indeed. How about the attached testcase? BTW, is it valid C? Regards, kaz -- --- ORIG/trunk/gcc/testsuite/gcc.c-torture/compile/pr48767.c1970-01-01 09:00:00.0 +0900 +++ trunk/gcc/testsuite/gcc.c-torture/compile/pr48767.c 2011-04-27 07:54:05.0 +0900 @@ -0,0 +1,9 @@ +/* PR target/48767 */ +/* { dg-do compile } */ +/* { dg-options } */ + +void +foo (__builtin_va_list ap) +{ + __builtin_va_arg (ap, void); +}