Skip to content
Snippets Groups Projects
Commit c0ad71ed authored by Chris Lattner's avatar Chris Lattner
Browse files

add a note about variable length array

llvm-svn: 22278
parent 9610c6f2
No related branches found
No related tags found
No related merge requests found
...@@ -717,6 +717,14 @@ be any type with a size.</p> ...@@ -717,6 +717,14 @@ be any type with a size.</p>
</td> </td>
</tr> </tr>
</table> </table>
<p>Note that 'variable sized arrays' can be implemented in LLVM With a zero
length array. Normally accesses past the end of an array are undefined in
LLVM (e.g. it is illegal to access the 5th element of a 3 element array).
As a special case, however, zero length arrays are recognized to be variable
length. This allows implementation of 'pascal style arrays' with the LLVM
type "{ int, [0 x float]}", for example.</p>
</div> </div>
<!-- _______________________________________________________________________ --> <!-- _______________________________________________________________________ -->
...@@ -1989,7 +1997,15 @@ the LLVM code for the given testcase is equivalent to:</p> ...@@ -1989,7 +1997,15 @@ the LLVM code for the given testcase is equivalent to:</p>
ret int* %t5 ret int* %t5
} }
</pre> </pre>
<p>Note that it is undefined to access an array out of bounds: array and
pointer indexes must always be within the defined bounds of the array type.
The one exception for this rules is zero length arrays. These arrays are
defined to be accessible as variable length arrays, which requires access
beyond the zero'th element.</p>
<h5>Example:</h5> <h5>Example:</h5>
<pre> <pre>
<i>; yields [12 x ubyte]*:aptr</i> <i>; yields [12 x ubyte]*:aptr</i>
%aptr = getelementptr {int, [12 x ubyte]}* %sptr, long 0, uint 1 %aptr = getelementptr {int, [12 x ubyte]}* %sptr, long 0, uint 1
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment