------- Comment #3 from jakub at gcc dot gnu dot org 2008-01-21 14:15 -------
To answer my question, new16.C fails if the build_new_1 setting of
placement_expr and both calls to avoid_placement_new_aliasing are commented
out. I believe PR33407 is meant to handle this, unfortunately there is nothing
that prevents coalescing DECL_NO_TBAA_P variables with non-DECL_NO_TBAA_P ones.
At *.cleanup_cfg2 time we have in the inner loop:
lD.2031_7 = (intD.2 *) pD.2025_6(D);
*lD.2031_7 ={v} 0;
D.2058_13 = pD.2025_6(D);
D.2036_8 = D.2058_13;
fD.2029_9 = (long intD.5 *) D.2036_8;
*fD.2029_9 ={v} -1;
iD.2030_10 = iD.2030_2 + 1;
where D.2058 is DECL_NO_TBAA_P. But:
Try : D.2058_13(P13) & p_6(D)(P6) : Incompatible types. No coalesce.
Try : D.2036_8(P8) & D.2058_13(P13) --> P8 D.2036
Coalesced D.2058_13 to D.2036_8
already at *.copyrename1 time and DECL_NO_TBAA_P is lost. If DECL_NO_TBAA_P
decls are lost this easily, I guess PR33407 was fixed just by luck that in that
case it is not optimized out away.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34862