Replacing types, use of refineAbstractType

I'm working on a personal project which involves lowering a superset of LLVM to "vanilla" LLVM. Part of this involves rewriting types. I'm working off of the 2.6 code base, so this may have been addressed in a bug fix.

I'm having trouble with refineAbstractType and recursive types. Specifically, I'm creating opaque types to serve as placeholders for the final recursive type, then using refineAbstractType to replace the placeholders with the actual type. However, pointers to the opaque type aren't being replaced with pointers to the actual type, which causes errors further down the line.

For instance, if I had a type:

%t = { %t*, ... }

My pass would begin constructing a new type, say %t_1, and would replace all instances of %t with an opaque type, so...

$t_0 = opaque
%t_1 = { %t_0*, ... }

At the end, it calls t_1->refineAbstracType(t_0, t_1) to replace instances of t_0 with t_1. But the resulting type I get is still

%t_1 = { %t_0*, ... }

Is this a bug, or is it supposed to work this way, and I need to do something else to accomplish what I'm trying to accomplish?

I'm working on a personal project which involves lowering a superset of
LLVM to "vanilla" LLVM. Part of this involves rewriting types. I'm
working off of the 2.6 code base, so this may have been addressed in a bug
fix.

Hi Eric,

Make sure you read this:
http://llvm.org/docs/ProgrammersManual.html#TypeResolve

If that doesn't help, please try upgrading to mainline. If that doesn't help, we'll need a bug with some way to reproduce it.

-Chris