All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pekka Enberg <penberg@kernel.org>
To: linux-sparse@vger.kernel.org
Cc: Pekka Enberg <penberg@kernel.org>,
	Christopher Li <sparse@chrisli.org>,
	Jeff Garzik <jgarzik@redhat.com>,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: [PATCH 1/2] sparse, llvm: Use new LLVM type system API for structs
Date: Mon, 24 Oct 2011 18:37:21 +0300	[thread overview]
Message-ID: <1319470642-21031-1-git-send-email-penberg@kernel.org> (raw)

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


             reply	other threads:[~2011-10-24 15:37 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-24 15:37 Pekka Enberg [this message]
2011-10-24 15:37 ` [PATCH 2/2] sparse, llvm: Fix struct code generation Pekka Enberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1319470642-21031-1-git-send-email-penberg@kernel.org \
    --to=penberg@kernel.org \
    --cc=jgarzik@redhat.com \
    --cc=linux-sparse@vger.kernel.org \
    --cc=sparse@chrisli.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.