Botan uses [`set_associated_data`](http://botan.randombit.net/doxygen/classBotan_1_1GCM__Mode.html#adf39b9c417c2dd5b497c167de701de24) which fully resets the AAD state with each call.

This certainly sounds harder to get wrong but I don't know if it makes any particular protocols more complex to implement. Any volunteers to poke around some GCM using implementations to see how they use AAD?