Index: include/llvm/IR/DerivedTypes.h =================================================================== --- include/llvm/IR/DerivedTypes.h +++ include/llvm/IR/DerivedTypes.h @@ -46,9 +46,10 @@ /// This enum is just used to hold constants we need for IntegerType. enum { MIN_INT_BITS = 1, ///< Minimum number of bits that can be specified - MAX_INT_BITS = (1<<23)-1 ///< Maximum number of bits that can be specified + MAX_INT_BITS = (1<<24)-1 ///< Maximum number of bits that can be specified ///< Note that bit width is stored in the Type classes SubclassData field - ///< which has 23 bits. This yields a maximum bit width of 8,388,607 bits. + ///< which has 24 bits. This yields a maximum bit width of 16,777,215 + ///< bits. }; /// This static method is the primary way of constructing an IntegerType. Index: include/llvm/IR/Type.h =================================================================== --- include/llvm/IR/Type.h +++ include/llvm/IR/Type.h @@ -81,6 +81,8 @@ TypeID ID : 8; // The current base type of this type. unsigned SubclassData : 24; // Space for subclasses to store data. + // Note that this should be synchronized with + // MAX_INT_BITS value in IntegerType class. protected: friend class LLVMContextImpl; Index: test/Assembler/invalid-inttype.ll =================================================================== --- test/Assembler/invalid-inttype.ll +++ test/Assembler/invalid-inttype.ll @@ -0,0 +1,5 @@ +; RUN: not llvm-as < %s 2>&1 | FileCheck %s + +; i16777216 is the smallest integer type that can't be represented in LLVM IR +@i2 = common global i16777216 0, align 4 +; CHECK: expected type Index: test/Assembler/max-inttype.ll =================================================================== --- test/Assembler/max-inttype.ll +++ test/Assembler/max-inttype.ll @@ -0,0 +1,4 @@ +; RUN: llvm-as < %s | llvm-dis + +; i16777215 is the maximum integer type represented in LLVM IR +@i2 = common global i16777215 0, align 4