[PATCH] [C++] Fix read of uninitialized value in make_pack_expansion()

Patrick Palka patrick@parcs.ath.cx
Mon Dec 21 16:03:00 GMT 2015


Here we have forgotten to set the type_pack_expansion_p field of the
local variable "ppd" before handing it over to cp_walk_tree /
find_parameter_packs_r, which can then read this uninitialized field.
This error was spotted when compiling boost under valgrind.

>From what I can tell by the comments and surrounding code, the code
always expects TREE_PURPOSE (arg) to be a _TYPE, and it always expects
to build a TYPE_PACK_EXPANSION.  So I have added an appropriate assert
and set type_pack_expansion_p = true.

OK after bootstrap and regtest?

gcc/cp/ChangeLog:

	* pt.c (make_pack_expansion): Make sure to initialize
	ppd.type_pack_expansion_p.
---
 gcc/cp/pt.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 209e65f..dab15bd 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -3637,6 +3637,8 @@ make_pack_expansion (tree arg)
          class expansion.  */
       ppd.visited = new hash_set<tree>;
       ppd.parameter_packs = &parameter_packs;
+      ppd.type_pack_expansion_p = true;
+      gcc_assert (TYPE_P (TREE_PURPOSE (arg)));
       cp_walk_tree (&TREE_PURPOSE (arg), &find_parameter_packs_r, 
                     &ppd, ppd.visited);
 
-- 
2.7.0.rc0.50.g1470d8f.dirty



More information about the Gcc-patches mailing list