On Sat, Mar 11, 2017 at 11:54:56AM +0000, Dibyendu Majumdar wrote: > PSEUDO_VAL strikes again! > > struct avl_node { > struct avl_node *right; > struct avl_node *left; > }; > #define NULL ((void *)0) > static int test_null_comp(int height_changed, struct avl_node *node) { > return node != NULL && height_changed; > } See the message of "llvm: fix translation of PSEUDO_VALs into a ValueRefs" Note: while this patch improve the situation, like for example for the test cases added here, it's still not correct because now we're making the assumption that 'insn->type' is the type we need for the pseudo. This is often true, but certainly not always. For example this is not true for: - OP_STORE/OP_LOAD's insn->src - OP_SET{EQ,...}'s insn->src[12] - probably some others ones - in general, obviously, for any instructions where the target has a different type than the operands. Here you're hitting the OP_SET{EQ,...} case. -- Luc -- 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