[LLVMbugs] [Bug 18169] New: [-cxx-abi microsoft] Layout calculation leads to assertion failure

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Sat Dec 7 01:42:22 PST 2013


http://llvm.org/bugs/show_bug.cgi?id=18169

            Bug ID: 18169
           Summary: [-cxx-abi microsoft] Layout calculation leads to
                    assertion failure
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangbugs at nondot.org
          Reporter: david.majnemer at gmail.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

consider:
#if defined(__clang__) || defined(__GNUC__)
typedef __SIZE_TYPE__ size_t;
#endif
static char buffer[419430400];
inline void *operator new(size_t, void *pv) {}
struct ClassName0 {};
struct ClassName1 : public ClassName0 {};
struct ClassName2 : public virtual ClassName0 {};
struct ClassName3 : public ClassName1, public virtual ClassName2 {
  char : 9;
  bool ClassName3FieldName2;
};
static void test_layout(const char *class_name, size_t size_of_class,
                        size_t align_of_class) {}
template <typename Class>
static void init_mem() {
  new (buffer) Class;
}
#define test(Class) \
  init_mem<Class>(), test_layout(#Class, sizeof(Class), __alignof(Class))
int main() { test(ClassName3); }

leads to:
different.cpp:34:2: warning: size of anonymous bit-field (9 bits) exceeds size
of its type; value will be truncated to 8 bits
        char : 9;
        ^
clang: ~/llvm/src/tools/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp:348: bool
{anonymous}::CGRecordLayoutBuilder::LayoutBitfields(const
clang::ASTRecordLayout&, unsigned int&, clang::RecordDecl::field_iterator&,
clang::RecordDecl::field_iterator): Assertion `EndOffset >= (FirstFieldOffset +
TotalBits) && "End offset is not past the end of the known storage bits."'
failed.
0  clang           0x0000000001e7e937 llvm::sys::PrintStackTrace(_IO_FILE*) +
38
1  clang           0x0000000001e7ebbe
2  clang           0x0000000001e7e602
3  libpthread.so.0 0x00007f39b5f08cb0
4  libc.so.6       0x00007f39b535d425 gsignal + 53
5  libc.so.6       0x00007f39b5360b8b abort + 379
6  libc.so.6       0x00007f39b53560ee
7  libc.so.6       0x00007f39b5356192
8  clang           0x0000000001efc34f
9  clang           0x0000000001efdc6a
10 clang           0x0000000001efbbe2
11 clang           0x0000000001efe630
clang::CodeGen::CodeGenTypes::ComputeRecordLayout(clang::RecordDecl const*,
llvm::StructType*) + 98
12 clang           0x0000000001f8fa5d
clang::CodeGen::CodeGenTypes::ConvertRecordDeclType(clang::RecordDecl const*) +
589
13 clang           0x0000000001f8e850
clang::CodeGen::CodeGenTypes::ConvertType(clang::QualType) + 176
14 clang           0x0000000001f8e022
clang::CodeGen::CodeGenTypes::ConvertTypeForMem(clang::QualType) + 36
15 clang           0x0000000001f208bf
clang::CodeGen::CodeGenFunction::ConvertTypeForMem(clang::QualType) + 47
16 clang           0x0000000002045af5
clang::CodeGen::CodeGenFunction::EmitCXXNewExpr(clang::CXXNewExpr const*) +
1913
17 clang           0x000000000204af8a
18 clang           0x000000000205ad69
19 clang           0x0000000002049fcf
20 clang           0x0000000002059c77
clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) + 159
21 clang           0x0000000002013635
clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*,
clang::CodeGen::AggValueSlot, bool) + 101
22 clang           0x0000000002013585
clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) + 127
23 clang           0x0000000001f07712
clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*) + 400
24 clang           0x0000000001f07db9
clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt
const&, bool, clang::CodeGen::AggValueSlot) + 109
25 clang           0x0000000001f2318f
clang::CodeGen::CodeGenFunction::EmitFunctionBody(clang::CodeGen::FunctionArgList&,
clang::Stmt const*) + 113
26 clang           0x0000000001f238c3
clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl,
llvm::Function*, clang::CodeGen::CGFunctionInfo const&) + 1347
27 clang           0x0000000001f357df
clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl)
+ 1051
28 clang           0x0000000001f32c7d
clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl) + 395
29 clang           0x0000000001f316e9
clang::CodeGen::CodeGenModule::EmitDeferred() + 341
30 clang           0x0000000001f2e6c9 clang::CodeGen::CodeGenModule::Release()
+ 25
31 clang           0x0000000001eb88bd
32 clang           0x0000000001eb7527
33 clang           0x0000000002292140 clang::ParseAST(clang::Sema&, bool, bool)
+ 776
34 clang           0x0000000002189c9b clang::ASTFrontendAction::ExecuteAction()
+ 321
35 clang           0x0000000001eb643c clang::CodeGenAction::ExecuteAction() +
1414
36 clang           0x00000000021897da clang::FrontendAction::Execute() + 200
37 clang           0x0000000002161e6c
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 720
38 clang           0x0000000001e85116
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 1018
39 clang           0x0000000000d0f283 cc1_main(char const**, char const**, char
const*, void*) + 717

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20131207/51c6c174/attachment.html>


More information about the llvm-bugs mailing list