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);
}