From 1c6f87d665502fb4481435970eacafb59c200ce0 Mon Sep 17 00:00:00 2001
From: Reid Spencer it is natural to think that there is only one index, the constant value
1. This results from C allowing you to treat pointers and arrays as
equivalent. LLVM doesn't. In this example, Foo is a pointer. That pointer must
be indexed. To arrive at the same address location as the C code, you would
provide the GEP instruction with two indices. The first indexes through the
- pointer, the second index the second element of the array.
AType* Foo;
...
- X = Foo[1];
+ X = &Foo->F;
+ X = &Foo[0].F;
Sometimes this question gets rephrased as:
Why is it okay to index through the first pointer, but subsequent pointers won't be dereferenced?
The answer is simply because memory does not have to be accessed to perform the computation. The first operand to the GEP instruction must be a value of a pointer type. The value of the pointer is provided directly to - the GEP instruction without any need for accessing memory. It must, - therefore be indexed like any other operand. Consider this example:
+ the GEP instruction as an operand without any need for accessing memory. It + must, therefore be indexed and requires an index operand. Consider this + example:struct munger_struct { int f1; -- 2.34.1