With the following sample code:
template <class T, size_t extraSize >
struct OSS_STRUCTURE_PAD_DELTA : public T
{
char pad[ extraSize ] ;
} ;
and an ast visitor that calls getTypeSize():
bool VisitFieldDecl( FieldDecl * f )
{
RecordDecl * r = f->getParent() ;
const QualType & theMembersClassType = m_context.getRecordType( r ) ;
TypeSourceInfo * pThisFieldSourceInfo = f->getTypeSourceInfo() ;
TypeLoc thisFieldTypeLoc = pThisFieldSourceInfo->getTypeLoc() ;
const QualType & thisFieldQualType = thisFieldTypeLoc.getType() ;
size_t szInBits = m_context.getTypeSize( thisFieldQualType ) ;
size_t offsetInBits = m_context.getFieldOffset( f ) ;
cout
<< “[” << offsetInBits/8 << “]:\t”
<< theMembersClassType.getAsString( m_pp ) << “::” << thisFieldQualType.getAsString( m_pp ) << “\t” << f->getNameAsString()
<< "\tsize: " << szInBits/8 << endl ;
;
return true ;
}
I get the following abort:
t.C:5:20: error: unknown type name ‘size_t’
template <class T, size_t extraSize >
^
Should not see dependent types
UNREACHABLE executed at /home/hotellnx94/peeterj/clang/sources/llvm/tools/clang/lib/AST/ASTContext.cpp:1322!
Program received signal SIGABRT, Aborted.
0x00002aaaab39ef45 in raise () from /lib64/libc.so.6
(gdb) where
#0 0x00002aaaab39ef45 in raise () from /lib64/libc.so.6
#1 0x00002aaaab3a0340 in abort () from /lib64/libc.so.6
#2 0x0000000000f024b8 in llvm::llvm_unreachable_internal (msg=0x132c728 “Should not see dependent types”,
file=0x132bd18 “/home/hotellnx94/peeterj/clang/sources/llvm/tools/clang/lib/AST/ASTContext.cpp”, line=1322)
at /home/hotellnx94/peeterj/clang/sources/llvm/lib/Support/ErrorHandling.cpp:98
#3 0x0000000000c1c5e4 in clang::ASTContext::getTypeInfoImpl (this=0x1b36050, T=0x1b55aa0)
at /home/hotellnx94/peeterj/clang/sources/llvm/tools/clang/lib/AST/ASTContext.cpp:1322
#4 0x0000000000c1c509 in clang::ASTContext::getTypeInfo (this=0x1b36050, T=0x1b55aa0)
at /home/hotellnx94/peeterj/clang/sources/llvm/tools/clang/lib/AST/ASTContext.cpp:1301
#5 0x000000000046229d in clang::ASTContext::getTypeInfo (this=0x1b36050, T=…)
at /home/hotellnx94/peeterj/clang/debug48rt/include/clang/AST/ASTContext.h:1473
#6 0x0000000000462221 in clang::ASTContext::getTypeSize (this=0x1b36050, T=…)
at /home/hotellnx94/peeterj/clang/debug48rt/include/clang/AST/ASTContext.h:1478
#7 0x0000000000462068 in MyASTVisitor::VisitFieldDecl (this=0x7fffffffc010, f=0x1b55b00) at ./memberdumper.h:25
#8 0x0000000000461f75 in clang::RecursiveASTVisitor::WalkUpFromFieldDecl (this=0x7fffffffc010, D=0x1b55b00)
at /home/hotellnx94/peeterj/clang/debug48rt/include/clang/AST/DeclNodes.inc:313
#9 0x00000000004208bd in clang::RecursiveASTVisitor::TraverseFieldDecl (this=0x7fffffffc010, D=0x1b55b00)
at /home/hotellnx94/peeterj/clang/debug48rt/include/clang/AST/RecursiveASTVisitor.h:1665
#10 0x000000000041e0f4 in clang::RecursiveASTVisitor::TraverseDecl (this=0x7fffffffc010, D=0x1b55b00)
at /home/hotellnx94/peeterj/clang/debug48rt/include/clang/AST/DeclNodes.inc:313
#11 0x0000000000421993 in clang::RecursiveASTVisitor::TraverseDeclContextHelper (this=0x7fffffffc010, DC=0x1b3e2d8)
at /home/hotellnx94/peeterj/clang/debug48rt/include/clang/AST/RecursiveASTVisitor.h:1232
#12 0x000000000041fe5a in clang::RecursiveASTVisitor::TraverseCXXRecordDecl (this=0x7fffffffc010, D=0x1b3e2a0)
at /home/hotellnx94/peeterj/clang/debug48rt/include/clang/AST/RecursiveASTVisitor.h:1588
Is this a known problem? I’m running a recent snapshot:
Path: .
URL: http://llvm.org/svn/llvm-project/llvm/trunk
Repository Root: http://llvm.org/svn/llvm-project
Repository UUID: 91177308-0d34-0410-b5e6-96231b3b80d8
Revision: 175922
Node Kind: directory
Schedule: normal
Last Changed Author: ahatanak
Last Changed Rev: 175920
Last Changed Date: 2013-02-22 16:10:03 -0500 (Fri, 22 Feb 2013)
Properties Last Updated: 2013-02-22 16:49:48 -0500 (Fri, 22 Feb 2013)