diff --git a/src/c.h b/src/c.h index 207aaf53..f80992a4 100755 --- a/src/c.h +++ b/src/c.h @@ -445,6 +445,7 @@ extern Tree cnsttree(Type, ...); extern Tree consttree(int, Type); extern Tree eqtree(int, Tree, Tree); extern int iscallb(Tree); +extern int isnullptr(Tree); extern Tree shtree(int, Tree, Tree); extern void typeerror(int, Tree, Tree); diff --git a/src/enode.c b/src/enode.c index 2eb451a6..5f3e0b4e 100755 --- a/src/enode.c +++ b/src/enode.c @@ -6,7 +6,6 @@ static Tree addtree(int, Tree, Tree); static Tree andtree(int, Tree, Tree); static Tree cmptree(int, Tree, Tree); static int compatible(Type, Type); -static int isnullptr(Tree e); static Tree multree(int, Tree, Tree); static Tree subtree(int, Tree, Tree); #define isvoidptr(ty) \ @@ -226,7 +225,7 @@ static int compatible(Type ty1, Type ty2) { && isptr(ty2) && !isfunc(ty2->type) && eqtype(unqual(ty1->type), unqual(ty2->type), 0); } -static int isnullptr(Tree e) { +int isnullptr(Tree e) { Type ty = unqual(e->type); return generic(e->op) == CNST diff --git a/src/expr.c b/src/expr.c index 36739fc6..9c356101 100755 --- a/src/expr.c +++ b/src/expr.c @@ -621,7 +621,7 @@ Tree cast(Tree p, Type type) { p = simplify(CVP, dst, p, NULL); else { if (isfunc(src->type) && !isfunc(dst->type) - || !isfunc(src->type) && isfunc(dst->type)) + || !isnullptr(p) && !isfunc(src->type) && isfunc(dst->type)) warning("conversion from `%t' to `%t' is compiler dependent\n", p->type, type); if (src->size != dst->size)