On 28 February 2017 at 17:35, Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> wrote: > Not very pretty and incomplete but the following patch allow sparse-llvm > to compile this: > struct mytype { > int *foo; > }; > > extern void init_mytype(struct mytype *mt); > void init_mytype(struct mytype *mt) > { > mt->foo = (int *)mt; > mt->foo = (void *)mt; > mt->foo = (int *)0; > mt->foo = (void *)0; > mt->foo = (void *)(long)0; > } > > It fail at " ... = (... *)1;" though. > > > + type = insn_symbol_type(fn->module, insn); > + switch (LLVMGetTypeKind(type)) { > + case LLVMPointerTypeKind: > + assert(!pseudo->value); > + result = LLVMConstPointerNull(type); > + break; > + case LLVMIntegerTypeKind: > + result = LLVMConstInt(type, pseudo->value, 1); > + break; > + default: > + assert(0); > + } Following modified version should handle values than 0. LLVMTypeRef type = insn_symbol_type(fn->module, insn); switch (LLVMGetTypeKind(type)) { case LLVMPointerTypeKind: if (pseudo->value == 0) result = LLVMConstPointerNull(type); else result = LLVMConstIntToPtr(LLVMConstInt(LLVMIntType(bits_in_pointer), pseudo->value, 1), type); break; case LLVMIntegerTypeKind: result = LLVMConstInt(type, pseudo->value, 1); break; default: assert(0); } Regards Dibyendu -- 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