Enabling tail call may remove the frame pointer and return address restoration in caller which will make the above two builtin functions get incorrect value if the depth parameter > 0.
E.g.
void __attribute__((noinline)) *callee (char *p) { return __builtin_frame_address (1); } void *caller (void) { char * save = (char*) alloca (4); return callee (save); }