<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 --- - Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"' failed."
   href="https://llvm.org/bugs/show_bug.cgi?id=22931">22931</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"' failed.
          </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>Linux
          </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>Frontend
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>rtrieu@google.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>clang: ../tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2798:
llvm::PointerUnion<Decl *, LocalInstantiationScope::DeclArgumentPack *>
*clang::LocalInstantiationScope::findInstantiationOf(const clang::Decl *):
Assertion `isa<LabelDecl>(D) && "declaration not instantiated in this scope"'
failed.

Commandline:
clang -cc1 -fsyntax-only fs.cpp

Repro:
#define THREAD_ANNOTATION_ATTRIBUTE__(x)   __attribute__((x))

#define EXCLUSIVE_LOCKS_REQUIRED(x) \
      THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(x))
#define UNLOCK_FUNCTION(x) \
      THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(x))

struct F {
  void mutex();
};

template <typename A>
class TemplateClass {
 public:
  template <typename B>
  static void Function(F* file)
      EXCLUSIVE_LOCKS_REQUIRED(file->mutex()) UNLOCK_FUNCTION(file->mutex()) {
  }
};

void test() {
  TemplateClass<int> X;
}

Backtrace:
#1 0x14bf78b SignalHandler(int) (/usr/local/bin/clang-3.5+0x14bf78b)
#2 0x7fb9b9bcf340 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x10340)
#3 0x7fb9b90fbcc9 gsignal
/build/buildd/eglibc-2.19/signal/../nptl/sysdeps/unix/sysv/linux/raise.c:56:0
#4 0x7fb9b90ff0d8 abort /build/buildd/eglibc-2.19/stdlib/abort.c:91:0
#5 0x7fb9b90f4b86 __assert_fail_base
/build/buildd/eglibc-2.19/assert/assert.c:92:0
#6 0x7fb9b90f4c32 (/lib/x86_64-linux-gnu/libc.so.6+0x2fc32)
#7 0x2427bee clang::LocalInstantiationScope::findInstantiationOf(clang::Decl
const*) (/usr/local/bin/clang-3.5+0x2427bee)
#8 0x244568b clang::Sema::FindInstantiatedDecl(clang::SourceLocation,
clang::NamedDecl*, clang::MultiLevelTemplateArgumentList const&)
(/usr/local/bin/clang-3.5+0x244568b)
#9 0x24282c4 (anonymous
namespace)::TemplateInstantiator::TransformDecl(clang::SourceLocation,
clang::Decl*) (/usr/local/bin/clang-3.5+0x24282c4)
#10 0x24376a6 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDeclRefExpr(clang::DeclRefExpr*)
(/usr/local/bin/clang-3.5+0x24376a6)
#11 0x242e96c clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformMemberExpr(clang::MemberExpr*)
(/usr/local/bin/clang-3.5+0x242e96c)
#12 0x2436b4e clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCallExpr(clang::CallExpr*)
(/usr/local/bin/clang-3.5+0x2436b4e)
#13 0x242c3d4 clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCXXMemberCallExpr(clang::CXXMemberCallExpr*)
(/usr/local/bin/clang-3.5+0x242c3d4)
#14 0x2423411 clang::Sema::SubstExpr(clang::Expr*,
clang::MultiLevelTemplateArgumentList const&)
(/usr/local/bin/clang-3.5+0x2423411)
#15 0x24435b4 clang::sema::instantiateTemplateAttribute(clang::Attr const*,
clang::ASTContext&, clang::Sema&, clang::MultiLevelTemplateArgumentList const&)
(/usr/local/bin/clang-3.5+0x24435b4)
#16 0x241fd6b clang::Sema::InstantiateClass(clang::SourceLocation,
clang::CXXRecordDecl*, clang::CXXRecordDecl*,
clang::MultiLevelTemplateArgumentList const&,
clang::TemplateSpecializationKind, bool) (/usr/local/bin/clang-3.5+0x241fd6b)
#17 0x24218fb
clang::Sema::InstantiateClassTemplateSpecialization(clang::SourceLocation,
clang::ClassTemplateSpecializationDecl*, clang::TemplateSpecializationKind,
bool) (/usr/local/bin/clang-3.5+0x24218fb)
#18 0x24855cd clang::Sema::RequireCompleteTypeImpl(clang::SourceLocation,
clang::QualType, clang::Sema::TypeDiagnoser&)
(/usr/local/bin/clang-3.5+0x24855cd)
#19 0x2485390 clang::Sema::RequireCompleteType(clang::SourceLocation,
clang::QualType, clang::Sema::TypeDiagnoser&)
(/usr/local/bin/clang-3.5+0x2485390)
#20 0x2476255 clang::Sema::RequireCompleteType(clang::SourceLocation,
clang::QualType, unsigned int) (/usr/local/bin/clang-3.5+0x2476255)
#21 0x20cc797 clang::Sema::ActOnUninitializedDecl(clang::Decl*, bool)
(/usr/local/bin/clang-3.5+0x20cc797)
#22 0x1e818ba
clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*)
(/usr/local/bin/clang-3.5+0x1e818ba)
#23 0x1e7fad6 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned
int, clang::SourceLocation*, clang::Parser::ForRangeInit*)
(/usr/local/bin/clang-3.5+0x1e7fad6)
#24 0x1e7b677 clang::Parser::ParseSimpleDeclaration(unsigned int,
clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&, bool,
clang::Parser::ForRangeInit*) (/usr/local/bin/clang-3.5+0x1e7b677)
#25 0x1e7b2e7 clang::Parser::ParseDeclaration(unsigned int,
clang::SourceLocation&, clang::Parser::ParsedAttributesWithRange&)
(/usr/local/bin/clang-3.5+0x1e7b2e7)
#26 0x1ee341f
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&)
(/usr/local/bin/clang-3.5+0x1ee341f)
#27 0x1ee251f
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*) (/usr/local/bin/clang-3.5+0x1ee251f)
#28 0x1ee9bb4 clang::Parser::ParseCompoundStatementBody(bool)
(/usr/local/bin/clang-3.5+0x1ee9bb4)
#29 0x1eea583 clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&) (/usr/local/bin/clang-3.5+0x1eea583)
#30 0x1e6e3df clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&,
clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*)
(/usr/local/bin/clang-3.5+0x1e6e3df)
#31 0x1e7f9e0 clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, unsigned
int, clang::SourceLocation*, clang::Parser::ForRangeInit*)
(/usr/local/bin/clang-3.5+0x1e7f9e0)
#32 0x1e6da26
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier)
(/usr/local/bin/clang-3.5+0x1e6da26)
#33 0x1e6d46c
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier)
(/usr/local/bin/clang-3.5+0x1e6d46c)
#34 0x1e6c645
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) (/usr/local/bin/clang-3.5+0x1e6c645)
#35 0x1e6bbd1
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
(/usr/local/bin/clang-3.5+0x1e6bbd1)
#36 0x1e67c46 clang::ParseAST(clang::Sema&, bool, bool)
(/usr/local/bin/clang-3.5+0x1e67c46)
#37 0x164ce6e clang::FrontendAction::Execute()
(/usr/local/bin/clang-3.5+0x164ce6e)
#38 0x161e68c clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/usr/local/bin/clang-3.5+0x161e68c)
#39 0x16cc0e4 clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/usr/local/bin/clang-3.5+0x16cc0e4)
#40 0x6e20b2 cc1_main(llvm::ArrayRef<char const*>, char const*, void*)
(/usr/local/bin/clang-3.5+0x6e20b2)
#41 0x6e102f main (/usr/local/bin/clang-3.5+0x6e102f)</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>