[pph] Update Tests (issue4636066)

Lawrence Crowl crowl@google.com
Tue Jun 28 02:49:00 GMT 2011


Add missing mappings in pph.map.  These new mappings result in changes
to assembly difference expectations.

Remove namespace issues from x1template test.  Copy that test to a new
test x1namespace.

Add a new test x1dynarray, which is executable, when existing failures
get fixed.


Index: gcc/testsuite/ChangeLog.pph

2011-06-27  Lawrence Crowl  <crowl@google.com>

	* g++.dg/pph/pph.map: Add missing PPH mappings.
	* g++.dg/pph/c1funcstatic.cc: Add expected asm diff.
	* g++.dg/pph/c1eabi1.cc: Add xfail-if; remove expected asm diff.
	* g++.dg/pph/c2builtin2.cc: Add expected asm diff.
	* g++.dg/pph/x1funcstatic.cc: Add expected asm diff.
	* g++.dg/pph/x1template.h: Remove use of namespace.
	* g++.dg/pph/x1template.cc: Remove use of namespace; now passing.
	* g++.dg/pph/x1namespace.h: New, copy of old x1template.h.
	* g++.dg/pph/x1namespace.cc: New, copy of old x1template.cc.
	* g++.dg/pph/x1dynarray1.h: New executable program, but it fails.
	* g++.dg/pph/x1dynarray1.cc: New executable program, but it fails.


Index: gcc/testsuite/g++.dg/pph/c1funcstatic.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/c1funcstatic.cc	(revision 175566)
+++ gcc/testsuite/g++.dg/pph/c1funcstatic.cc	(working copy)
@@ -1,2 +1,3 @@
+// pph asm xdiff
 #include "c1funcstatic.h"
 int g() { return f(); }
Index: gcc/testsuite/g++.dg/pph/x1namespace.h
===================================================================
--- gcc/testsuite/g++.dg/pph/x1namespace.h	(revision 0)
+++ gcc/testsuite/g++.dg/pph/x1namespace.h	(revision 0)
@@ -0,0 +1,22 @@
+#ifndef X1NAMESPACE_H
+#define X1NAMESPACE_H
+namespace A {
+extern int x;
+struct B;
+template< typename T >
+struct C {
+    T* b;
+    int method();
+    int another()
+    { return *b; }
+};
+template< typename T >
+int C< T >::method()
+{ return x; }
+} // namespace A
+struct D : A::C< int > {
+    int method();
+    int another()
+    { return *b; }
+};
+#endif
Index: gcc/testsuite/g++.dg/pph/x1template.h
===================================================================
--- gcc/testsuite/g++.dg/pph/x1template.h	(revision 175566)
+++ gcc/testsuite/g++.dg/pph/x1template.h	(working copy)
@@ -1,6 +1,5 @@
 #ifndef X1TEMPLATE_H
 #define X1TEMPLATE_H
-namespace A {
 extern int x;
 struct B;
 template< typename T >
@@ -13,8 +12,7 @@ struct C {
 template< typename T >
 int C< T >::method()
 { return x; }
-} // namespace A
-struct D : A::C< int > {
+struct D : C< int > {
     int method();
     int another()
     { return *b; }
Index: gcc/testsuite/g++.dg/pph/c1eabi1.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/c1eabi1.cc	(revision 175566)
+++ gcc/testsuite/g++.dg/pph/c1eabi1.cc	(working copy)
@@ -1,5 +1,5 @@
 // { dg-timeout 2 { target *-*-* } }
+// { dg-xfail-if "INFINITE" { "*-*-*" } { "-fpph-map=pph.map" } }
 // { dg-options "-w -fpermissive" }
-// pph asm xdiff
 
 #include "c1eabi1.h"
Index: gcc/testsuite/g++.dg/pph/c2builtin2.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/c2builtin2.cc	(revision 175566)
+++ gcc/testsuite/g++.dg/pph/c2builtin2.cc	(working copy)
@@ -1,3 +1,4 @@
+// pph asm xdiff
 #include "a2builtin4.h"
 #include "c2builtin5.h"
 #include "c2builtin6.h"
Index: gcc/testsuite/g++.dg/pph/pph.map
===================================================================
--- gcc/testsuite/g++.dg/pph/pph.map	(revision 175566)
+++ gcc/testsuite/g++.dg/pph/pph.map	(working copy)
@@ -6,9 +6,11 @@ c1builtin-integral-1.h	c1builtin-integra
 c1builtin-object-size-2.h	c1builtin-object-size-2.pph
 c1chained1.h	c1chained1.pph
 c1chained2.h	c1chained2.pph
+c1eabi1.h	c1eabi1.pph
 c1empty.h	c1empty.pph
 c1field.h	c1field.pph
 c1funcmac.h	c1funcmac.pph
+c1funcstatic.h	c1funcstatic.pph
 c1functions.h	c1functions.pph
 c1guarded1.h	c1guarded1.pph
 c1guarded2.h	c1guarded2.pph
@@ -28,6 +30,8 @@ c1variables.h	c1variables.pph
 c2builtin1.h	c2builtin1.pph
 c2builtin2.h	c2builtin2.pph
 c2builtin3.h	c2builtin3.pph
+c2builtin5.h	c2builtin5.pph
+c2builtin6.h	c2builtin6.pph
 c2dupguard1.h	c2dupguard1.pph
 c2dupguard2.h	c2dupguard2.pph
 c2paste.h	c2paste.pph
@@ -38,10 +42,12 @@ stdlib.h	stdlib.pph
 string.h	string.pph
 sys/types.h	types.pph
 x1autometh.h	x1autometh.pph
+x1dynarray1.h	x1dynarray1.pph
 x1funcstatic.h	x1funcstatic.pph
 x1functions.h	x1functions.pph
 x1globalref.h	x1globalref.pph
 x1hardlookup.h	x1hardlookup.pph
+x1namespace.h	x1namespace.pph
 x1special.h	x1special.pph
 x1struct0.h	x1struct0.pph
 x1struct1.h	x1struct1.pph
@@ -53,6 +59,6 @@ x1tmplfunc.h	x1tmplfunc.pph
 x1typerefs.h	x1typerefs.pph
 x1variables.h	x1variables.pph
 x2nontrivinit.h	x2nontrivinit.pph
-y2overload1.h	y2overload1.pph
-y2overload2.h	y2overload2.pph
-y2overload3.h	y2overload3.pph
+x2overload1.h	x2overload1.pph
+x2overload2.h	x2overload2.pph
+x2overload3.h	x2overload3.pph
Index: gcc/testsuite/g++.dg/pph/x1dynarray1.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/x1dynarray1.cc	(revision 0)
+++ gcc/testsuite/g++.dg/pph/x1dynarray1.cc	(revision 0)
@@ -0,0 +1,34 @@
+// { dg-xfail-if "ICE" { "*-*-*" } { "-fpph-map=pph.map" } }
+// { dg-bogus "x1dynarray1.cc:1:0: internal compiler error: in pph_in_lang_specific, at cp/pph-streamer-in.c:887" "" { xfail *-*-* } 0 }
+
+#include "x1dynarray1.h"
+#include <iostream>
+#include <algorithm>
+
+void lowrap(       std::dynarray< int > & target,
+             const std::dynarray< int > & source )
+{
+    std::dynarray< int > sorted( source );
+    std::sort( sorted.begin(), sorted.end() );
+    const int* srt = &sorted.front();
+    std::dynarray< int >::iterator tgt( target.begin() );
+    for ( ; tgt != target.end(); tgt++ ) {
+        *tgt = *srt;
+        if ( srt == &sorted.back() )
+            srt = &sorted.front();
+        else
+            srt++;
+    }
+}
+
+int main() {
+    std::dynarray< int > alpha(8);
+    std::dynarray< int > gamma(3);
+    for ( std::dynarray< int >::size_type i = 0; i < gamma.size(); i++ )
+	gamma[i] = 4 - i;
+    lowrap( alpha, gamma );
+    int sum = 0;
+    for ( std::dynarray< int >::size_type i = 0; i < alpha.size(); i++ )
+	sum += alpha.at(i);
+    return sum - 23;
+}
Index: gcc/testsuite/g++.dg/pph/x1template.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/x1template.cc	(revision 175566)
+++ gcc/testsuite/g++.dg/pph/x1template.cc	(working copy)
@@ -1,12 +1,7 @@
-// { dg-xfail-if "ICE" { "*-*-*" } { "-fpph-map=pph.map" } }
-// { dg-bogus "x1template.h:18:13: internal compiler error: in resume_scope" "" { xfail *-*-* } 0 }
-// { dg-prune-output "In file included from " }
-
+// pph asm xdiff
 #include "x1template.h"
 
-namespace A {
 int x = 3;
-} // namespace A
 
 int y = 4;
 
Index: gcc/testsuite/g++.dg/pph/x1dynarray1.h
===================================================================
--- gcc/testsuite/g++.dg/pph/x1dynarray1.h	(revision 0)
+++ gcc/testsuite/g++.dg/pph/x1dynarray1.h	(revision 0)
@@ -0,0 +1,93 @@
+#ifndef X1DYNARRAY1_H
+#define X1DYNARRAY1_H
+
+#include <memory>
+
+#define DefaultConstructible typename
+#define CPP0X( ignore )
+
+namespace std {
+
+template< DefaultConstructible T >
+struct dynarray
+{
+    // types:
+    typedef       T                               value_type;
+    typedef       T&                              reference;
+    typedef const T&                              const_reference;
+    typedef       T*                              iterator;
+    typedef const T*                              const_iterator;
+    typedef unsigned long                         size_type;
+    typedef long                                  difference_type;
+
+    // fields:
+private:
+    T*        store;
+    size_type count;
+
+    // helper functions:
+    void check(size_type n)
+        { if ( n >= count ) throw n; }
+    T* alloc(size_type n)
+        { return reinterpret_cast<T*>( new char[ n*sizeof(T) ] ); }
+
+public:
+    // construct and destruct:
+    dynarray() CPP0X( = delete ) ;
+    const dynarray operator=(const dynarray&) CPP0X( = delete ) ;
+
+    explicit dynarray(size_type c)
+        : store( alloc( c ) ), count( c )
+        { size_type i;
+          try {
+              for ( size_type i = 0; i < count; ++i )
+                  new (store+i) T;
+          } catch ( ... ) {
+              for ( ; i > 0; --i )
+                 (store+(i-1))->~T();
+              throw;
+          } }
+
+    dynarray(const dynarray& d)
+        : store( alloc( d.count ) ), count( d.count )
+        { try { uninitialized_copy( d.begin(), d.end(), begin() ); }
+          catch ( ... ) { delete store; throw; } }
+
+    ~dynarray()
+        { for ( size_type i = 0; i < count; ++i )
+              (store+i)->~T();
+          delete[] store; }
+
+    // iterators:
+    iterator       begin()        { return store; }
+    const_iterator begin()  const { return store; }
+    const_iterator cbegin() const { return store; }
+    iterator       end()          { return store + count; }
+    const_iterator end()    const { return store + count; }
+    const_iterator cend()   const { return store + count; }
+
+    // capacity:
+    size_type size()     const { return count; }
+    size_type max_size() const { return count; }
+    bool      empty()    const { return false; }
+
+    // element access:
+    reference       operator[](size_type n)       { return store[n]; }
+    const_reference operator[](size_type n) const { return store[n]; }
+
+    reference       front()       { return store[0]; }
+    const_reference front() const { return store[0]; }
+    reference       back()        { return store[count-1]; }
+    const_reference back()  const { return store[count-1]; }
+
+    const_reference at(size_type n) const { check(n); return store[n]; }
+    reference       at(size_type n)       { check(n); return store[n]; }
+
+    // data access:
+    T*       data()       { return store; }
+    const T* data() const { return store; }
+};
+
+} // namespace std
+
+#endif
Index: gcc/testsuite/g++.dg/pph/x1namespace.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/x1namespace.cc	(revision 0)
+++ gcc/testsuite/g++.dg/pph/x1namespace.cc	(revision 0)
@@ -0,0 +1,17 @@
+// { dg-xfail-if "ICE" { "*-*-*" } { "-fpph-map=pph.map" } }
+// { dg-bogus "x1namespace.h:18:13: internal compiler error: in resume_scope" "" { xfail *-*-* } 0 }
+// { dg-prune-output "In file included from " }
+
+#include "x1namespace.h"
+
+namespace A {
+int x = 3;
+} // namespace A
+
+int y = 4;
+
+int D::method()
+{ return y; }
+
+int main()
+{ }
Index: gcc/testsuite/g++.dg/pph/x1funcstatic.cc
===================================================================
--- gcc/testsuite/g++.dg/pph/x1funcstatic.cc	(revision 175566)
+++ gcc/testsuite/g++.dg/pph/x1funcstatic.cc	(working copy)
@@ -1,2 +1,3 @@
+// pph asm xdiff
 #include "c1funcstatic.h"
 int a = f();

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



More information about the Gcc-patches mailing list