[cfe-dev] Feature Request: __builtin_undefined()

Ryan Nicholl via cfe-dev cfe-dev at lists.llvm.org
Sat Oct 7 10:10:44 PDT 2017

I would like to request a feature, __builtin_undefined()
This would serve multiple purposes, it would be similar to __builtin_unreachable, but can be used to specify that the behavior upon reaching it it undefined (not necessarily that it can't be reached.)
For example, in pseudo code "T my_array<T>::operator[](size_t n) { if (n >= this->internal_size) __builtin_undefined(); ... }"

So this would indicate that a user has invoked undefined behavior, and -fsanitize=undefined would trap this behavior, and additionally, when debugging is disabled, the compiler could use __builtin_undefined() as an optimization hint.

I like to distinguish my proposed __builtin_undefined() from __builtin_unreachable() in that __builtin_unreachable() should really be unreachable. (Even if the user e.g. uses an invalid input index?) (i.e., it should indicate a bug in the code that uses __builtin_unreachable() rather than in the calling code)

I recognize that the distinction is probably not substantial, but being able to explicitly specify certain behavior as undefined might prove useful when developing libraries as compilers develop more advanced optimizations.
Ryan Nicholl

Sent with [ProtonMail](https://protonmail.com) Secure Email.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171007/c2ef6697/attachment.html>

More information about the cfe-dev mailing list