<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Macros on access specifiers not formatted correctly"
   href="https://bugs.llvm.org/show_bug.cgi?id=38403">38403</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Macros on access specifiers not formatted correctly
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Formatter
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>steveire@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>djasper@google.com, klimek@google.com, llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Given this input:


    #define Q_SLOTS
    #define MY_ATTR

    class Foo {
    public:
      float b() { return b; }

    private Q_SLOTS:

      int a_ = 0;
      float b_ = 0;
    };

    class Foo {
    public:
      float b() { return b; }

    private MY_ATTR:

      int a_ = 0;
      float b_ = 0;
    };



clang format produces this result:


   
C:\dev\src\playground\cpp>C:\dev\src\llvm\build\releaseprefix\bin\clang-format.exe
cftest.cpp

    #define Q_SLOTS
    #define MY_ATTR

    class Foo {
    public:
      float b() { return b; }

    private Q_SLOTS:

      int a_ = 0;
      float b_ = 0;
    };

    class Foo {
    public:
      float b() { return b; }

    private
      MY_ATTR :

          int a_ = 0;
      float b_ = 0;
    };



That is - the MY_ATTR macro breaks subsequent formatting.

I notice 

void UnwrappedLineParser::parseAccessSpecifier() {
  nextToken();
  // Understand Qt's slots.
  if (FormatTok->isOneOf(Keywords.kw_slots, Keywords.kw_qslots))
    nextToken();
  // Otherwise, we don't know what it is, and we'd better keep the next token.
  if (FormatTok->Tok.is(tok::colon))
    nextToken();
  addUnwrappedLine();
}

so it seems Qt is handled as a special case? I assume there is some reason for
that instead of a generic solution. I'm not familiar enough with clang-format
internals to know.

Can the list of accepted tokens in access specifiers be extended as a user
customization point?</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>