<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </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 --- - recordDecl(unless(isDefinition())) is not the inverse of recordDecl(isDefinition())"
   href="https://llvm.org/bugs/show_bug.cgi?id=26613">26613</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>recordDecl(unless(isDefinition())) is not the inverse of recordDecl(isDefinition())
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

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

        <tr>
          <th>Severity</th>
          <td>release blocker
          </td>
        </tr>

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

        <tr>
          <th>Component</th>
          <td>-New Bugs
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>legalize@xmission.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>The expectation is that recordDecl(unless(isDefinition())) should only match
declarations of struct/class/union that does not contain a body.  However, this
doesn't work.

Example:

clanger> cat
../llvm/tools/clang/tools/extra/test/clang-tidy/readability-redundant-fwd-decl.cpp 
// RUN: %check_clang_tidy %s readability-redundant-fwd-decl %t

class Foo;
class Foo;
// CHECK-MESSAGES: :[[@LINE-1]]:1: warning: redundant forward declaration
[readability-redundant-fwd-decl]

class Bar {
public:
    int i;
};

class Bar;
~/dev/build
clanger> bin/clang-query
../llvm/tools/clang/tools/extra/test/clang-tidy/readability-redundant-fwd-decl.cpp
-- -std=c++11
clang-query> match recordDecl(isDefinition())

Match #1:

/home/richard/dev/build/../llvm/tools/clang/tools/extra/test/clang-tidy/readability-redundant-fwd-decl.cpp:7:1:
note: "root" binds here
class Bar {
^~~~~~~~~~~
1 match.
clang-query> match recordDecl(unless(isDefinition()))

Match #1:

/home/richard/dev/build/../llvm/tools/clang/tools/extra/test/clang-tidy/readability-redundant-fwd-decl.cpp:3:1:
note: "root" binds here
class Foo;
^~~~~~~~~

Match #2:

/home/richard/dev/build/../llvm/tools/clang/tools/extra/test/clang-tidy/readability-redundant-fwd-decl.cpp:4:1:
note: "root" binds here
class Foo;
^~~~~~~~~

Match #3:

/home/richard/dev/build/../llvm/tools/clang/tools/extra/test/clang-tidy/readability-redundant-fwd-decl.cpp:7:1:
note: "root" binds here
class Bar {
^~~~~~~~~

Match #4:

/home/richard/dev/build/../llvm/tools/clang/tools/extra/test/clang-tidy/readability-redundant-fwd-decl.cpp:12:1:
note: "root" binds here
class Bar;
^~~~~~~~~
4 matches.
clang-query></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>