ce->sha1, !is_null_sha1(ce->sha1),
                                               ce->name, 0);
                                continue;
-                       } else if (ce->ce_flags & CE_INTENT_TO_ADD) {
-                               diff_addremove(&revs->diffopt, '+', ce->ce_mode,
-                                              EMPTY_BLOB_SHA1_BIN, 0,
-                                              ce->name, 0);
-                               continue;
                        }
 
                        changed = match_stat_with_submodule(&revs->diffopt, ce, &st,
        struct rev_info *revs = o->unpack_data;
        int match_missing, cached;
 
-       /* i-t-a entries do not actually exist in the index */
-       if (idx && (idx->ce_flags & CE_INTENT_TO_ADD)) {
-               idx = NULL;
-               if (!tree)
-                       return; /* nothing to diff.. */
-       }
-
        /* if the entry is not checked out, don't examine work tree */
        cached = o->index_only ||
                (idx && ((idx->ce_flags & CE_VALID) || ce_skip_worktree(idx)));
        struct object_array_entry *ent;
 
        ent = revs->pending.objects;
-       if (diff_cache(revs, ent->item->sha1, ent->name, cached))
+       if (diff_cache(revs, ent->item->oid.hash, ent->name, cached))
                exit(128);
 
        diff_set_mnemonic_prefix(&revs->diffopt, "c/", cached ? "i/" : "w/");