On Tue, Aug 3, 2021 at 9:11 AM Jakub Jelinek via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Hi!
>
> The following testcase ICEs because DECL_FUNCTION_CODE asserts the builtin
> is BUILT_IN_NORMAL, but it sees a backend (MD) builtin instead.
> The FE, normal and MD builtin numbers overlap, so one should always
> check what kind of builtin it is before looking at specific codes.
>
> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for
> trunk?

OK.

> On the other side, region-model.cc has:
>       if (fndecl_built_in_p (callee_fndecl, BUILT_IN_NORMAL)
>           && gimple_builtin_call_types_compatible_p (call, callee_fndecl))
>         switch (DECL_UNCHECKED_FUNCTION_CODE (callee_fndecl))
> which IMO should use DECL_FUNCTION_CODE instead, it checked first it is
> a normal builtin...
>
> 2021-08-03  Jakub Jelinek  <ja...@redhat.com>
>
>         PR analyzer/101721
>         * sm-malloc.cc (known_allocator_p): Only check DECL_FUNCTION_CODE on
>         BUILT_IN_NORMAL builtins.
>
>         * gcc.dg/analyzer/pr101721.c: New test.
>
> --- gcc/analyzer/sm-malloc.cc.jj        2021-07-29 13:24:42.664013344 +0200
> +++ gcc/analyzer/sm-malloc.cc   2021-08-02 17:42:17.312821855 +0200
> @@ -1543,7 +1543,7 @@ known_allocator_p (const_tree fndecl, co
>
>    /* ... or it is a builtin allocator that allocates objects freed with
>       __builtin_free.  */
> -  if (fndecl_built_in_p (fndecl))
> +  if (fndecl_built_in_p (fndecl, BUILT_IN_NORMAL))
>      switch (DECL_FUNCTION_CODE (fndecl))
>        {
>        case BUILT_IN_MALLOC:
> --- gcc/testsuite/gcc.dg/analyzer/pr101721.c.jj 2021-08-02 17:48:50.375370371 
> +0200
> +++ gcc/testsuite/gcc.dg/analyzer/pr101721.c    2021-08-02 17:49:38.967696432 
> +0200
> @@ -0,0 +1,8 @@
> +/* PR analyzer/101721 */
> +/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
> +
> +void
> +foo ()
> +{
> +  __builtin_ia32_pause ();
> +}
>
>         Jakub
>

Reply via email to