This fixes the problem I described in
http://gcc.gnu.org/ml/gcc-patches/2011-10/msg00376.html

The tests are now failing assembly comparisons because the elements in
these tables are emitted in different sequence in the pph and non-pph
case.  Other than that, the assembly produced is identical.

Tested on x86_64.  Committed to branch.


Diego.

cp/ChangeLog.pph

        * pt.c (reregister_specialization):  Call htab_find_slot with
        NO_INSERT.

testsuite/ChangeLog.pph

        * g++.dg/pph/x1tmplclass2.cc: Mark partially fixed.
        * g++.dg/pph/x4tmplclass2.cc: Likewise.
        * g++.dg/pph/z4tmplclass2.cc: Likewise.

diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 04e7767..2366dc9 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -1648,8 +1648,8 @@ reregister_specialization (tree spec, tree tinfo, tree 
new_spec)
   elt.args = TI_ARGS (tinfo);
   elt.spec = NULL_TREE;
 
-  slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, INSERT);
-  if (*slot)
+  slot = (spec_entry **) htab_find_slot (decl_specializations, &elt, 
NO_INSERT);
+  if (slot && *slot)
     {
       gcc_assert ((*slot)->spec == spec || (*slot)->spec == new_spec);
       gcc_assert (new_spec != NULL_TREE);
diff --git a/gcc/testsuite/g++.dg/pph/x1tmplclass2.cc 
b/gcc/testsuite/g++.dg/pph/x1tmplclass2.cc
index f04335d..a254106 100644
--- a/gcc/testsuite/g++.dg/pph/x1tmplclass2.cc
+++ b/gcc/testsuite/g++.dg/pph/x1tmplclass2.cc
@@ -1,5 +1,3 @@
-// { dg-xfail-if "BOGUS" { "*-*-*" } { "-fpph-map=pph.map" } }
-// { dg-bogus "x1tmplclass2.cc:1:0: internal compiler error: in 
pph_in_record_marker, at cp/pph-streamer.h" "" { xfail *-*-* } 0 }
-
+// pph asm xdiff 37711
 #include "x0tmplclass23.h"
 #include "a0tmplclass2_u.h"
diff --git a/gcc/testsuite/g++.dg/pph/x4tmplclass2.cc 
b/gcc/testsuite/g++.dg/pph/x4tmplclass2.cc
index 585d4c0..e605e40 100644
--- a/gcc/testsuite/g++.dg/pph/x4tmplclass2.cc
+++ b/gcc/testsuite/g++.dg/pph/x4tmplclass2.cc
@@ -1,6 +1,4 @@
-// { dg-xfail-if "BOGUS" { "*-*-*" } { "-fpph-map=pph.map" } }
-// { dg-bogus "x4tmplclass2.cc:1:0: internal compiler error: in 
pph_in_record_marker, at cp/pph-streamer.h" "" { xfail *-*-* } 0 }
-
+// pph asm xdiff 49533
 #include "x0tmplclass21.h"
 #include "x0tmplclass22.h"
 #include "a0tmplclass2_u.h"
diff --git a/gcc/testsuite/g++.dg/pph/z4tmplclass2.cc 
b/gcc/testsuite/g++.dg/pph/z4tmplclass2.cc
index 0243829..d025942 100644
--- a/gcc/testsuite/g++.dg/pph/z4tmplclass2.cc
+++ b/gcc/testsuite/g++.dg/pph/z4tmplclass2.cc
@@ -1,6 +1,4 @@
-// { dg-xfail-if "BOGUS" { "*-*-*" } { "-fpph-map=pph.map" } }
-// { dg-bogus "z4tmplclass2.cc:1:0: internal compiler error: in 
pph_in_record_marker, at cp/pph-streamer.h" "" { xfail *-*-* } 0 }
-
+// pph asm xdiff 59292
 #include "x0tmplclass23.h"
 #include "x0tmplclass24.h"
 #include "a0tmplclass2_u.h"

--
This patch is available for review at http://codereview.appspot.com/5199041

Reply via email to