Eric Wong <e@xxxxxxxxx> writes: > "struct hashmap_entry" inside "struct subprocess_entry" > no longer needs to be the first member of any struct, > so the old comment is no longer true. Hmm, is that true? struct cmd2process { struct subprocess_entry subprocess; unsigned int supported_capabilities; }; static int start_multi_file_filter_fn(struct subprocess_entry *subprocess) { static int versions[] = {2, 0}; static struct subprocess_capability capabilities[] = { { "clean", CAP_CLEAN }, { "smudge", CAP_SMUDGE }, { "delay", CAP_DELAY }, { NULL, 0 } }; struct cmd2process *entry = (struct cmd2process *)subprocess; return subprocess_handshake(subprocess, "git-filter", versions, NULL, capabilities, &entry->supported_capabilities); } The cast "struct subprocess_entry *" to "struct cmd2process *" we see here does require that the address of the subprocess field must be the same as the address of the structure itself. So I'd have to say that the comment still is true, but not for the reasons of what is in "struct subprocess_entry".