They are GCC internal “magic”, i.e. part of the compiler implementation itself.
See this page which talks about their use. The macro is used to mark types for garbage-collection purposes. There can be arguments too, see this page for details.
UPDATE:: As pointed out by Drew Dorman in a comment, the actual double parenthesis are not part of the “internalness” of the GNU implementation; they’re commonly used when you want to collect an entire list of arguments into a single argument for the called macro. This can be useful sometimes when wrapping e.g. printf(), too. See this question, for more on this technique.