Since it gained a new VariadicExprArgument, AnnotateAttr's printPretty no longer prints back compilable code when the attribute is only passed a string. This is because the comma-printing logic unconditionally prints a comma between the first, fixed argument and the VariadicExprArgument, which is most likely an empty collection.
This diff adds a Comma helper to AttrImpl.inc that prints a comma before an argument if it isn't the first argument. In the process, it simplifies substantially the generation code, and arguably the generated code, too. As usual when printing lists of things, the main insight is that all components should agree on whether you print a comma before or after the item body (here we choose to do it before).
rdar://73742471
Can you add a second test that shows we properly print the comma? e.g., int fun_annotate2() __attribute__((annotate("annotation one", "annotation two")));