Junio C Hamano <gitster@xxxxxxxxx> writes: > Christoph Bartoschek <bartoschek@xxxxxx> writes: > >> Why is the compiler not complaining about the fake initalization? For >> initialization a value is used that is not initialized. > > That is a fairly well established idiom to tell gcc "you may mistakenly > think it isn't, but this is used". Sorry, but I was called away from the keyboard in mid sentence. It should have read "...this is used after getting assigned, so do not worry". But I need to clarify a few things about this issue. As the maintainer, I do not like a fake initialisation myself very much. It is a declaration that "left" is always assigned before getting used by the person who wrote _that particular version_, but later updates to the code might introduce a codepath to incorrectly use "left" before getting assinged to, and the fake initialisation will prevent the compiler from catching it. When the variable in question is a pointer, assigning NULL instead of "left = left" will at least give us a predictable and more reproducible breakage when later updates break the code. I wouldn't have minded if David's patch were to update both the existing fake initialisation and the new one to assign NULL. At least dereferencing such a pointer will give us a segfault reliably. But unfortunately there is no such "magic" values for variables of other types (e.g. int) to help us catch uninitialized use of variables at runtime. By the way, if a static analyser is meant to be useful for real-world programs, as opposed to merely an academic exercise, it should know this convention; like it or not, it is used fairly widely. That is, it should check "left" is assigned before used in the rest of the function without this "gcc hack" initializer, and if the only questionable use of "left" is the RHS of this fake initialisation, should refrain from warning. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html