<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 - "visibility does not match previous declaration" error could be more useful"
   href="https://bugs.llvm.org/show_bug.cgi?id=33871">33871</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>"visibility does not match previous declaration" error could be more useful
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>5.0
          </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>enhancement
          </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>mh+llvm@glandium.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Reduced testcase:

  #pragma GCC visibility push(hidden)

  class Foo;

  class __attribute__((visibility("default"))) Foo {
  };


Compiling the above fails with:

  test.cc:5:22: error: visibility does not match previous declaration
  class __attribute__((visibility("default"))) Foo {
                     ^
  test.cc:1:13: note: previous attribute is here
  #pragma GCC visibility push(hidden)

While technically entirely accurate, in real cases, the #pragma is not
necessarily close to the forward declaration, and it's really not obvious
what's wrong, and can lead to some unnecessary hair pulling.

The error message should mention the forward declaration somehow.</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>