VMCore: add assert for miscompile
authorDylan Noblesmith <nobled@dreamwidth.org>
Sat, 31 Dec 2011 13:58:58 +0000 (13:58 +0000)
committerDylan Noblesmith <nobled@dreamwidth.org>
Sat, 31 Dec 2011 13:58:58 +0000 (13:58 +0000)
See PR11652. Trying to add this assert to
setSubclassData() itself actually prevented
the miscompile entirely, so it has to be here.

This makes the source of the bug more obvious
than the other asserts triggering later on did.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147390 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Type.cpp

index f4fad667a13cdb42d7572819e1abf26d929ac63c..d19dc06caa16f3189c9fd7977f55f3dd5e7b1ade 100644 (file)
@@ -707,7 +707,12 @@ PointerType *PointerType::get(Type *EltTy, unsigned AddressSpace) {
 
 PointerType::PointerType(Type *E, unsigned AddrSpace)
   : SequentialType(PointerTyID, E) {
+#ifndef NDEBUG
+  const unsigned oldNCT = NumContainedTys;
+#endif
   setSubclassData(AddrSpace);
+  // Check for miscompile. PR11652.
+  assert(oldNCT == NumContainedTys && "bitfield written out of bounds?");
 }
 
 PointerType *Type::getPointerTo(unsigned addrs) {