git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 8/4] match-trees: drop "x = x" initializations

From
Jeff King <peff@peff.net>
Date
Mar 22, 2013, 16:21 UTC
Message-ID
<20130322162155.GB25857@sigill.intra.peff.net>
In-Reply-To
<20130322161837.GG3083@sigill.intra.peff.net>

These nonsense assignments are meant to squelch gcc warnings that the variables might be used uninitialized. However, gcc gets it mostly right, realizing that we will either extract tree entries from both sides, or we will hit a "continue" statement and go to the top of the loop.

However, while getting this right for the "elem" and "path" variables, it does not do so for the "mode" variables. Let's drop the nonsense initialization where modern gcc does not need them, and just set the modes to "0", along with a comment. These values should never be used, but it makes both gcc, as well as any compiler which does not like the "x = x" initializations, happy.

While we're in the area, let's also update the loop condition to use logical-OR rather than bitwise-OR. They should be equivalent in this case, and the use of the latter was probably a typo.

Signed-off-by: Jeff King <peff@peff.net>
---
Of the 8 patches, this is the one I find the least satisfying, if only
because I do not think gcc's failure is because of complicated control
flow, and rearranging the code would only hurt readability. And I'm
quite curious why it complains about "mode", but not about the other
variables, which are set in the exact same place (and why it would not
be able to handle such a simple control flow at all).

It makes me wonder if I am missing something, or there is some subtle bug. But I can't see it. Other eyes appreciated.

 match-trees.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/match-trees.c b/match-trees.c
index 26f7ed1..4360f10 100644
--- a/match-trees.c
+++ b/match-trees.c
@@ -71,13 +71,13 @@ static int score_trees(const unsigned char *hash1, const unsigned char *hash2)
 	if (type != OBJ_TREE)
 		die("%s is not a tree", sha1_to_hex(hash2));
 	init_tree_desc(&two, two_buf, size);
-	while (one.size | two.size) {
-		const unsigned char *elem1 = elem1;
-		const unsigned char *elem2 = elem2;
-		const char *path1 = path1;
-		const char *path2 = path2;
-		unsigned mode1 = mode1;
-		unsigned mode2 = mode2;
+	while (one.size || two.size) {
+		const unsigned char *elem1;
+		const unsigned char *elem2;
+		const char *path1;
+		const char *path2;
+		unsigned mode1 = 0; /* make gcc happy */
+		unsigned mode2 = 0; /* make gcc happy */
 		int cmp;
 
 		if (one.size)
-- 
1.8.2.13.g0f18d3c
Previous: Junio C HamanoNext: Junio C Hamano
Message 32 of 42 in “drop some "int x = x" hacks to silence gcc warnings”
  1. 0/4 drop some "int x = x" hacks to silence gcc warningsJeff King, Mar 21, 2013
  2. 1/4 wt-status: fix possible use of uninitialized variableJeff King, Mar 21, 2013
  3. Jonathan NiederMar 21, 2013
  4. Junio C HamanoMar 21, 2013
  5. Jonathan NiederMar 21, 2013
  6. Jeff KingMar 22, 2013
  7. 2/4 fast-import: use pointer-to-pointer to keep list tailJeff King, Mar 21, 2013
  8. Jonathan NiederMar 21, 2013
  9. 3/4 drop some obsolete "x = x" compiler warning hacksJeff King, Mar 21, 2013
  10. Erik Faye-LundMar 21, 2013
  11. Jonathan NiederMar 21, 2013
  12. Torsten BögershausenMar 24, 2013
  13. 4/4 transport: drop "int cmp = cmp" hackJeff King, Mar 21, 2013
  14. Jonathan NiederMar 21, 2013
  15. Junio C HamanoMar 24, 2013
  16. Jeff KingMar 24, 2013
  17. Torsten BögershausenMar 24, 2013
  18. Junio C HamanoMar 25, 2013
  19. Jeff KingMar 25, 2013
  20. Junio C HamanoMar 25, 2013
  21. Johannes SixtMar 21, 2013
  22. Jeff KingMar 21, 2013
  23. Junio C HamanoMar 21, 2013
  24. Junio C HamanoMar 21, 2013
  25. Jeff KingMar 21, 2013
  26. 5/4 fast-import: clarify "inline" logic in file_change_mJeff King, Mar 21, 2013
  27. 6/4 run-command: always set failed_errno in start_commandJeff King, Mar 21, 2013
  28. Jonathan NiederMar 21, 2013
  29. Jeff KingMar 22, 2013
  30. 7/4 submodule: clarify logic in show_submodule_summaryJeff King, Mar 22, 2013
  31. Junio C HamanoMar 22, 2013
  32. 8/4 match-trees: drop "x = x" initializationsJeff King, Mar 22, 2013
  33. Junio C HamanoMar 22, 2013
  34. Junio C HamanoMar 22, 2013
  35. Jeff KingMar 22, 2013
  36. René ScharfeMar 23, 2013
  37. Junio C HamanoMar 24, 2013
  38. Jeff KingMar 24, 2013
  39. René ScharfeMar 24, 2013
  40. Junio C HamanoMar 25, 2013
  41. Joachim SchmitzMar 21, 2013
  42. Joachim SchmitzMar 21, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.