[LLVMbugs] [Bug 392] NEW: Global Vars Have (Somewhat) Limited Type Range

bugzilla-daemon at cs.uiuc.edu bugzilla-daemon at cs.uiuc.edu
Thu Jul 1 22:27:36 PDT 2004


           Summary: Global Vars Have (Somewhat) Limited Type Range
           Product: libraries
           Version: 1.0
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: minor
          Priority: P2
         Component: Bytecode Reader
        AssignedTo: rspencer at x10sys.com
        ReportedBy: rspencer at x10sys.com

The bytecode file format uses 28 bits for the type of a global var. However, 
generally speaking, type ids are encoded as vbr_uint32 making it possible to 
use 32 bits for a type id. It is conceivable in some monstrously typed module 
that this encoding will fail (if the typeid of the global var is in the range 
2^29 to 2^31). While this probably won't ever happen in the near term, its 
conceivable that linking together some huge enterprise application could fail 
in the bytecode reader/writer if more than 2^29-1 types are used.

A potential fix is to limit type ids to 24 bits (using a new read_vbr_uint24 
method in the BytecodeReader class). This would give us four extra flag bits 
on global variables should we need them in the future(e.g. new linkage types, 
or "thread local storage"), ensures large type numbers are encoded in 3-4 
bytes instead of 4-5, and provides a reasonable limit on the number of types 
that can be instantiated (16 million). 

This bug is really low priority and shouldn't be addressed unless we need 
extra global var bits. Its logged here so we don't forget about it because its 
a *potential* problem even though there's a very low probability of it 
occuring in the foreseeable future (who uses more than 256 million types? :)

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

More information about the llvm-bugs mailing list