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: PATCH RFA: PR 29286: Handle placement new aliasing issues


> > Sure, that is true, but nevertheless finalize_ref_all_pointers is
> > going to indicate that any REF_ALL pointer may point to any call
> > clobbered variable.  I don't see what stops that.
>
> OK, I may have misunderstood.

No, I haven't. :-)

Testcase attached, compile at -O -gnatp -fno-inline.  Excerpt from .alias1:


Flow-insensitive alias information for P.Func

Aliased symbols

SMT.54, UID 764, void, is addressable, direct reads: 0, direct writes: 0, 
indirect reads: 0, indirect writes: 0, read frequency: 0, write frequency: 0, 
may aliases: { a b c r }
a, UID 691, integer, is addressable, direct reads: 0, direct writes: 0, 
indirect reads: 1, indirect writes: 0, read frequency: 9900, write frequency: 
0
b, UID 692, integer, is addressable, direct reads: 0, direct writes: 0, 
indirect reads: 2, indirect writes: 0, read frequency: 19800, write 
frequency: 0
c, UID 693, integer, is addressable, direct reads: 0, direct writes: 0, 
indirect reads: 1, indirect writes: 0, read frequency: 9900, write frequency: 
0
r, UID 694, struct p__rec, is addressable, direct reads: 2, direct writes: 0, 
indirect reads: 0, indirect writes: 2, read frequency: 20000, write 
frequency: 0, call clobbered (passed to call)
NMT.55, UID 765, integer, is addressable, direct reads: 1, direct writes: 0, 
indirect reads: 0, indirect writes: 0, read frequency: 0, write frequency: 0, 
may aliases: { b c }
NMT.56, UID 766, integer, is addressable, direct reads: 1, direct writes: 0, 
indirect reads: 0, indirect writes: 0, read frequency: 0, write frequency: 0, 
may aliases: { a b }

Dereferenced pointers

p, UID 689, integer * {ref-all}, symbol memory tag: SMT.54
q, UID 690, integer * {ref-all}, symbol memory tag: SMT.54

Symbol memory tags

SMT.54, UID 764, void, is addressable, direct reads: 0, direct writes: 0, 
indirect reads: 0, indirect writes: 0, read frequency: 0, write frequency: 0, 
may aliases: { a b c r }


Flow-sensitive alias information for P.Func

SSA_NAME pointers

p_1, name memory tag: NMT.55, is dereferenced (R=1, W=0), points-to vars: { b 
c }

q_2, name memory tag: NMT.56, is dereferenced (R=1, W=0), points-to vars: { a 
b }


Name memory tags

NMT.55, UID 765, integer, is addressable, direct reads: 1, direct writes: 0, 
indirect reads: 0, indirect writes: 0, read frequency: 0, write frequency: 0, 
may aliases: { b c }
NMT.56, UID 766, integer, is addressable, direct reads: 1, direct writes: 0, 
indirect reads: 0, indirect writes: 0, read frequency: 0, write frequency: 0, 
may aliases: { a b }



Pointed-to sets for pointers in P.Func

p_1, name memory tag: NMT.55, is dereferenced (R=1, W=0), points-to vars: { b 
c }

q_2, name memory tag: NMT.56, is dereferenced (R=1, W=0), points-to vars: { a 
b }


<bb 8>:
  # VUSE <b_18(D), c_19(D)>
  D.697_12 = *p_1;
  # VUSE <a_20(D), b_18(D)>
  D.698_13 = *q_2;
  D.696_14 = D.697_12 + D.698_13;

-- 
Eric Botcazou
package P is

  function func (I : Integer) return Integer;

end P;
package body P is

  type Rec is record
    I : Integer;
    F1, F2 : Float;
  end record;

  procedure Proc (I : Integer; R : out Rec) is
  begin
    R.I := I;
  end;

  function func (I : Integer) return Integer is
    type Ref_All_Pointer is access all integer;
    pragma No_Strict_Aliasing (Ref_All_Pointer);
    P, Q : Ref_All_Pointer;
    A, B, C : aliased Integer;
    R : Rec;
  begin
    Proc (I, R);
    if R.I = 1 then
      P := C'Access;
    else
      P := B'Access;
    end if;
    if R.I = 0 then
      Q := A'Access;
    else
      Q := B'Access;
    end if;
    if P = Q then
      raise Program_Error;
    end if;
    return P.all + Q.all;
  end;

end;

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