<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 - c11: Accepts invalid program with incomplete type in generic-association."
   href="https://bugs.llvm.org/show_bug.cgi?id=40210">40210</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>c11: Accepts invalid program with incomplete type in generic-association.
          </td>
        </tr>

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

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

        <tr>
          <th>Hardware</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

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

        <tr>
          <th>Severity</th>
          <td>normal
          </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>anders.granlund.0@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org, neeilans@live.com, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Test case (prog.c):

  int main()
  {
    _Generic(0, struct S: 1, default: (struct S { int x; }) { 0 } );
  }

Compilation command line:

  clang prog.c -Wall -Wextra -std=c11 -pedantic-errors

Observed behaviour:

  No error messages outputed.

Expected behaviour:

  An error message outputed.

  The type specified by the type-name in the generic-association  struct S: 1
  is not complete yet. It is only completet much later.

  The c standard is not very clear about at what point in the program a type
  needs to be complete when it is used in a context where it is required to be
  complete, but the completion is probably too late here (not complete by the 
  end of the type name, not even by the end of the generic-association).

Note:

  GCC gives the expected error message.

  There are alot of other similar differences between GCC and Clang about
  exactly at what point a type needs to be complete. Clang seems to allow the
  completion of a type much later than GCC.</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>