https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89924

--- Comment #7 from Kamlesh Kumar <kamleshbhalui at gmail dot com> ---
After this patch

diff --git a/gcc/ipa-polymorphic-call.c b/gcc/ipa-polymorphic-call.c
index 705af03..b76793f 100644
--- a/gcc/ipa-polymorphic-call.c
+++ b/gcc/ipa-polymorphic-call.c
@@ -1118,6 +1118,10 @@
ipa_polymorphic_call_context::ipa_polymorphic_call_context (tree fndecl,
      We do not make this type of flow sensitive analysis yet.  */
   if (instance)
     *instance = base_pointer;
+
+  if (((TREE_CODE (TREE_TYPE(base_type)) == RECORD_TYPE)))
+    outer_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (base_pointer)));
+
   return;
 }


Gcc produces this code for above reported testcase.

        .file   "test.cpp"
        .text
        .section       
.text._ZN4AintpLERK1A,"axG",@progbits,_ZN4AintpLERK1A,comdat
        .align 2
        .p2align 4
        .weak   _ZN4AintpLERK1A
        .type   _ZN4AintpLERK1A, @function
_ZN4AintpLERK1A:
.LFB3:
        .cfi_startproc
        movl    8(%rsi), %edx
        movq    %rdi, %rax
        addl    %edx, 8(%rdi)
        ret
        .cfi_endproc
.LFE3:
        .size   _ZN4AintpLERK1A, .-_ZN4AintpLERK1A
        .text
        .p2align 4
        .globl  _Z9foo_innerPi
        .type   _Z9foo_innerPi, @function
_Z9foo_innerPi:
.LFB0:
        .cfi_startproc
        sall    (%rdi)
        ret
        .cfi_endproc
.LFE0:
        .size   _Z9foo_innerPi, .-_Z9foo_innerPi
        .p2align 4
        .globl  _Z17foo_virtual_innerP1A
        .type   _Z17foo_virtual_innerP1A, @function
_Z17foo_virtual_innerP1A:
.LFB1:
        .cfi_startproc
        movq    (%rdi), %rax
        movq    (%rax), %rax
        cmpq    $_ZN4AintpLERK1A, %rax
        jne     .L5
        sall    8(%rdi)
        ret
        .p2align 4,,10
        .p2align 3
.L5:
        movq    %rdi, %rsi
        jmp     *%rax
        .cfi_endproc
.LFE1:
        .size   _Z17foo_virtual_innerP1A, .-_Z17foo_virtual_innerP1A
        .p2align 4
        .globl  _Z3fooPi
        .type   _Z3fooPi, @function
_Z3fooPi:
.LFB6:
        .cfi_startproc
        sall    (%rdi)
        ret
        .cfi_endproc
.LFE6:
        .size   _Z3fooPi, .-_Z3fooPi
        .p2align 4
        .globl  _Z11foo_virtualP4Aint
        .type   _Z11foo_virtualP4Aint, @function
_Z11foo_virtualP4Aint:
.LFB4:
        .cfi_startproc
        sall    8(%rdi)
        ret
        .cfi_endproc
.LFE4:
        .size   _Z11foo_virtualP4Aint, .-_Z11foo_virtualP4Aint
        .ident  "GCC: (GNU) 10.0.0 20190821 (experimental)"
        .section        .note.GNU-stack,"",@progbits

Reply via email to