Hi Jeff, Pekka, On Sun, Aug 19, 2012 at 01:21:23PM -0400, Jeff Garzik wrote: > Here is a testcase that should get into the mailing list archives... > > Jeff > > > > > -------- Original Message -------- > Subject: [problem] sparse llvm loop conditions > Date: Wed, 23 Nov 2011 08:56:25 +0200 > From: Pekka Enberg <penberg@xxxxxxxxxx> > To: Jeff Garzik <jeff@xxxxxxxxxx> > > Hi Jeff, > > Have you seen this already? > > [penberg@tux sparse]$ cat loop.c > struct list_node { > struct list_node *next; > }; > > int foo(struct list_node *node) > { > int ret = 0; > while (node) { > node = node->next; > ret++; > } > return ret; > } > [penberg@tux sparse]$ ./sparse-llvm loop.c > loop.c:5:5: warning: symbol 'foo' was not declared. Should it be static? > sparse-llvm: Instructions.cpp:730: void llvm::BranchInst::AssertOK(): > Assertion `getCondition()->getType()->isIntegerTy(1) && "May only > branch on boolean predicates!"' failed. > Aborted > > Pekka With my patchset of today, sparse-llvm compiles this code. It turned out that struct accesses didn't work, because the address computed for load/store instructions didn't have the right LLVM type. [ On a side note, array access doesn't work yet. ] regards, Jonathan -- To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html