<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/70603>70603</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-format] Misannotation of annotated function names
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-format
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          HazardyKnusperkeks
      </td>
    </tr>
</table>

<pre>
    Taken from #69325:
`ANNOTATE() void foo();` will be annotated as:
```
AnnotatedTokens(L=0, P=0, T=5, C=0):
 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=0 Name=identifier L=8 PPK=2 FakeLParens= FakeRParens=0 II=0x561bf7af7110 Text='ANNOTATE'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=l_paren L=9 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
 M=0 C=0 T=FunctionAnnotationRParen S=0 F=0 B=0 BK=0 P=140 Name=r_paren L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
 M=0 C=1 T=Unknown S=1 F=0 B=0 BK=0 P=23 Name=void L=15 PPK=2 FakeLParens= FakeRParens=0 II=0x561bf7abb610 Text='void'
 M=0 C=0 T=TrailingAnnotation S=1 F=0 B=0 BK=0 P=23 Name=identifier L=19 PPK=2 FakeLParens= FakeRParens=0 II=0x561bf7af7140 Text='foo'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=l_paren L=20 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=140 Name=r_paren L=21 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=semi L=22 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=';'
```
Obviously it shouldn't be `TrailingAnnotation`, but `FunctionDeclarationName`, if `ANNOTATE` is declared as `AttributeMacros` the annotation is:
```
AnnotatedTokens(L=0, P=0, T=5, C=0):
 M=0 C=0 T=AttributeMacro S=1 F=0 B=0 BK=0 P=0 Name=identifier L=8 PPK=2 FakeLParens= FakeRParens=0 II=0x564eba5a7f40 Text='ANNOTATE'
 M=0 C=0 T=AttributeLParen S=0 F=0 B=0 BK=0 P=23 Name=l_paren L=9 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
 M=0 C=0 T=AttributeRParen S=0 F=0 B=0 BK=0 P=140 Name=r_paren L=10 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
 M=0 C=0 T=Unknown S=1 F=0 B=0 BK=0 P=23 Name=void L=15 PPK=2 FakeLParens= FakeRParens=0 II=0x564eba56bd80 Text='void'
 M=0 C=1 T=FunctionDeclarationName S=1 F=0 B=0 BK=0 P=80 Name=identifier L=19 PPK=2 FakeLParens= FakeRParens=0 II=0x564eba5a8138 Text='foo'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=l_paren L=20 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text='('
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=140 Name=r_paren L=21 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=')'
 M=0 C=0 T=Unknown S=0 F=0 B=0 BK=0 P=23 Name=semi L=22 PPK=2 FakeLParens= FakeRParens=0 II=0x0 Text=';'
```
Which gets that one right.
There are multiple questions here for me:

1. What is the difference between an attribute and a function declaration? Just reducing it to one breaks 4 tests.
2. Do we want to work an that, or wait until someone has a real issue with it?
3. Should we allow (or even force?) a break between the `AttributeRParen` and the return type? The code from #69325 is not nicely formatted with the `AttributeMacros` set.

@mydeveloperday @owenca @rymiel 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsl0tv4zYQxz8NfRmsQZF6WAcfknWNbvcVdF3ssaCkkcWaIl2Sitf99AUp23HSZuFstkFRFDD04mj448zoP6ZwTq414pxk1yRbTMTgO2PnP4o_hG32b_Xgtmg3uHGTyjT7-UpsUENrTQ-E8bzkLCP8itAFoVckp1cfPnxcXa1-IGxGWAm3RjbQGjPeEn5Ncgo7qRRUCEJr44XHBoQ793H4xduro83KbFA7wmbvCF9Qwl7DzfFiRfgiCxevxyflyRm8D0_G59HsF73RZqfhE-GLBJbx-fV4fBtP0Sl8ED0SvpANai9biRbCrDO4uQlWDJZig-9uhA1EfBFvfz7dUnjzJpy-ZHlStYVoiyShsMIvnvAFYcVdiIoLKOljlIwfMdWv2zB3ZCyfyHgOFpP0GNNy0LWXRh8SIo0evX0dMklPwbRnlAl9Fmb5d5jJ5Qm-C12sz0iUfVtyqyq_l9zg8PEgrqyQSur1XRAvBX1QislT83xXi-k5bvw0_4EyZM9L8Ffq8CKoR8qOJd-_7L4pVA57ORKx5xDx6xPRA9n8WN1KMzi1B-nBdWZQjSas8EF2SU7_WofhTfYaqsGH8ePHvsBaCRsNIvloJFs4V_qcgnTQRNOo5XHUeyurweN7UVvjgpHvTpIfCl--lObfR3kp6U-xEpko2vRp0n-CfXeBur5wCzix_cuU_wmt_fsof8xtXjWzS5Q_udc-H3xRX6edPVaO3yD_Yz3OEj77X_7_8_L_uZN1B2v0DnwnPBiNYOW689NxfNWhRRAWoR-Ul1uF8PuALlSlgzjWGguB9ajQ8ZhM4XNwJ10U80a2LVrUNUKFfoeoQWgQR5UAoRsQ0B4q_9Ahxm7Dl_DT4DxYbIZa6nVoU95Ezsqi2DhIwaPz7gDMprAwsEPYCR0td8ZuwmxheaENGAs7IT0M2ksFzvQYfHXCgQCLQoF0bkDYSd-B9IQvR798Cp9idwy-hVJmB4TNjAW8DbscY2sMtqwEMYKdVhoCcN7nxmSFPheWHUYt-sFq8Ptt8AGrDqE2Dd7fO4VYauNByxrVPszYCx-2RJH04SR3zdThMZeHY0r7fYO3qMwWbSP2QFJqdqhrEa7svpeoYNLMeVPyUkxwnuTlLE8oy4pJN8-STCC2bV5mmFA-y2iTtbTOirKl2KaziZwzynhCWcloQrNiytOmKCtelMiRiSQlKcVeSDVV6rafGruexIjPC5pTPlGiQuXiFpOxWgm9fjUulTAWNp12Hl57VQ1rR1KqZMj8yZGXXsXt6b0XswW8l-7sD4Vpz3aUp6rTokc3Gayad95v438OtiRsuZa-G6ppbXrClmGqw-nV1prfsPaELeMCHGHLuIY_AwAA__-ie1M1">