This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[pph] Initialize cache_ix in all paths in pph_start_record (issue4642045)
- From: gchare at google dot com (Gabriel Charette)
- To: reply at codereview dot appspotmail dot com, crowl at google dot com, dnovillo at google dot com, gcc-patches at gcc dot gnu dot org
- Date: Fri, 17 Jun 2011 15:49:18 -0700 (PDT)
- Subject: [pph] Initialize cache_ix in all paths in pph_start_record (issue4642045)
Read the comment in the diff for all the details.
I found this while working on my current patch, adding some assertion at the
end of the function would create a new build error and moving it around in the
function would stop showing the error.
I discussed this with Collin and Jeff and it appears that the compiler
changes it's inlining decisions based on very picky details. In this particular
case, inlining the function resulted in an error.
Tested with bootstrap build and pph regression testing.
2011-06-17 Gabriel Charette <gchare@google.com>
* gcc/cp/pph-streamer-in.c (pph_start_record):
Initialize cache_ix in all paths.
diff --git a/gcc/cp/pph-streamer-in.c b/gcc/cp/pph-streamer-in.c
index b3c2ac9..186100f 100644
--- a/gcc/cp/pph-streamer-in.c
+++ b/gcc/cp/pph-streamer-in.c
@@ -204,7 +204,15 @@ pph_start_record (pph_stream *stream, unsigned *cache_ix)
if (marker == PPH_RECORD_START || marker == PPH_RECORD_SHARED)
*cache_ix = pph_in_uint (stream);
else
- gcc_assert (marker == PPH_RECORD_END);
+ {
+ gcc_assert (marker == PPH_RECORD_END);
+ /* Initialize CACHE_IX to an invalid index. Even though this
+ is never used in practice, the compiler will throw an error
+ if the optimizer inlines this function and discards the asserts
+ in a given build as it will complain that " 'ix' may be used
+ unititialized". */
+ *cache_ix = -1;
+ }
return marker;
}
--
This patch is available for review at http://codereview.appspot.com/4642045