[cfe-dev] Huge arrays: how to represent their size?

Serge Pavlov sepavloff at gmail.com
Fri Jul 12 11:38:58 PDT 2013


Hi all,

There are several bugs, manifested as a crash when clang treats really huge
arrays (PRs 8256, 12816, 15216). The arrays are so huge that bit size
cannot be represented by 64-bit integer.

There are several ways to fix these defects.

1. Emit an error if the array size cannot be represented by 64-bit number.
In this case changes to the clang sources are minimal. However some arrays
accepted by GCC would be rejected.
2. Use bytes to represent size and alignment of a type. It looks like
values other than multiples of 8 aren't used.
3. Represent the bit size by some new type, say BitUnits (similar to
CharUnits). This type could allocate more space to represent all possible
values of bit size, or use some encoding to pack any bit size into uint64_t
(for instance to store the size in bytes, if it is larger that some value).

Probably using bytes to represent size and alignment is the most natural
way to fix these problems. Is there a need to keep size/alignment with bit
precision?

Any thoughts?


-- 
Thanks,
--Serge
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130713/5beabe48/attachment.html>


More information about the cfe-dev mailing list