Angus schrieb:
Andrew Haley-5 wrote: BTW, in my opinion it is dangerous. Usually one can rely on compile or link errors to catch mismatched function characteristics, but with attributes there is no such checking. So even if you aren't doing something *really* dangerous, like working with virtual methods, you might do what I did, and you'll never know about it until you notice you've mismatched your attributes. So if you ask me, attributes like this one should be used sparingly, and with much caution.
I would consider this as a significant defect of gcc's attribute handling. Attributes that change a function to a non-standard calling convention effectively modify the interface of the function, which should be encoded into the (mangled) symbol name. Thereby incompatible prototypes on on the caller and callee side could be detected at link-time.
Other compilers, such as Visual C++, do this. Modifiers different than the default calling convention become mangled into the resulting linker symbol.
Daniel