Open
Description
EDIT - Latest Draft: https://thephd.dev/_vendor/future_cxx/papers/C%20-%20Transparent%20Aliases.html
For C. The goal is to defend against ABI by allowing function renaming. Attributes on the renaming declarations can also provide an easy-out for weak symbols.
#include <assert.h>
int real_call (double d, int i) {
return (int)(d + i);
}
// a "typedef" for real_call;
using made_up_call = real_call;
// made_up_call never makes it into binary, it's just
// identical function pointer
_Static_assert(&made_up_call == &real_call);
int main (int, char*[]) {
typedef int(real_call_t)(double, int);
// decays, like normal, to function pointer to real_call
real_call_t* made_up_call_ptr_decay = made_up_call;
// function pointer to real_call
real_call_t* made_up_call_ptr = &made_up_call;
// equivalent
assert(made_up_call_ptr_decay == &real_call);
assert(made_up_call_ptr == &real_call);
// invokes real_call directly
[[maybe_unused]] int is_3 = made_up_call(2.0, 1);
// invokes real_call through it's function pointer
[[maybe_unused]] int is_4 = real_call_ptr_decay(3.0, 1);
// invokes real_call through it's function pointer
[[maybe_unused]] int is_5 = real_call_ptr(3.0, 2);
assert(is_3 == 3);
assert(is_4 == 4);
assert(is_5 == 5);
return 0;
}
Activity