isl_basic_map_eliminate_vars: avoid NULL pointer dereference
[platform/upstream/isl.git] / isl_dim.c
index ea77233..a08f316 100644 (file)
--- a/isl_dim.c
+++ b/isl_dim.c
@@ -142,6 +142,7 @@ static unsigned offset(struct isl_dim *dim, enum isl_dim_type type)
        case isl_dim_param:     return 0;
        case isl_dim_in:        return dim->nparam;
        case isl_dim_out:       return dim->nparam + dim->n_in;
+       default:                return 0;
        }
 }
 
@@ -151,6 +152,7 @@ static unsigned n(struct isl_dim *dim, enum isl_dim_type type)
        case isl_dim_param:     return dim->nparam;
        case isl_dim_in:        return dim->n_in;
        case isl_dim_out:       return dim->n_out;
+       default:                return 0;
        }
 }
 
@@ -161,6 +163,13 @@ unsigned isl_dim_size(struct isl_dim *dim, enum isl_dim_type type)
        return n(dim, type);
 }
 
+unsigned isl_dim_offset(__isl_keep isl_dim *dim, enum isl_dim_type type)
+{
+       if (!dim)
+               return 0;
+       return offset(dim, type);
+}
+
 static struct isl_dim *copy_names(struct isl_dim *dst,
        enum isl_dim_type dst_type, unsigned offset, struct isl_dim *src,
        enum isl_dim_type src_type)
@@ -168,6 +177,9 @@ static struct isl_dim *copy_names(struct isl_dim *dst,
        int i;
        struct isl_name *name;
 
+       if (!dst)
+               return NULL;
+
        for (i = 0; i < n(src, src_type); ++i) {
                name = get_name(src, src_type, i);
                if (!name)
@@ -183,6 +195,8 @@ static struct isl_dim *copy_names(struct isl_dim *dst,
 struct isl_dim *isl_dim_dup(struct isl_dim *dim)
 {
        struct isl_dim *dup;
+       if (!dim)
+               return NULL;
        dup = isl_dim_alloc(dim->ctx, dim->nparam, dim->n_in, dim->n_out);
        if (!dim->names)
                return dup;