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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits