[cxx-abi-dev] Run-time array checking
Mike Herrick
mjh at edg.com
Mon Sep 10 13:07:05 UTC 2012
Getting back to the original proposals:
On Sep 6, 2012, at 8:46 AM, Mike Herrick wrote:
>
> Here are some basic strategies for doing the run-time checking:
>
> 1) Have the compiler generate inline code to do the bounds checking before calling the existing runtime routines. The problem with this is that there is no IA-64 ABI standard way to throw a std::bad_array_new_length exception once a violation has been detected (so we'd need to add something like __cxa_throw_bad_array_new_length).
>
> 2) Have the runtime libraries do the checking and throw std::bad_array_new_length as needed. In order to do this (in a backwards compatible way) I think we'd need to add new versions of __cxa_vec_new2/__cxa_vec_new3 where the element_count is signed and the number of initializers in the array is passed as a new argument.
>
> 3) A new routine, say __cxa_vec_new_check, that takes a signed element_count, element_size, and number of initialized elements and does all necessary checks, throwing std::bad_array_new_length if required, otherwise returning. Compilers would insert a call to the new routine before any call to __cxa_vec_new* (when the number of elements isn't known at compile time).
It seems that option 2 is out (doesn't handle placement new[]), and option 3 has problems with signed/unsigned number of elements cases. It appears that option 1 has had the most support (and gives the most flexibility). Any objections (or other proposals)?
Mike.
More information about the cxx-abi-dev
mailing list