<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <br>
    <br>
    <div class="moz-cite-prefix">On 8/20/20 9:41 AM, Gábor Horváth
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAPRL4a3WS7A9-1KZH=uwBeO2HooTHn++Vd9q7jCzqao27VdWFw@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div dir="ltr"><br>
        </div>
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Wed, 19 Aug 2020 at
            23:18, Artem Dergachev <<a
              href="mailto:noqnoqneo@gmail.com" moz-do-not-send="true">noqnoqneo@gmail.com</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div> Gabor, we've talked about this two days ago >_><br>
            </div>
          </blockquote>
          <div> </div>
          <div>This email is much easier to follow than a verbal
            discussion :D Now I have a much better understanding of what
            you meant.<br>
          </div>
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div> <br>
              I believe we should remove SymbolConjured's identity
              elements from SymbolMetadata and instead make it work more
              like SymbolRegionValue works in RegionStore. Namely:<br>
            </div>
          </blockquote>
          <div><br>
          </div>
          <div>If SymbolMetadata works like SymbolRegionValue, do we
            actually need both? I mean I do understand that we use them
            for different purposes, but we could also have a type alias
            or something like that if that actually helps understanding
            how the analyzer works.<br>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    Yes, i believe they can be technically backed by the same re-used
    implementation.<br>
    <br>
    Btw i just unforgot about the deep connection between
    SymbolRegionValue and SymbolDerived. We'll also probably need to
    introduce derived metadata. Say, if a smart pointer is part of a
    bigger object and that bigger object is invalidated, it doesn't mean
    that we immediately conjure a bunch of symbols for all raw values in
    all smart pointers that we aren't tracking that are sub-regions of
    that object; instead, we could simply start producing derived
    metadata instead of normal metadata when asked.<br>
    <br>
    <blockquote type="cite"
cite="mid:CAPRL4a3WS7A9-1KZH=uwBeO2HooTHn++Vd9q7jCzqao27VdWFw@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div> <br>
              2. Get rid of the metadata-in-use set. From now on
              SymbolMetadata, like SymbolRegionValue, is live whenever
              its region is live.<br>
            </div>
          </blockquote>
          <div><br>
          </div>
          <div>Will this work for code examples where the actual string
            is already dead but we still want to compute with its
            length? <br>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
    When i say "is live whenever its region is live", i mean that the
    opposite is not necessarily true. If the symbol is stored anywhere
    in memory then it's definitely live.<br>
    <br>
    Like, generally, all objects can be "internally live" (example:
    "SymbolRegionValue<R> is internally live if R is live
    [externally or internally]") or "externally live" (which can be only
    determined by exploring the current exploded node in its entirety
    and implemented via populating live and dead sets, example: "if
    symbol $x is written into region R and R is live [externally or
    internally] then $x is externally live").<br>
    <br>
    I was talking about internal liveness rules; external liveness rules
    are untouched.<br>
    <br>
    Such mental distinction is pretty important because only finite
    amount of symbols can be externally live (as the amount of info in
    the state is finite, and so is the live set); the amount of
    internally live symbols is potentially infinite.<br>
  </body>
</html>