NoQ added a comment.

Oh nice, it's great to see these things moving.

I have a couple observations for your specific approach:

(1) Sounds like you're introducing a symbol `(long p)` that represents the 
exact same value as (and is used interchangeably with) `&SymRegion{$p} (as 
long)`. Ambiguity is generally bad because it means a lot of duplication and 
missed cornercases.

(2) I think you can run into the same problem with a non-symbolic region which 
you can't unwrap the same way because there's no symbol to cast:

  void foo() {
    int p;
    12 - (long)&p;
  }

Maybe we should stick to your approach as strictly superior and eliminate 
`LocAsInteger` entirely? In this case the example (2) will work through 
introducing a new custom symbol `SymbolRegionAddress` which would look like 
`$addr<int p>`. Then add a hard canonicalization rule `SymRegion{$addr<R>} = R` 
(symregions around address symbols are ill-formed). Ideally we'd also have to 
unwrap offsets, i.e. `$addr{Element{x, char, $i}} = $addr<x> + $i`.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D115932/new/

https://reviews.llvm.org/D115932

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to