Originally contract attributes were stored separately from standard c++11 attributes in several places. Changes have since been made so that on the final FUNCTION_DECL they're stored in DECL_ATTRIBUTES along with other attributes, but cp_declarator still has three places "attributes" are stored:
attributes (gnu attrs)
std_attributes
contracts
Now that contract attributes have been rewritten to behave more like other DECL_ATTRIBUTES, we may be able to drop the contracts member and just process them while they're in std_attributes.