Attached is another revision of this enhancement, this one incorporating Richard's request for a more efficient encoding of the attributes to enable faster parsing. There is just one attribute called access, with the rest being arguments. This is transformed to access (mode-string) where the mode-string is a STRING_CST describing the access mode (read/write/both) and the two positional arguments for the function type. I have also removed the attributes from the built-in functions since they're not used for anything yet, and added more argument validation. To test this a little more extensively, I annotated a few Glibc functions with the new attribute and rebuilt it and its test suite. That exposed a problem with function pointers not being handled correctly so I fixed that by letting the access attribute apply to function pointers (and function pointer types in general). When this is finalized, if there's time I'm still hoping to get back to the parts of the patch that make use of the attribute for -Wunused and -Wuninitialized that I removed on Jeff's request for smaller, independent changes. In GCC 11 I'd like to look into tying this attribute in with _FORTIFY_SOURCE. Martin