File: TODO

package info (click to toggle)
golang-go.tools 0.0~hg20140703-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 6,060 kB
  • ctags: 5,784
  • sloc: asm: 622; sh: 179; lisp: 157; makefile: 37; xml: 11
file content (38 lines) | stat: -rw-r--r-- 1,407 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
-*- text -*-

Pointer analysis to-do list
===========================

CONSTRAINT GENERATION:
- support reflection 
- 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.    

OPTIMISATIONS
- pre-solver: PE and LE via HVN/HRU.
- solver: HCD, LCD.
- use sparse bitvectors for ptsets
- use sparse bitvectors for graph edges
- experiment with different worklist algorithms:
   priority queue (solver visit-time order)
   red-black tree (node id order)
   double-ended queue (insertion order)
   fast doubly-linked list (See Zhanh et al PLDI'13)
     (insertion order with fast membership test)
  dannyb recommends sparse bitmap.

API:
- Some optimisations (e.g. LE, PE) may change the API.
  Think about them sooner rather than later.

MISC:
- Test on all platforms.  
  Currently we assume these go/build tags: linux, amd64, !cgo.