[llvm-commits] Extend Attributes to 64 bits (wrapped in a class), add one more attribute for address safety checking

Kostya Serebryany kcc at google.com
Fri Jan 13 14:15:31 PST 2012


Hello,

Please consider the following patches (llvm and clang).

Problem: LLVM needs more function attributes than currently available (32
bits).
One such proposed attribute is "address_safety", which shows that a
function is being checked for address safety (by AddressSanitizer,
SAFECode, etc).

Solution:
   - extend the Attributes from 32 bits to 64-bits
   - wrap the object into a class so that unsigned is never erroneously
used instead
   - change "unsigned" to "Attributes" throughout the code, including one
place in clang.
   - the class has no "operator uint64 ()", but it has "uint64_t Raw() " to
support packing/unpacking.
   - the class has "safe operator bool()" to support the common idiom:  if
(Attributes attr = getAttrs()) useAttrs(attr);
   - The CTOR from uint64_t is marked explicit, so I had to add a few
explicit CTOR calls
   - Add the new attribute "address_safety". Doing it in the same commit to
check that attributes beyond first 32 bits actually work.
   - Some of the functions from the Attribute namespace are worth moving
inside the class, but I'd prefer to have it as a separate commit.

Tested:
   "make check" on Linux and Mac (10.6)
   built/run spec CPU 2006 on Linux with clang -O2.

The patches are attached, the llvm patch is also published here:
http://codereview.appspot.com/5544058/

Thanks,

--kcc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120113/cb203a60/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: attr_clang.patch
Type: text/x-patch
Size: 2309 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120113/cb203a60/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: attr_llvm.patch
Type: text/x-patch
Size: 27314 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120113/cb203a60/attachment-0001.bin>


More information about the llvm-commits mailing list