https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78666
--- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> --- They sure are! (We should document it.) But what is specifying multiple declarations of the same function with different sets of attributes supposed to mean? Is it supposed to apply the union of all of them? How should conflicts be resolved? Should the rules be expected to be consistent across attributes with different names? FWIW, I would be inclined to accept just the set of attributes on the first declaration and ignore all the others (with a warning), and give an error on conflicts in the same declaration. Alternatively, take a union of non-conflicting attributes across all declarations and warn about conflicts. This would suffer from the problem that if the function were called after only a subset of its declarations were seen only the set of attributes seen so far would likely apply (and it would likely change with optimization and inlining.)