All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] sparse, llvm: Use new LLVM type system API for structs
@ 2011-10-24 15:37 Pekka Enberg
  2011-10-24 15:37 ` [PATCH 2/2] sparse, llvm: Fix struct code generation Pekka Enberg
  0 siblings, 1 reply; 2+ messages in thread
From: Pekka Enberg @ 2011-10-24 15:37 UTC (permalink / raw)
  To: linux-sparse; +Cc: Pekka Enberg, Christopher Li, Jeff Garzik, Linus Torvalds

To fix an issue with structs that refer to themselves:

  struct symbol {
          struct symbol *next;
  };

convert the code to use new type system API introduced in LLVM 3.0 so that
there's a LLVMTypeRef of the struct we can look up while walking through the
struct members.

Cc: Christopher Li <sparse@chrisli.org>
Cc: Jeff Garzik <jgarzik@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
---
 sparse-llvm.c |   15 +++++++++++++--
 1 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/sparse-llvm.c b/sparse-llvm.c
index fc0c2e9..14744e5 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -40,15 +40,26 @@ static LLVMTypeRef sym_struct_type(struct symbol *sym)
 {
 	LLVMTypeRef elem_types[MAX_STRUCT_MEMBERS];
 	struct symbol *member;
+	char buffer[256];
+	LLVMTypeRef ret;
 	unsigned nr = 0;
 
+	sprintf(buffer, "%.*s", sym->ident->len, sym->ident->name);
+
+	ret = LLVMStructCreateNamed(LLVMGetGlobalContext(), buffer);
+
 	FOR_EACH_PTR(sym->symbol_list, member) {
+		LLVMTypeRef member_type;
+
 		assert(nr < MAX_STRUCT_MEMBERS);
 
-		elem_types[nr++] = symbol_type(member);
+		member_type = symbol_type(member);
+
+		elem_types[nr++] = member_type; 
 	} END_FOR_EACH_PTR(member);
 
-	return LLVMStructType(elem_types, nr, 0 /* packed? */);
+	LLVMStructSetBody(ret, elem_types, nr, 0 /* packed? */); 
+	return ret;
 }
 
 static LLVMTypeRef sym_ptr_type(struct symbol *sym)
-- 
1.7.6.4


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-10-24 15:37 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-24 15:37 [PATCH 1/2] sparse, llvm: Use new LLVM type system API for structs Pekka Enberg
2011-10-24 15:37 ` [PATCH 2/2] sparse, llvm: Fix struct code generation Pekka Enberg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.