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