http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59197
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2013-11-20 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- And with extern void func(void); extern void func(void) __attribute__((alias("alias_target_func"))); extern __inline __attribute__((__always_inline__)) __attribute__((__gnu_inline__)) void func(void) { } extern void alias_target_func(void) {} extern void caller(void) { func(); } you get t.c:4:89: error: redefinition of 'func' extern __inline __attribute__((__always_inline__)) __attribute__((__gnu_inline__)) void func(void) { } ^ t.c:2:13: note: previous definition of 'func' was here extern void func(void) __attribute__((alias("alias_target_func"))); ^ even though I'd say that providing an extern inline definition should still work? But yeah, gnu extern inlines have interesting behavior...