rsmith requested changes to this revision.

================
Comment at: include/clang/Basic/AttrDocs.td:2073-2079
@@ +2072,9 @@
+  let Content = [{
+Use ``overallocated`` to indicate a class or union can have extra memory
+allocated at its end. This attribute is primarily used when we want
+__builtin_object_size to return a conservative value for the distance between
+the pointer and the end of the subobject the pointer points to.
+
+For example:
+
+.. code-block:: c++
----------------
No, this approach is not reasonable. Just changing what `__builtin_object_size` 
returns does not change the fact that code that tries to use bytes off the end 
of the struct would have undefined behavior. Lying in the result of 
`__builtin_object_size` is actively harmful.

Note that in your example below, you cannot access more than four `char`s 
through `((struct S*)p)->b`, despite the attribute, because the attribute does 
not affect the behaviour of the array member of `S`.

The right thing to do here would presumably be to have an attribute that makes 
an array be treated as a flexible array member, *even if* its bound is 
specified (and greater than 0). This would affect `__builtin_object_size`, 
sanitizers, alias analysis, diagnostics for flexible array members in the 
middle of a type, and so on.


http://reviews.llvm.org/D21453



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to