This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix PR43730: ICE in builtins.c


On Tue, Apr 13, 2010 at 2:36 PM, Michael Matz <matz@suse.de> wrote:
> Hello,
>
> we can't just blindly assert that 'target' will match the predicate, we
> have to do something if it doesn't.
>
> Regstrapping on x86-64-linux in progress (all langs+Ada). ?Okay for trunk?
> What about 4.5?

Ok for trunk and 4.5.

Thanks,
Richard.

>
> Ciao,
> Michael.
> --
> ? ? ? ?PR middle-end/43730
> ? ? ? ?* builtins.c (expand_builtin_interclass_mathfn): Also create
> ? ? ? ?a register if the predicate doesn't match.
>
> testsuite/
> ? ? ? ?* gcc.dg/pr43730.c: New test.
>
> Index: builtins.c
> ===================================================================
> --- builtins.c ?(revision 158263)
> +++ builtins.c ?(working copy)
> @@ -2316,7 +2316,8 @@ expand_builtin_interclass_mathfn (tree e
> ? ? ? tree orig_arg = arg;
> ? ? ? /* Make a suitable register to place result in. ?*/
> ? ? ? if (!target
> - ? ? ? ? || GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
> + ? ? ? ? || GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp))
> + ? ? ? ? || !insn_data[icode].operand[0].predicate (target, GET_MODE (target)))
> ? ? ? ? ?target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
>
> ? ? ? gcc_assert (insn_data[icode].operand[0].predicate
> Index: testsuite/gcc.dg/pr43730.c
> ===================================================================
> --- testsuite/gcc.dg/pr43730.c ?(revision 0)
> +++ testsuite/gcc.dg/pr43730.c ?(revision 0)
> @@ -0,0 +1,19 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O0" } */
> +extern int (isinfl)(long double);
> +
> +int
> +bugfun(long double x, long double y)
> +{
> + ?int result;
> +
> + ?if (isinfl(x))
> + ? ?result = isinfl(y);
> + ?else
> + ? ?{
> + ? ? ?int kx, ky;
> + ? ? ?kx = ky = 1;
> + ? ? ?result = (kx == ky);
> + ? ?}
> + ?return (result);
> +}
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]