Instead, map prvalue expressions directly to values in a newly introduced map Environment::ExprToVal.
This change introduces an additional member variable in Environment but is an overall win:
- It is more conceptually correctly, since prvalues don't have storage locations.
- It eliminates complexity from Environment::setValue(const Expr &E, Value &Val).
- It reduces the amount of data stored in Environment: A prvalue now has a single entry in ExprToVal instead of one in ExprToLoc and one in LocToVal.
- Not allocating StorageLocations for prvalues additionally reduces memory usage.
This patch is the last step in the migration to strict handling of value categories (see https://discourse.llvm.org/t/70086 for details). The changes here are almost entirely internal to Environment.
The only externally observable change is that when associating a RecordValue with the location returned by Environment::getResultObjectLocation() for a given expression, callers additionally need to associate the RecordValue with the expression themselves.