[LLVMdev] (GEP) Index validity

Matthijs Kooijman matthijs at stdin.nl
Thu Jul 10 03:47:03 PDT 2008


Hi all,

any comments about this patch? I'd like to get it out of my working copy :-)

Gr.

Matthijs

> Index: lib/VMCore/Type.cpp
> ===================================================================
> --- lib/VMCore/Type.cpp	(revision 53136)
> +++ lib/VMCore/Type.cpp	(working copy)
> @@ -394,9 +394,8 @@
>  
>  bool StructType::indexValid(const Value *V) const {
>    // Structure indexes require 32-bit integer constants.
> -  if (V->getType() == Type::Int32Ty)
> -    if (const ConstantInt *CU = dyn_cast<ConstantInt>(V))
> -      return indexValid(CU->getZExtValue());
> +  if (const ConstantInt *CU = dyn_cast<ConstantInt>(V))
> +    return indexValid(CU->getZExtValue());
>    return false;
>  }
>  
> @@ -1530,9 +1529,8 @@
>  }
>  
>  bool SequentialType::indexValid(const Value *V) const {
> -  if (const IntegerType *IT = dyn_cast<IntegerType>(V->getType())) 
> -    return IT->getBitWidth() == 32 || IT->getBitWidth() == 64;
> -  return false;
> +  // Any integer value is allowed
> +  return V->getType()->isInteger();
>  }
>  
>  namespace llvm {
> Index: lib/Target/TargetData.cpp
> ===================================================================
> --- lib/Target/TargetData.cpp	(revision 53136)
> +++ lib/Target/TargetData.cpp	(working copy)
> @@ -553,8 +553,7 @@
>      TI = gep_type_begin(ptrTy, Indices, Indices+NumIndices);
>    for (unsigned CurIDX = 0; CurIDX != NumIndices; ++CurIDX, ++TI) {
>      if (const StructType *STy = dyn_cast<StructType>(*TI)) {
> -      assert(Indices[CurIDX]->getType() == Type::Int32Ty &&
> -             "Illegal struct idx");
> +      assert(isa<ConstantInt>(Indices[CurIDX]) && "Illegal struct idx");
>        unsigned FieldNo = cast<ConstantInt>(Indices[CurIDX])->getZExtValue();
>  
>        // Get structure layout information...
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080710/b7db6765/attachment.sig>


More information about the llvm-dev mailing list