<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 - Valid Template Instantiation triggers assertion failure when Clang/LLVM built with ASSERTs enabled, but does not fail without assertion"
   href="https://bugs.llvm.org/show_bug.cgi?id=45740">45740</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Valid Template Instantiation triggers assertion failure when Clang/LLVM built with ASSERTs enabled, but does not fail without assertion
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>10.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>C++17
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>nicholas@untether.ai
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>When Clang and LLVM (version 10.0.0 for both) are compiled from source with
'Release' build and assertions are enabled, the following code:

template <const int& x>
void g() {
    x;
}
template <int>
void f() {
    static constexpr int x = 0;
    g<x>();
}
int main() {
    f<0>();
    return 0;
}

will error out with:

clang++ -std=c++17 template.cpp 

OR

clang++ -std=c++2a template.cpp 

producing:

clang-10:
/xxxxx/llvm-project-llvmorg-10.0.0/clang/lib/Sema/SemaTemplateInstantiate.cpp:3527:
llvm::PointerUnion<clang::Decl*, llvm::SmallVector<clang::VarDecl*, 4>*>*
clang::LocalInstantiationScope::findInstantiationOf(const clang::Decl*):
Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"'
failed.

However, if Clang and LLVM are compiled for RELEASE and assertions are turned
off, the code snippet passes through.

This also affects Clang and LLVM (trunk).</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>