It's unclear whether applying an attribute to a type forms a different type.
Example:
- stride on array type A vs. unstrided array type A
- stride(16) on array type A vs. stride(32) on array type A
- as a clarifier, certainly ptr<storage, [[stride(16)]] A> should be different from ptr<storage, [[stride(32)]] A> because address calculations are different for the two kinds of pointers
- access control for buffers. Currently we put [[access(read_write)]] on the type side of the buffer variable declaration.
- access control for storage textures. Again, we put [[access(read)]] as decorating the type.