From 18f5583c9fccbeb9c28f40a4c0eea6632d855c12 Mon Sep 17 00:00:00 2001 From: weissms Date: Mon, 12 Mar 2012 10:51:48 +0000 Subject: [PATCH] Fixed gcc >=4.6 optimization problems, see also comments in the code. git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@44396 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- tools/MetaMake/project.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tools/MetaMake/project.c b/tools/MetaMake/project.c index a042dfc61c..3240ea0669 100644 --- a/tools/MetaMake/project.c +++ b/tools/MetaMake/project.c @@ -1,5 +1,5 @@ /* MetaMake - A Make extension - Copyright © 1995-2011, The AROS Development Team. All rights reserved. + Copyright © 1995-2012, The AROS Development Team. All rights reserved. This file is part of MetaMake. @@ -137,19 +137,29 @@ readvars (struct Project * prj) /* handle prj->genmakefiledeps */ NewList(&deps); + /* algorithm has changed from: + * copying nodes to deps list and then generating dep nodes + * which will be put back to genmakefiledeps list + * to: + * generating new dep nodes and putting them into the deps list, + * then copy them back into genmakefiledeps list + * reason for change: + * in recent versions of gcc (>= 4.6) the first loop over all + * genmakefiledeps list nodes was optimized away, so deps list + * was always empty and the second loop never did anything */ ForeachNodeSafe (&prj->genmakefiledeps, node, next) { - Remove (node); - AddTail (&deps, node); + Remove (node); + dep = newdepnode (substvars (&prj->vars, node->name)); + AddTail (&deps, dep); + xfree (node->name); + xfree (node); } ForeachNodeSafe (&deps, node, next) { - Remove (node); - dep = newdepnode (substvars (&prj->vars, node->name)); - AddTail (&prj->genmakefiledeps, dep); - xfree (node->name); - xfree (node); + Remove (node); + AddTail (&prj->genmakefiledeps, node); } if (debug) -- 2.11.4.GIT