user1723583
user1723583

Reputation: 573

invalid getelementptr indices

I'm getting "invalid getelementptr indices" on the last line of this llvm-IR code:

%alc = alloca %mytype*
store %mytype* %obj, %mytype** %alc
%ldc = load %mytype** %alc
%gcs = getelementptr inbounds %mytype* %ldc, i32 0, i32 1

where mytype is defined as follows:

%mytype = type {i32, %tp1**, %tp1}

I have another similar type that indexing over it doesn't cause the above error and is defined as:

%mytype2 = type {i32, i16*, %tp1}

Any help to resolve this problem would be appreciated.

Upvotes: 1

Views: 1367

Answers (1)

Oak
Oak

Reputation: 26868

The error is caused because %mytype does not define a valid type. Normally LLVM reports an error on the type itself, but if the type definition appears later than a getelementptr (GEP) usage, then you only get an error from the GEP and not from the type.

If you move the definition of %mytype to appear before the GEP in the IR file you'll see a more appropriate error message.

In this case, I'm guessing the problem is that %mytype is incomplete - either the definition for %tp1 is missing, or the definition to a type it uses (e.g. %tp2, which I see in your comment that it uses) is missing, or something like that.

By the way, you might want to use my IR editor, it would help you quickly find these sorts of errors.

Upvotes: 1

Related Questions