Hi! This patch fixes an inconsistency that manifests like this:<div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div>typedef float float3 __attribute__((ext_vector_type(3)));</div>

<div><br></div><div>struct Foo {</div><div>  float3 x;</div><div>  float3 y;</div><div>};</div><div><br></div><div>struct Foo foo = { {0, 0, 0}, {1, 2, 3} };</div></blockquote><div><br></div><div>This lowers to a struct with <3 x float>, which TargetData says is 16 bytes on ARM. In LLVM IR, the first element becomes a constant aggregate zero, which is emitted by looking at how many bytes it is (sixteen) and writing out a zero-fill. The second element is emitted as three contiguous elements, resulting in a total of 12 bytes.</div>

<div><br></div><div>The StructLayout object claims that each of those should be 16 bytes, so I changed the AsmPrinter in CodeGen to apply padding to the end of an array to match what TargetData thinks the length of the array is. Patch attached, please review!</div>

<div><br></div><div>Nick</div><div><br></div>