[LLVMdev] infinitely recursive named struct types
Török Edwin
edwintorok at gmail.com
Wed Oct 5 04:58:34 PDT 2011
Hi,
Looks like it is possible to create an infinitely recursive struct type, llvm-as accepts this:
%s = type { i32, i8, %s }
define %s @foo(%s* %a) {
%y = load %s* %a
ret %s %y
}
%s2 = type { i32, %s3}
%s3 = type { i8, %s2}
declare %s3 @foo2();
Similarly it is doable via the API: create a named struct, create elements where one refers directly to the
newly created struct (instead of pointer), and then setbody.
I can't see how such a type can be useful (I created it by accident, meant to use pointer-to struct,
not struct type directly), and in fact llvm-dis crashes on bitcodes with infinetely recursive struct types.
I'd suggest that such infinetely (mutually-)recursive struct types should be rejected on creation,
at least via an assert.
FWIW llvm-as itself crashes on this:
%s = type { i32, i8, %s }
define void @foo() {
%x = alloca %s
ret void
}
Best regards,
--Edwin
More information about the llvm-dev
mailing list