https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119878
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think the current behavior is correct. nonstring attribute is a declaration attribute. So __builtin_has_attribute returns true if passed a declaration which has one. multi2[1] (like say single + 0) is some expression which doesn't have the attribute, only multi2 has it.