https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97652
--- Comment #1 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Actually there is another propagation happening in ipa-cp analysis: --- aa/pdt_14.f03.077i.cp 2020-10-31 09:00:52.809726530 +0100 +++ pdt_14.f03.077i.cp 2020-10-31 09:10:35.204755828 +0100 @@ -10,6 +10,8 @@ Starting walk at: push_8 (&root, &C.4104); instance pointer: &root Outer instance pointer: root offset: 0 (bits) vtbl reference: Function call may change dynamic type:push_8 (&root, &C.4103); +ipa-modref: call stmt push_8 (&root, &C.4103); +ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14 Determining dynamic type for call: push_8 (&root, &C.4104); Starting walk at: push_8 (&root, &C.4104); instance pointer: &C.4104 Outer instance pointer: C.4104 offset: 0 (bits) vtbl reference: @@ -19,6 +21,10 @@ instance pointer: &root Outer instance pointer: root offset: 0 (bits) vtbl reference: Function call may change dynamic type:push_8 (&root, &C.4104); Function call may change dynamic type:push_8 (&root, &C.4103); +ipa-modref: call stmt push_8 (&root, &C.4104); +ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14 +ipa-modref: call stmt push_8 (&root, &C.4103); +ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14 Determining dynamic type for call: push_8 (&root, &C.4105); Starting walk at: push_8 (&root, &C.4105); instance pointer: &C.4105 Outer instance pointer: C.4105 offset: 0 (bits) vtbl reference: @@ -30,6 +36,12 @@ Function call may change dynamic type:push_8 (&root, &C.4105); Function call may change dynamic type:push_8 (&root, &C.4104); Function call may change dynamic type:push_8 (&root, &C.4103); +ipa-modref: call stmt push_8 (&root, &C.4105); +ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14 +ipa-modref: call stmt push_8 (&root, &C.4104); +ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14 +ipa-modref: call stmt push_8 (&root, &C.4103); +ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14 Determining dynamic type for call: _3 = pop_8 (&root); Starting walk at: _3 = pop_8 (&root); instance pointer: &root Outer instance pointer: root offset: 0 (bits) vtbl reference: @@ -129,10 +141,14 @@ no arg info callsite ch2701/7 -> pop_8/5 : param 0: UNKNOWN + Aggregate passed by reference: + offset: 0, type: struct pdtlink_8 *, CONST: 0B value: 0x0, mask: 0xfffffffffffffff8 VR [1, -1] callsite ch2701/7 -> push_8/6 : param 0: UNKNOWN + Aggregate passed by reference: + offset: 0, type: struct pdtlink_8 *, CONST: 0B value: 0x0, mask: 0xfffffffffffffff8 VR [1, -1] param 1: CONST: &C.4105 -> 3.0e+0 @@ -140,6 +156,8 @@ Unknown VR callsite ch2701/7 -> push_8/6 : param 0: UNKNOWN + Aggregate passed by reference: + offset: 0, type: struct pdtlink_8 *, CONST: 0B value: 0x0, mask: 0xfffffffffffffff8 VR [1, -1] param 1: CONST: &C.4104 -> 2.0e+0 The jump function is not used for cloning, only triggers inline, but the conclusion seems wrong. push_8 can make root non-0. Root is of type pdtlink_8 so perhaps Frontend produces multiple copies of these. push_8 store is: - Analyzing store: *self_34(D) - Recording base_set=8 ref_set=8 parm=0 so indeed a different alias set than 14 used by ch2701