43 lines
1.5 KiB
Plaintext
43 lines
1.5 KiB
Plaintext
-*- text -*-
|
|
|
|
Pointer analysis to-do list
|
|
===========================
|
|
|
|
CONSTRAINT GENERATION:
|
|
- support reflection:
|
|
- a couple of operators are missing
|
|
- reflect.Values may contain lvalues (CanAddr)
|
|
- implement native intrinsics. These vary by platform.
|
|
- unsafe.Pointer conversions. Three options:
|
|
1) unsoundly (but type-safely) treat p=unsafe.Pointer(x) conversions as
|
|
allocations, losing aliases. This is what's currently implemented.
|
|
2) unsoundly (but type-safely) treat p=unsafe.Pointer(x) and T(p)
|
|
conversions as interface boxing and unboxing operations.
|
|
This may preserve some aliasing relations at little cost.
|
|
3) soundly track physical field offsets. (Summarise dannyb's email here.)
|
|
A downside is that we can't keep the identity field of struct
|
|
allocations that identifies the object.
|
|
- add to pts(a.panic) a label representing all runtime panics, e.g.
|
|
runtime.{TypeAssertionError,errorString,errorCString}.
|
|
|
|
OPTIMISATIONS
|
|
- pre-solver:
|
|
pointer equivalence: extend HVN to HRU
|
|
location equivalence
|
|
- solver: HCD, LCD.
|
|
- experiment with map+slice worklist in lieu of bitset.
|
|
It may have faster insert.
|
|
|
|
MISC:
|
|
- Test on all platforms.
|
|
Currently we assume these go/build tags: linux, amd64, !cgo.
|
|
|
|
MAINTAINABILITY
|
|
- Think about ways to make debugging this code easier. PTA logs
|
|
routinely exceed a million lines and require training to read.
|
|
|
|
BUGS:
|
|
- There's a crash bug in stdlib_test + reflection, rVCallConstraint.
|
|
|
|
|