<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>
<div>Hi,</div><div><br></div><div>I was playing with the Constant::getAllOnesValue() method and found that it doesn't handles</div><div>PointerTypes correctly. When receiving a "i32*" argument, it was returning with </div><div>some big integer vector, such as <12113216 x i32>.</div><div><br></div><div>When you call this method passing a PointerType, the following code is executed:</div><div><br></div><div>00152   VectorType *VTy = cast<VectorType>(Ty);</div><div>00153   return ConstantVector::getSplat(VTy->getNumElements(),</div><div>00154                                   getAllOnesValue(VTy->getElementType()</div><div><br></div><div>When VTy->getNumElements() is called, it returns the value of the instance variable NumElements</div><div>present in VectorType objects, but we passed in a PointerType (SequentialType), which doesn't have</div><div>this variable but have at the same position one variable representing the type of the pointed thing.</div><div><br></div><div>00309 class SequentialType : public CompositeType {</div><div>00310   Type *ContainedType; </div><div><br></div><div>So getNumElements() will return some part of the value of ContainedType (an address), which</div><div>explains that big integer vectors.</div><div><br></div><div>Do you think this is an expected behaviour or a bug?</div><div><br></div><div>Regards,</div><div>Gabriel</div><div><br></div>                                       </div></body>
</html>