!btf_type_is_var(size_type)))
                        return NULL;
 
-               size = btf->resolved_sizes[size_type_id];
                size_type_id = btf->resolved_ids[size_type_id];
                size_type = btf_type_by_id(btf, size_type_id);
                if (btf_type_nosize_or_null(size_type))
                        return NULL;
+               else if (btf_type_has_size(size_type))
+                       size = size_type->size;
+               else if (btf_type_is_array(size_type))
+                       size = btf->resolved_sizes[size_type_id];
+               else if (btf_type_is_ptr(size_type))
+                       size = sizeof(void *);
+               else
+                       return NULL;
        }
 
        *type_id = size_type_id;
        const struct btf_type *next_type;
        u32 next_type_id = t->type;
        struct btf *btf = env->btf;
-       u32 next_type_size = 0;
 
        next_type = btf_type_by_id(btf, next_type_id);
        if (!next_type || btf_type_is_resolve_source_only(next_type)) {
         * save us a few type-following when we use it later (e.g. in
         * pretty print).
         */
-       if (!btf_type_id_size(btf, &next_type_id, &next_type_size)) {
+       if (!btf_type_id_size(btf, &next_type_id, NULL)) {
                if (env_type_is_resolved(env, next_type_id))
                        next_type = btf_type_id_resolve(btf, &next_type_id);
 
                }
        }
 
-       env_stack_pop_resolved(env, next_type_id, next_type_size);
+       env_stack_pop_resolved(env, next_type_id, 0);
 
        return 0;
 }
        const struct btf_type *t = v->t;
        u32 next_type_id = t->type;
        struct btf *btf = env->btf;
-       u32 next_type_size;
 
        next_type = btf_type_by_id(btf, next_type_id);
        if (!next_type || btf_type_is_resolve_source_only(next_type)) {
         * forward types or similar that would resolve to size of
         * zero is allowed.
         */
-       if (!btf_type_id_size(btf, &next_type_id, &next_type_size)) {
+       if (!btf_type_id_size(btf, &next_type_id, NULL)) {
                btf_verifier_log_type(env, v->t, "Invalid type_id");
                return -EINVAL;
        }
 
-       env_stack_pop_resolved(env, next_type_id, next_type_size);
+       env_stack_pop_resolved(env, next_type_id, 0);
 
        return 0;
 }