Jumping to a fixed address in Clang

I am compiling some code with Clang which needs to jump to a fixed
address to perform a "syscall". These fixed addresses contain valid
code.

I noticed that this code produces a warning:

typedef void (*exit_syscall_type) (int status) __attribute__((noreturn));
void _exit(int status) __attribute__ ((noreturn));
void _exit(int status) {
  ((exit_syscall_type)0x10000)(status);
}

This (seemingly equivalent) code does not:

typedef void (*exit_syscall_type) (int status) __attribute__((noreturn));
void _exit(int status) __attribute__ ((noreturn));
void _exit(int status) {
  exit_syscall_type ptr = (exit_syscall_type)0x10000;
  ptr(status);
}

The warning produced is:

warning: function declared 'noreturn' should not return [-Winvalid-noreturn]

Is this discrepancy intentional?

- David Meyer

(cfe-dev would be a better place to ask this.)

No, looks like a bug. And it looks like it actually got fixed
recently; try a build from top-of-tree.

-Eli