diff --git a/src/parser_lyb.c b/src/parser_lyb.c
index 8a54c6e..c7a64b3 100644
--- a/src/parser_lyb.c
+++ b/src/parser_lyb.c
@@ -246,12 +246,7 @@
     uint8_t meta_buf[LYB_META_BYTES];
     LY_ARRAY_COUNT_TYPE u;
 
-    if (!lybctx->subtrees) {
-        assert(lybctx->subtree_size == 0);
-        u = 0;
-    } else {
-        u = LY_ARRAY_COUNT(lybctx->subtrees);
-    }
+    u = LY_ARRAY_COUNT(lybctx->subtrees);
     if (u == lybctx->subtree_size) {
         LY_ARRAY_CREATE_RET(lybctx->ctx, lybctx->subtrees, u + LYB_SUBTREE_STEP, LY_EMEM);
         lybctx->subtree_size = u + LYB_SUBTREE_STEP;
diff --git a/src/printer_lyb.c b/src/printer_lyb.c
index 01d35f4..3b62d27 100644
--- a/src/printer_lyb.c
+++ b/src/printer_lyb.c
@@ -325,12 +325,7 @@
 {
     LY_ARRAY_COUNT_TYPE u;
 
-    if (!lybctx->subtrees) {
-        assert(lybctx->subtree_size == 0);
-        u = 0;
-    } else {
-        u = LY_ARRAY_COUNT(lybctx->subtrees);
-    }
+    u = LY_ARRAY_COUNT(lybctx->subtrees);
     if (u == lybctx->subtree_size) {
         LY_ARRAY_CREATE_RET(lybctx->ctx, lybctx->subtrees, u + LYB_SUBTREE_STEP, LY_EMEM);
         lybctx->subtree_size = u + LYB_SUBTREE_STEP;
diff --git a/src/schema_compile.c b/src/schema_compile.c
index d2efc50..ecc1a86 100644
--- a/src/schema_compile.c
+++ b/src/schema_compile.c
@@ -439,9 +439,6 @@
 
     for (v = 0; v < recursion.count; ++v) {
         drv = recursion.objs[v];
-        if (!drv->derived) {
-            continue;
-        }
         for (u = 0; u < LY_ARRAY_COUNT(drv->derived); ++u) {
             if (ident == drv->derived[u]) {
                 LOGVAL(ctx->ctx, LY_VLOG_STR, ctx->path, LYVE_REFERENCE,
@@ -560,7 +557,7 @@
     lysc_update_path(ctx, NULL, "{identity}");
 
 restart:
-    for (u = 0, v = 0; *idents && (u < LY_ARRAY_COUNT(*idents)); ++u) {
+    for (u = 0, v = 0; u < LY_ARRAY_COUNT(*idents); ++u) {
         /* find matching parsed identity, the disabled ones are missing in the compiled array */
         while (v < LY_ARRAY_COUNT(idents_p)) {
             if (idents_p[v].name == (*idents)[u].name) {
@@ -1243,20 +1240,11 @@
 
     assert(dflt || dflts);
 
-    if (llist->dflts) {
-        /* there were already some defaults and we are adding new by deviations */
-        assert(dflts);
-        orig_count = LY_ARRAY_COUNT(llist->dflts);
-    } else {
-        orig_count = 0;
-    }
+    /* in case there were already some defaults and we are adding new by deviations */
+    orig_count = LY_ARRAY_COUNT(llist->dflts);
 
     /* allocate new items */
-    if (dflts) {
-        LY_ARRAY_CREATE_RET(ctx->ctx, llist->dflts, orig_count + LY_ARRAY_COUNT(dflts), LY_EMEM);
-    } else {
-        LY_ARRAY_CREATE_RET(ctx->ctx, llist->dflts, orig_count + 1, LY_EMEM);
-    }
+    LY_ARRAY_CREATE_RET(ctx->ctx, llist->dflts, orig_count + (dflts ? LY_ARRAY_COUNT(dflts) : 1), LY_EMEM);
 
     /* fill each new default value */
     if (dflts) {
diff --git a/src/schema_compile_node.c b/src/schema_compile_node.c
index 49c376c..53d73ec 100644
--- a/src/schema_compile_node.c
+++ b/src/schema_compile_node.c
@@ -203,7 +203,7 @@
     LY_CHECK_ERR_RET(!dup, LOGMEM(ctx), NULL);
     if (orig->parts) {
         LY_ARRAY_CREATE_GOTO(ctx, dup->parts, LY_ARRAY_COUNT(orig->parts), ret, cleanup);
-        LY_ARRAY_COUNT(dup->parts) = LY_ARRAY_COUNT(orig->parts);
+        (*((LY_ARRAY_COUNT_TYPE*)(dup->parts) - 1)) = LY_ARRAY_COUNT(orig->parts);
         memcpy(dup->parts, orig->parts, LY_ARRAY_COUNT(dup->parts) * sizeof *dup->parts);
     }
     DUP_STRING_GOTO(ctx, orig->eapptag, dup->eapptag, ret, cleanup);
diff --git a/src/schema_features.c b/src/schema_features.c
index 16ccaed..15ffed9 100644
--- a/src/schema_features.c
+++ b/src/schema_features.c
@@ -105,7 +105,7 @@
     if (!*idx) {
         /* module features */
         features = pmod->features;
-    } else if (pmod->includes && ((*idx - 1) < LY_ARRAY_COUNT(pmod->includes))) {
+    } else if ((*idx - 1) < LY_ARRAY_COUNT(pmod->includes)) {
         /* submodule features */
         features = pmod->includes[*idx - 1].submodule->features;
     } else {
@@ -647,9 +647,6 @@
 
     for (v = 0; v < recursion.count; ++v) {
         drv = recursion.objs[v];
-        if (!drv->depfeatures) {
-            continue;
-        }
         for (u = 0; u < LY_ARRAY_COUNT(drv->depfeatures); ++u) {
             if (feature == drv->depfeatures[u]) {
                 LOGVAL(ctx, LY_VLOG_NONE, NULL, LYVE_REFERENCE, "Feature \"%s\" is indirectly referenced from itself.",
diff --git a/src/tree.h b/src/tree.h
index 911addb..cc8799b 100644
--- a/src/tree.h
+++ b/src/tree.h
@@ -140,15 +140,13 @@
  */
 #define LY_ARRAY_FOR_INDEX(ARRAY, INDEX) \
     for (INDEX = 0; \
-         ARRAY && INDEX < (*((LY_ARRAY_COUNT_TYPE*)(ARRAY) - 1)); \
+         INDEX < LY_ARRAY_COUNT(ARRAY); \
          ++INDEX)
 
 /**
  * @brief Get the number of records in the ARRAY.
- *
- * Does not check if array exists!
  */
-#define LY_ARRAY_COUNT(ARRAY) (*((LY_ARRAY_COUNT_TYPE*)(ARRAY) - 1))
+#define LY_ARRAY_COUNT(ARRAY) (ARRAY ? (*((LY_ARRAY_COUNT_TYPE*)(ARRAY) - 1)) : 0)
 
 /**
  * @brief Sized-array iterator (for-loop).
diff --git a/src/tree_data.c b/src/tree_data.c
index 97cd4de..31b53b1 100644
--- a/src/tree_data.c
+++ b/src/tree_data.c
@@ -1285,6 +1285,7 @@
             options & LYD_NEW_PATH_OUTPUT ? LY_PATH_OPER_OUTPUT : LY_PATH_OPER_INPUT, LY_PATH_TARGET_MANY, LY_PREF_JSON,
             NULL, NULL, &p), cleanup);
 
+    assert(p);
     schema = p[LY_ARRAY_COUNT(p) - 1].node;
     if ((schema->nodetype == LYS_LIST) && (p[LY_ARRAY_COUNT(p) - 1].pred_type == LY_PATH_PREDTYPE_NONE) &&
             !(options & LYD_NEW_PATH_OPAQ)) {
diff --git a/src/tree_schema_helpers.c b/src/tree_schema_helpers.c
index 5fa24ba..2d645cb 100644
--- a/src/tree_schema_helpers.c
+++ b/src/tree_schema_helpers.c
@@ -109,7 +109,7 @@
     LY_ARRAY_COUNT_TYPE i, r;
     struct lysp_revision rev;
 
-    for (i = 1, r = 0; revs && i < LY_ARRAY_COUNT(revs); i++) {
+    for (i = 1, r = 0; i < LY_ARRAY_COUNT(revs); i++) {
         if (strcmp(revs[i].date, revs[r].date) > 0) {
             r = i;
         }
