Index: lib/CodeGen/CGExpr.cpp =================================================================== --- lib/CodeGen/CGExpr.cpp +++ lib/CodeGen/CGExpr.cpp @@ -575,12 +575,12 @@ } if (Checks.size() > 0) { + // Make sure we're not losing information. Alignment needs to be a power of 2 + assert(!AlignVal || (uint64_t)1 << llvm::Log2_64(AlignVal) == AlignVal); llvm::Constant *StaticData[] = { - EmitCheckSourceLocation(Loc), - EmitCheckTypeDescriptor(Ty), - llvm::ConstantInt::get(SizeTy, AlignVal), - llvm::ConstantInt::get(Int8Ty, TCK) - }; + EmitCheckSourceLocation(Loc), EmitCheckTypeDescriptor(Ty), + llvm::ConstantInt::get(Int8Ty, llvm::Log2_64(AlignVal)), + llvm::ConstantInt::get(Int8Ty, TCK)}; EmitCheck(Checks, "type_mismatch", StaticData, Ptr); }