[LLVMdev] Jumping to a fixed address in Clang

Eli Friedman eli.friedman at gmail.com
Fri Sep 16 17:51:46 PDT 2011


On Fri, Sep 16, 2011 at 5:37 PM, David Meyer <pdox at google.com> wrote:
> 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?

(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




More information about the llvm-dev mailing list