<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 `!T->isDependentType() && "should not see dependent types here"' failed."
   href="https://llvm.org/bugs/show_bug.cgi?id=30538">30538</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Assertion `!T->isDependentType() && "should not see dependent types here"' failed.
          </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>Windows NT
          </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>C++
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>mcrosier@codeaurora.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>dgregor@apple.com, llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>CReduced test case:

template <class, unsigned, unsigned> class BF32;
template <template <class, unsigned M, unsigned = M> class BF>
class CRBase {
  enum { BIT };
  BF<bool, BIT> Bit;
};
CRBase<BF32> CR;

Compile with: clang -O3 test.cpp

Should result in the below assertion failure.  However, gcc will report an
error and exit gracefully.

Clang assertion and back trace:

TemplateSpecializationType 0x6a5f1c0 'BF32<_Bool, BIT, BIT>' dependent BF32
|-TemplateArgument type '_Bool'
|-TemplateArgument expr
| `-ImplicitCastExpr 0x6a5f0a8 'unsigned int' <IntegralCast>
|   `-DeclRefExpr 0x6a5f080 'enum CRBase<BF32>::(anonymous at test.cpp:4:3)'
EnumConstant 0x6a5f010 'BIT' 'enum CRBase<BF32>::(anonymous at test.cpp:4:3)'
`-TemplateArgument expr
  `-SubstNonTypeTemplateParmExpr 0x6a37678 'enum CRBase::(anonymous at
test.cpp:4:3)'
    `-DeclRefExpr 0x6a37650 'enum CRBase::(anonymous at test.cpp:4:3)'
EnumConstant 0x6a375f0 'BIT' 'enum CRBase::(anonymous at test.cpp:4:3)'
clang-3.9:
/local/mnt/workspace/mrosier/llvm-community/llvm/tools/clang/include/clang/AST/TypeNodes.def:98:
clang::TypeInfo clang::ASTContext::getTypeInfoImpl(const clang::Type *) const:
Assertion `!T->isDependentType() && "should not see dependent types here"'
failed.
#0 0x0000000001a1e908 llvm::sys::PrintStackTrace(llvm::raw_ostream&)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1a1e908)
#1 0x0000000001a1f4e6 SignalHandler(int)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1a1f4e6)
#2 0x00007fd81d89dcb0 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0xfcb0)
#3 0x00007fd81c427035 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x36035)
#4 0x00007fd81c42a79b abort (/lib/x86_64-linux-gnu/libc.so.6+0x3979b)
#5 0x00007fd81c41fe1e (/lib/x86_64-linux-gnu/libc.so.6+0x2ee1e)
#6 0x00007fd81c41fec2 (/lib/x86_64-linux-gnu/libc.so.6+0x2eec2)
#7 0x000000000309aced clang::ASTContext::getTypeInfoImpl(clang::Type const*)
const
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x309aced)
#8 0x0000000003099e7b clang::ASTContext::getTypeInfo(clang::Type const*) const
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x3099e7b)
#9 0x0000000003099c1c clang::ASTContext::getTypeInfoInChars(clang::Type const*)
const
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x3099c1c)
#10 0x000000000324c5f9 (anonymous
namespace)::ItaniumRecordLayoutBuilder::LayoutField(clang::FieldDecl const*,
bool)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x324c5f9)
#11 0x000000000324f410 (anonymous
namespace)::ItaniumRecordLayoutBuilder::LayoutFields(clang::RecordDecl const*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x324f410)
#12 0x00000000032455b0 clang::ASTContext::getASTRecordLayout(clang::RecordDecl
const*) const
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x32455b0)
#13 0x0000000001bc0769
clang::CodeGen::CodeGenTypes::ComputeRecordLayout(clang::RecordDecl const*,
llvm::StructType*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1bc0769)
#14 0x0000000001c63833
clang::CodeGen::CodeGenTypes::ConvertRecordDeclType(clang::RecordDecl const*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1c63833)
#15 0x0000000001c6469c
clang::CodeGen::CodeGenTypes::getCGRecordLayout(clang::RecordDecl const*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1c6469c)
#16 0x0000000001c64854
clang::CodeGen::CodeGenTypes::isZeroInitializable(clang::QualType)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1c64854)
#17 0x0000000001bb4a63
clang::CodeGen::CodeGenModule::EmitNullConstant(clang::QualType)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1bb4a63)
#18 0x0000000001c17529
clang::CodeGen::CodeGenModule::EmitGlobalVarDefinition(clang::VarDecl const*,
bool)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1c17529)
#19 0x0000000001c123fb
clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl,
llvm::GlobalValue*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1c123fb)
#20 0x0000000001c18dc1
clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1c18dc1)
#21 0x0000000002242c20 (anonymous
namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x2242c20)
#22 0x0000000002241d7c
clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x2241d7c)
#23 0x00000000026a1254 clang::ParseAST(clang::Sema&, bool, bool)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x26a1254)
#24 0x0000000001f24f25 clang::FrontendAction::Execute()
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1f24f25)
#25 0x0000000001eed7b1
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1eed7b1)
#26 0x0000000001fa921a
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x1fa921a)
#27 0x00000000007cd4a1 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*)
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x7cd4a1)
#28 0x00000000007cc02b main
(/local/mnt/workspace/mrosier/llvm-community/install/bin/clang-3.9+0x7cc02b)
#29 0x00007fd81c4127ed __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x217ed)


GCC error:
test.cpp: In instantiation of ‘class CRBase<BF32>’:
test.cpp:7:14:   required from here
test.cpp:5:17: error: ‘CRBase<BF>::Bit’ has incomplete type
   BF<bool, BIT> Bit;
                 ^~~
test.cpp:1:44: note: declaration of ‘class BF32<bool, 0u, 0u>’
 template <class, unsigned, unsigned> class BF32;
                                            ^~~~</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>