I now get the following test failure output after pulling this patch (potentially from the almost concurrent checkin of my linetable patch?)
I can send you my diff's if you need to compare. FAIL: g++.dg/pph/c4inline.cc (assembly comparison, sums 46031=>36250) FAIL: g++.dg/pph/x1keyed.cc (assembly comparison, sums 17458=>63070) FAIL: g++.dg/pph/x1keyno.cc (assembly comparison, sums 20949=>46318) XPASS: g++.dg/pph/x4keyed.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x4keyed.cc -fpph-map=pph.map -I. (test for bogus messages, line ) FAIL: g++.dg/pph/x4keyno.cc (assembly comparison, sums 64958=>17472) FAIL: g++.dg/pph/x4template.cc (assembly comparison, sums 23306=>52012) XPASS: g++.dg/pph/x6rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x6rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) XPASS: g++.dg/pph/x7rtti.cc -fpph-map=pph.map -I. (test for bogus messages, line ) # of expected passes 277 # of unexpected failures 5 # of unexpected successes 45 # of expected failures 42 Gab On Fri, Aug 5, 2011 at 11:15 AM, Lawrence Crowl <cr...@google.com> wrote: > This patch ads a bunch of small tests for multi-pph includes. > > Tested on x64. > > > Index: gcc/testsuite/ChangeLog.pph > > 2011-08-04 Lawrence Crowl <cr...@google.com> > > * g++.dg/pph/README: Add new file types. > * g++.dg/pph/a0expinstinl.h: New. > * g++.dg/pph/a0expinstnin.h: New. > * g++.dg/pph/a0inline.h: New. > * g++.dg/pph/a0keyed.h: New. > * g++.dg/pph/a0keyno.h: New. > * g++.dg/pph/a0noninline.h: New. > * g++.dg/pph/a0nontrivinit.h: New. > * g++.dg/pph/a0rawstruct.h: New. > * g++.dg/pph/a0rtti.h: New. > * g++.dg/pph/a0template.h: New. > * g++.dg/pph/a0tmplclass.h: New. > * g++.dg/pph/a0typedef.h: New. > * g++.dg/pph/a0variables1.h: New. > * g++.dg/pph/a0variables2.h: New. > * g++.dg/pph/c0inline1.h: New. > * g++.dg/pph/c0inline2.h: New. > * g++.dg/pph/c0rawstruct1.h: New. > * g++.dg/pph/c0rawstruct2.h: New. > * g++.dg/pph/c0typedef1.h: New. > * g++.dg/pph/c0typedef2.h: New. > * g++.dg/pph/c0variables.h: Contents to a0variables.h. > Renamed to c0variables1.h. > * g++.dg/pph/c0variables1.h: New. > * g++.dg/pph/c0variables2.h: New. > * g++.dg/pph/c0variables3.h: New. > * g++.dg/pph/c0variables4.h: New. > * g++.dg/pph/c1variables.cc: Handle renaming. > * g++.dg/pph/c3rawstruct.cc: New. > * g++.dg/pph/c3rawstruct.s: New. > * g++.dg/pph/c3typedef.cc: New. > * g++.dg/pph/c3variables.cc: New. > * g++.dg/pph/c4inline.cc: New. > * g++.dg/pph/e0noninline1.h: New. > * g++.dg/pph/e0noninline2.h: New. > * g++.dg/pph/e4noninline.cc: New. > * g++.dg/pph/e4variables.cc: New. > * g++.dg/pph/pph.exp: Add FIXME. > * g++.dg/pph/x0keyed1.h: New. > * g++.dg/pph/x0keyed2.h: New. > * g++.dg/pph/x0keyno1.h: New. > * g++.dg/pph/x0keyno2.h: New. > * g++.dg/pph/x0nontrivinit.h: Contents to a0nontrivinit.h. > Renamed to x0nontrivinit1.h. > * g++.dg/pph/x0nontrivinit1.h: Renamed from x0nontrivinit.h. > * g++.dg/pph/x0nontrivinit2.h: New. > * g++.dg/pph/x0template.h: Contents to a0template.h. > Renamed to x0template1.h. > * g++.dg/pph/x0template1.h: Renamed from x0template. > * g++.dg/pph/x0template2.h: New. > * g++.dg/pph/x0tmplclass.h: Contents to a0tmplclass.h. > Renamed to x0tmplclass1.h. > * g++.dg/pph/x0tmplclass1.h: Renamed from x0tmplclass.h. > * g++.dg/pph/x0tmplclass2.h: New. > * g++.dg/pph/x1keyed.cc: New. > * g++.dg/pph/x1keyno.cc: New. > * g++.dg/pph/x1nontrivinit.cc: Handle renaming. > * g++.dg/pph/x1template.cc: Handle renaming. > * g++.dg/pph/x1tmplclass.cc: Handle renaming. > * g++.dg/pph/x1variables.h: Handle renaming. > * g++.dg/pph/x4keyed.cc: New. > * g++.dg/pph/x4keyno.cc: New. > * g++.dg/pph/x4template.cc: New. > * g++.dg/pph/x5rtti1.h: New. > * g++.dg/pph/x5rtti2.h: New. > * g++.dg/pph/x6rtti.cc: New. > * g++.dg/pph/x7rtti.cc: New. > * g++.dg/pph/z0expinstinl1.h: New. > * g++.dg/pph/z0expinstinl2.h: New. > * g++.dg/pph/z0expinstnin1.h: New. > * g++.dg/pph/z0expinstnin2.h: New. > * g++.dg/pph/z4expinstinl.cc: New. > * g++.dg/pph/z4expinstnin.cc: New. > * g++.dg/pph/z4nontrivinit.cc: New. > > > Index: gcc/testsuite/g++.dg/pph/z0expinstnin1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/z0expinstnin1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/z0expinstnin1.h (revision 0) > @@ -0,0 +1,6 @@ > +#ifndef X0EXPINSTNIN1_H > +#define X0EXPINSTNIN1_H > + > +#include "a0expinstnin.h" > + > +#endif > Index: gcc/testsuite/g++.dg/pph/e0noninline2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/e0noninline2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/e0noninline2.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef E0NONINLINE2_H > +#define E0NONINLINE2_H > +#include "a0noninline.h" > +int h() { struct S s = { 3, 4 }; return f(s) * 3; } > +#endif > Index: gcc/testsuite/g++.dg/pph/x0tmplclass.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0tmplclass.h (revision 177422) > +++ gcc/testsuite/g++.dg/pph/x0tmplclass.h (working copy) > @@ -1,17 +0,0 @@ > -#ifndef X0TMPLCLASS_H > -#define X0TMPLCLASS_H > -template< typename T > > -struct wrapper { > - T value; > - static T cache; > -}; > - > -template< typename T > > -T wrapper<T>::cache = 3; > - > -template<> > -struct wrapper<char> { > - int value; > - static int cache; > -}; > -#endif > Index: gcc/testsuite/g++.dg/pph/x0tmplclass2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0tmplclass2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0tmplclass2.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0TMPLCLASS2_H > +#define X0TMPLCLASS2_H > +#include "a0tmplclass.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/c0rawstruct1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0rawstruct1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0rawstruct1.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0RAWSTRUCT1_H > +#define C0RAWSTRUCT1_H > +#include "a0rawstruct.h" > +int g() { struct S s = { 1, 2 }; return s.a; } > +#endif > Index: gcc/testsuite/g++.dg/pph/c0typedef2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0typedef2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0typedef2.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0TYPEDEF2_H > +#define C0TYPEDEF2_H > +#include "a0typedef.h" > +inline type func2( type arg ) { return 2 * arg; } > +#endif > Index: gcc/testsuite/g++.dg/pph/x0template2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0template2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0template2.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0TEMPLATE2_H > +#define X0TEMPLATE2_H > +#include "a0template.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/z4expinstinl.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/z4expinstinl.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/z4expinstinl.cc (revision 0) > @@ -0,0 +1,12 @@ > +// pph asm xdiff 10014 > +//FIXME Emitting a second copy of the explicit instantiation of 'function'. > +//FIXME With comdat, the linker may paper over the differences. > + > +#include "z0expinstinl1.h" > +#include "z0expinstinl2.h" > + > +int main() > +{ > + int var = 1; > + return function(var); > +} > Index: gcc/testsuite/g++.dg/pph/a0variables2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0variables2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0variables2.h (revision 0) > @@ -0,0 +1,6 @@ > +#ifndef A0VARIABLES2_H > +#define A0VARIABLES2_H > +int gbl_initial = 1; > +const float gbl_init_const = 1.5; > +const int gbl_manifest = 2; > +#endif > Index: gcc/testsuite/g++.dg/pph/c0variables1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0variables1.h (revision 176951) > +++ gcc/testsuite/g++.dg/pph/c0variables1.h (working copy) > @@ -1,7 +1,4 @@ > -#ifndef C0VARIABLES_H > -#define C0VARIABLES_H > -extern int gbl_init_extern; > -extern int gbl_uninit_extern; > -int gbl_tentative; > -extern const int gbl_extern_const; > +#ifndef C0VARIABLES1_H > +#define C0VARIABLES1_H > +#include "a0variables1.h" > #endif > Index: gcc/testsuite/g++.dg/pph/x0keyno1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0keyno1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0keyno1.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0KEYED1_H > +#define X0KEYED1_H > +#include "a0keyed.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/x1variables.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x1variables.h (revision 177422) > +++ gcc/testsuite/g++.dg/pph/x1variables.h (working copy) > @@ -1,6 +1,6 @@ > #ifndef X1VARIABLES_H > #define X1VARIABLES_H > -#include "c0variables.h" > +#include "c0variables1.h" > struct D { > static int mbr_init_plain; > static int mbr_uninit_plain; > Index: gcc/testsuite/g++.dg/pph/x5rtti2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x5rtti2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x5rtti2.h (revision 0) > @@ -0,0 +1,12 @@ > +#ifndef X5RTTI2_H > +#define X5RTTI2_H > + > +#include <typeinfo> > +#include "a0rtti.h" > + > +const std::type_info& poly2() { return typeid( polymorphic ); } > +const std::type_info& nonp2() { return typeid( non_polymorphic ); } > +const std::type_info& hpol2() { polymorphic var; return var.hidden(); } > +const std::type_info& hnpl2() { non_polymorphic var; return var.hidden(); } > + > +#endif > Index: gcc/testsuite/g++.dg/pph/c0variables.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0variables.h (revision 177422) > +++ gcc/testsuite/g++.dg/pph/c0variables.h (working copy) > @@ -1,7 +0,0 @@ > -#ifndef C0VARIABLES_H > -#define C0VARIABLES_H > -extern int gbl_init_extern; > -extern int gbl_uninit_extern; > -int gbl_tentative; > -extern const int gbl_extern_const; > -#endif > Index: gcc/testsuite/g++.dg/pph/z0expinstnin2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/z0expinstnin2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/z0expinstnin2.h (revision 0) > @@ -0,0 +1,6 @@ > +#ifndef X0EXPINSTNIN2_H > +#define X0EXPINSTNIN2_H > + > +#include "a0expinstnin.h" > + > +#endif > Index: gcc/testsuite/g++.dg/pph/pph.exp > =================================================================== > --- gcc/testsuite/g++.dg/pph/pph.exp (revision 177422) > +++ gcc/testsuite/g++.dg/pph/pph.exp (working copy) > @@ -29,6 +29,7 @@ dg-init > # FIXME set scenarios [list "" "-g" "-O"] > set scenarios [list "" ] > > +# FIXME enable p and z tests when we feel we are ready > set hdr_tests [lsort [glob -nocomplain $srcdir/$subdir/\[cdpxy\]*.h]] > set neg_tests [lsort [glob -nocomplain $srcdir/$subdir/\[dy\]*.cc]] > set pos_tests [lsort [glob -nocomplain $srcdir/$subdir/\[cpx\]*.cc]] > Index: gcc/testsuite/g++.dg/pph/x1keyno.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x1keyno.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/x1keyno.cc (revision 0) > @@ -0,0 +1,10 @@ > +// pph asm xdiff 20949 > +// Looks like destructors botched. > + > +#include "x0keyno1.h" > + > +int main() > +{ > + keyed variable; > + return variable.mix( 3 ); > +} > Index: gcc/testsuite/g++.dg/pph/a0template.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0template.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0template.h (revision 0) > @@ -0,0 +1,20 @@ > +#ifndef A0TEMPLATE_H > +#define A0TEMPLATE_H > +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; } > +struct D : C< int > { > + int method(); > + int another() > + { return *b; } > +}; > +#endif > Index: gcc/testsuite/g++.dg/pph/x4keyno.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x4keyno.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/x4keyno.cc (revision 0) > @@ -0,0 +1,11 @@ > +// pph asm xdiff 64958 > +// Looks like destructors botched. > + > +#include "x0keyno1.h" > +#include "x0keyno2.h" > + > +int main() > +{ > + keyed variable; > + return variable.mix( 3 ); > +} > Index: gcc/testsuite/g++.dg/pph/x1template.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x1template.cc (revision 177422) > +++ gcc/testsuite/g++.dg/pph/x1template.cc (working copy) > @@ -1,4 +1,4 @@ > -#include "x0template.h" > +#include "x0template1.h" > > int x = 3; > > Index: gcc/testsuite/g++.dg/pph/c0inline1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0inline1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0inline1.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0INLINE1_H > +#define C0INLINE1_H > +#include "a0inline.h" > +inline int g() { struct S s = { 1, 2 }; return f(s) * 2; } > +#endif > Index: gcc/testsuite/g++.dg/pph/a0inline.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0inline.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0inline.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef A0INLINE_H > +#define A0INLINE_H > +struct S { int a, b; }; > +inline int f(struct S s) { return s.a + s.b; } > +#endif > Index: gcc/testsuite/g++.dg/pph/c0rawstruct2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0rawstruct2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0rawstruct2.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0RAWSTRUCT2_H > +#define C0RAWSTRUCT2_H > +#include "a0rawstruct.h" > +int h() { struct S s = { 3, 4 }; return s.b; } > +#endif > Index: gcc/testsuite/g++.dg/pph/a0nontrivinit.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0nontrivinit.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0nontrivinit.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef A0NONTRIVINIT_H > +#define A0NONTRIVINIT_H > +int y = 0; > +int x = y+1; > +#endif > Index: gcc/testsuite/g++.dg/pph/README > =================================================================== > --- gcc/testsuite/g++.dg/pph/README (revision 177422) > +++ gcc/testsuite/g++.dg/pph/README (working copy) > @@ -4,13 +4,15 @@ names. > [acdpxy][0-9]* > > a - auxillary headers > - c - positive tests for c-level headers and sources > - d - negative tests for c-level headers and sources > + c - positive tests for C-level headers and sources > + d - negative tests for C-level headers and sources > + e - C-level tests for non-sharable headers > p - positive tests for what would be c-level code, but which > due to C++ standard namespace games are not quite C level > - tests. > - x - C++-level positive tests. > - y - C++-level negative tests. > + tests > + x - C++-level positive tests > + y - C++-level negative tests > + z - C++-level tests for non-sharable headers > > 0 - tests with no pph inclusions (usually headers) > 1 - tests with a single leading pph file > Index: gcc/testsuite/g++.dg/pph/x1tmplclass.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x1tmplclass.cc (revision 177422) > +++ gcc/testsuite/g++.dg/pph/x1tmplclass.cc (working copy) > @@ -1,5 +1,4 @@ > - > -#include "x0tmplclass.h" > +#include "x0tmplclass1.h" > > int wrapper<char>::cache = 2; > > Index: gcc/testsuite/g++.dg/pph/a0noninline.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0noninline.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0noninline.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef A0NONINLINE_H > +#define A0NONINLINE_H > +struct S { int a, b; }; > +int f(struct S s) { return s.a + s.b; } > +#endif > Index: gcc/testsuite/g++.dg/pph/c0variables2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0variables2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0variables2.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef C0VARIABLES2_H > +#define C0VARIABLES2_H > +#include "a0variables1.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/a0expinstinl.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0expinstinl.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0expinstinl.h (revision 0) > @@ -0,0 +1,12 @@ > +#ifndef A0EXPINSTINL_H > +#define A0EXPINSTINL_H > + > +template< typename T > > +inline int function( T t ) > +{ > + return t * 2; > +} > + > +template int function(int); > + > +#endif > Index: gcc/testsuite/g++.dg/pph/a0rawstruct.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0rawstruct.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0rawstruct.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef A0RAWSTRUCT_H > +#define A0RAWSTRUCT_H > +struct S { int a, b; }; > +#endif > Index: gcc/testsuite/g++.dg/pph/x0keyno2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0keyno2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0keyno2.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0KEYED2_H > +#define X0KEYED2_H > +#include "a0keyed.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/a0typedef.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0typedef.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0typedef.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef A0TYPEDEF_H > +#define A0TYPEDEF_H > +typedef int type; > +#endif > Index: gcc/testsuite/g++.dg/pph/a0tmplclass.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0tmplclass.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0tmplclass.h (revision 0) > @@ -0,0 +1,17 @@ > +#ifndef A0TMPLCLASS_H > +#define A0TMPLCLASS_H > +template< typename T > > +struct wrapper { > + T value; > + static T cache; > +}; > + > +template< typename T > > +T wrapper<T>::cache = 3; > + > +template<> > +struct wrapper<char> { > + int value; > + static int cache; > +}; > +#endif > Index: gcc/testsuite/g++.dg/pph/x4template.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x4template.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/x4template.cc (revision 0) > @@ -0,0 +1,14 @@ > +// pph asm xdiff 23306 > + > +#include "x0template1.h" > +#include "x0template2.h" > + > +int x = 3; > + > +int y = 4; > + > +int D::method() > +{ return y; } > + > +int main() > +{ } > Index: gcc/testsuite/g++.dg/pph/x1nontrivinit.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x1nontrivinit.cc (revision 177422) > +++ gcc/testsuite/g++.dg/pph/x1nontrivinit.cc (working copy) > @@ -1 +1 @@ > -#include "x0nontrivinit.h" > +#include "x0nontrivinit1.h" > Index: gcc/testsuite/g++.dg/pph/x0keyed1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0keyed1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0keyed1.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0KEYED1_H > +#define X0KEYED1_H > +#include "a0keyed.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/e4variables.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/e4variables.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/e4variables.cc (revision 0) > @@ -0,0 +1,7 @@ > +#include "c0variables3.h" > +#include "c0variables4.h" > + > +int main() > +{ > + return gbl_initial + gbl_init_const + gbl_manifest; > +} > Index: gcc/testsuite/g++.dg/pph/z4nontrivinit.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/z4nontrivinit.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/z4nontrivinit.cc (revision 0) > @@ -0,0 +1,2 @@ > +#include "x0nontrivinit1.h" > +#include "x0nontrivinit2.h" > Index: gcc/testsuite/g++.dg/pph/a0rtti.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0rtti.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0rtti.h (revision 0) > @@ -0,0 +1,20 @@ > +#ifndef A0RTTI_H > +#define A0RTTI_H > + > +struct polymorphic > +{ > + int field; > + virtual int method() { return field; } > + const std::type_info& hidden() { return typeid( field ); } > + virtual ~polymorphic() { } > +}; > + > +struct non_polymorphic > +{ > + int field; > + int method() { return field; } > + const std::type_info& hidden() { return typeid( field ); } > + ~non_polymorphic() { } > +}; > + > +#endif > Index: gcc/testsuite/g++.dg/pph/x1keyed.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x1keyed.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/x1keyed.cc (revision 0) > @@ -0,0 +1,12 @@ > +// pph asm xdiff 17458 > +// Looks like destructors botched. > + > +#include "x0keyed1.h" > + > +int keyed::key( int arg ) { return mix( field & arg ); } > + > +int main() > +{ > + keyed variable; > + return variable.key( 3 ); > +} > Index: gcc/testsuite/g++.dg/pph/x4keyed.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x4keyed.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/x4keyed.cc (revision 0) > @@ -0,0 +1,14 @@ > +// { dg-xfail-if "BOGUS" { "*-*-*" } { "-fpph-map=pph.map" } } > +// { dg-bogus "a0keyed.h:14:1: error: redefinition of .const char _ZTS5keyed > []." "" { xfail *-*-* } 0 } > +// { dg-bogus "a0keyed.h:14:1: error: .const char _ZTS5keyed .7.. previously > defined here" "" { xfail *-*-* } 0 } > + > +#include "x0keyed1.h" > +#include "x0keyed2.h" > + > +int keyed::key( int arg ) { return mix( field & arg ); } > + > +int main() > +{ > + keyed variable; > + return variable.key( 3 ); > +} > Index: gcc/testsuite/g++.dg/pph/z4expinstnin.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/z4expinstnin.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/z4expinstnin.cc (revision 0) > @@ -0,0 +1,8 @@ > +#include "z0expinstnin1.h" > +#include "z0expinstnin2.h" > + > +int main() > +{ > + int var = 1; > + return function(var); > +} > Index: gcc/testsuite/g++.dg/pph/a0expinstnin.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0expinstnin.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0expinstnin.h (revision 0) > @@ -0,0 +1,12 @@ > +#ifndef A0EXPINSTNIN_H > +#define A0EXPINSTNIN_H > + > +template< typename T > > +int function( T t ) > +{ > + return t * 2; > +} > + > +template int function(int); > + > +#endif > Index: gcc/testsuite/g++.dg/pph/c0inline2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0inline2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0inline2.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0INLINE2_H > +#define C0INLINE2_H > +#include "a0inline.h" > +inline int h() { struct S s = { 3, 4 }; return f(s) * 3; } > +#endif > Index: gcc/testsuite/g++.dg/pph/z0expinstinl1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/z0expinstinl1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/z0expinstinl1.h (revision 0) > @@ -0,0 +1,6 @@ > +#ifndef X0EXPINSTINL1_H > +#define X0EXPINSTINL1_H > + > +#include "a0expinstinl.h" > + > +#endif > Index: gcc/testsuite/g++.dg/pph/c3rawstruct.s > =================================================================== > --- gcc/testsuite/g++.dg/pph/c3rawstruct.s (revision 0) > +++ gcc/testsuite/g++.dg/pph/c3rawstruct.s (revision 0) > @@ -0,0 +1,80 @@ > + .file "c3rawstruct.cc" > + .text > +.globl _Z1gv > + .type _Z1gv, @function > +_Z1gv: > +.LFB0: > + .cfi_startproc > + .cfi_personality 0x3,__gxx_personality_v0 > + pushq %rbp > + .cfi_def_cfa_offset 16 > + movq %rsp, %rbp > + .cfi_offset 6, -16 > + .cfi_def_cfa_register 6 > + movl $1, -16(%rbp) > + movl $2, -12(%rbp) > + movl -16(%rbp), %eax > + leave > + ret > + .cfi_endproc > +.LFE0: > + .size _Z1gv, .-_Z1gv > +.globl _Z1hv > + .type _Z1hv, @function > +_Z1hv: > +.LFB1: > + .cfi_startproc > + .cfi_personality 0x3,__gxx_personality_v0 > + pushq %rbp > + .cfi_def_cfa_offset 16 > + movq %rsp, %rbp > + .cfi_offset 6, -16 > + .cfi_def_cfa_register 6 > + movl $3, -16(%rbp) > + movl $4, -12(%rbp) > + movl -12(%rbp), %eax > + leave > + ret > + .cfi_endproc > +.LFE1: > + .size _Z1hv, .-_Z1hv > +.globl s > + .data > + .align 4 > + .type s, @object > + .size s, 8 > +s: > + .long 5 > + .long 6 > + .text > +.globl main > + .type main, @function > +main: > +.LFB2: > + .cfi_startproc > + .cfi_personality 0x3,__gxx_personality_v0 > + pushq %rbp > + .cfi_def_cfa_offset 16 > + movq %rsp, %rbp > + .cfi_offset 6, -16 > + .cfi_def_cfa_register 6 > + pushq %rbx > + subq $8, %rsp > + .cfi_offset 3, -24 > + call _Z1gv > + movl %eax, %ebx > + call _Z1hv > + leal (%rbx,%rax), %edx > + movl s(%rip), %eax > + addl %eax, %edx > + movl s+4(%rip), %eax > + leal (%rdx,%rax), %eax > + addq $8, %rsp > + popq %rbx > + leave > + ret > + .cfi_endproc > +.LFE2: > + .size main, .-main > + .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3" > + .section .note.GNU-stack,"",@progbits > Index: gcc/testsuite/g++.dg/pph/x0nontrivinit1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0nontrivinit1.h (revision 176951) > +++ gcc/testsuite/g++.dg/pph/x0nontrivinit1.h (working copy) > @@ -1,5 +1,4 @@ > -#ifndef X0NONTRIVINIT_H > -#define X0NONTRIVINIT_H > -int y = 0; > -int x = y+1; > +#ifndef X0NONTRIVINIT1_H > +#define X0NONTRIVINIT1_H > +#include "a0nontrivinit.h" > #endif > Index: gcc/testsuite/g++.dg/pph/c0variables3.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0variables3.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0variables3.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0VARIABLES3_H > +#define C0VARIABLES3_H > +#include "a0variables1.h" > +#include "a0variables2.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/c3rawstruct.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/c3rawstruct.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/c3rawstruct.cc (revision 0) > @@ -0,0 +1,9 @@ > +#include "c0rawstruct1.h" > +#include "c0rawstruct2.h" > + > +struct S s = { 5, 6 };; > + > +int main() > +{ > + return g() + h() + s.a + s.b; > +} > Index: gcc/testsuite/g++.dg/pph/a0keyed.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0keyed.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0keyed.h (revision 0) > @@ -0,0 +1,9 @@ > +#ifndef A0KEYED_H > +#define A0KEYED_H > +struct keyed { > + int field; > + virtual int mix( int arg ) { return field ^ arg; } > + virtual int key( int arg ); > + virtual ~keyed() { } > +}; > +#endif > Index: gcc/testsuite/g++.dg/pph/c3typedef.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/c3typedef.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/c3typedef.cc (revision 0) > @@ -0,0 +1,7 @@ > +#include "c0typedef1.h" > +#include "c0typedef2.h" > + > +int main() > +{ > + return func1( func2( 0 ) ); > +}; > Index: gcc/testsuite/g++.dg/pph/c1variables.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/c1variables.cc (revision 177422) > +++ gcc/testsuite/g++.dg/pph/c1variables.cc (working copy) > @@ -1,5 +1,7 @@ > -#include "c0variables.h" > +#include "c0variables1.h" > +#include "a0variables2.h" > > -int gbl_initial = 1; > -const float gbl_init_const = 1.5; > -const int gbl_manifest = 2; > +int main() > +{ > + return gbl_initial + gbl_init_const + gbl_manifest; > +} > Index: gcc/testsuite/g++.dg/pph/x0nontrivinit.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0nontrivinit.h (revision 177422) > +++ gcc/testsuite/g++.dg/pph/x0nontrivinit.h (working copy) > @@ -1,5 +0,0 @@ > -#ifndef X0NONTRIVINIT_H > -#define X0NONTRIVINIT_H > -int y = 0; > -int x = y+1; > -#endif > Index: gcc/testsuite/g++.dg/pph/x0keyed2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0keyed2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0keyed2.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0KEYED2_H > +#define X0KEYED2_H > +#include "a0keyed.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/c3variables.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/c3variables.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/c3variables.cc (revision 0) > @@ -0,0 +1,11 @@ > +// pph asm xdiff 34997 > +// tentative definition emitted twice > + > +#include "c0variables1.h" > +#include "c0variables2.h" > +#include "a0variables2.h" > + > +int main() > +{ > + return gbl_initial + gbl_init_const + gbl_manifest; > +} > Index: gcc/testsuite/g++.dg/pph/x7rtti.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x7rtti.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/x7rtti.cc (revision 0) > @@ -0,0 +1,30 @@ > +// { dg-xfail-if "BOGUS" { "*-*-*" } { "-fpph-map=pph.map" } } > +// { dg-bogus "x5rtti1.h:11:0: warning: .__STDC_IEC_559_COMPLEX__. redefined > .enabled by default." "" { xfail *-*-* } 0 } > +// { dg-bogus "x5rtti1.h:11:0: warning: .__STDC_ISO_10646__. redefined > .enabled by default." "" { xfail *-*-* } 0 } > +// { dg-bogus "x5rtti1.h:11:0: warning: .__STDC_IEC_559__. redefined > .enabled by default." "" { xfail *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:13:32: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:13:54: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:14:32: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:14:54: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:15:32: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:15:54: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:16:32: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:16:54: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:17:1: error: redefinition of .const char > _ZTS15non_polymorphic ..." "" { xfail *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:17:1: error: .const char _ZTS15non_polymorphic > .18.. previously defined here" "" { xfail *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:17:1: error: redefinition of .const char > _ZTS11polymorphic ..." "" { xfail *-*-* } 0 } > +// { dg-bogus "x5rtti2.h:17:1: error: .const char _ZTS11polymorphic .14.. > previously defined here" "" { xfail *-*-* } 0 } > + > + > +//FIXME We should make this a run test. > + > +#include "x5rtti1.h" > +#include "x5rtti2.h" > + > +int main() > +{ > + return poly1() == poly2() && nonp1() == nonp2() > + && hpol1() == hpol2() && hnpl1() == hnpl2() > + && poly1() != nonp1() && hpol1() == hnpl1() > + && poly2() != nonp2() && hpol2() == hnpl2(); > +} > Index: gcc/testsuite/g++.dg/pph/e0noninline1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/e0noninline1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/e0noninline1.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef E0NONINLINE1_H > +#define E0NONINLINE1_H > +#include "a0noninline.h" > +int g() { struct S s = { 1, 2 }; return f(s) * 2; } > +#endif > Index: gcc/testsuite/g++.dg/pph/e4noninline.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/e4noninline.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/e4noninline.cc (revision 0) > @@ -0,0 +1,11 @@ > +// pph asm xdiff 52472 > +//FIXME Emitting a second copy of the non-inline function f. > +//FIXME The linker should choke over this one. > + > +#include "e0noninline1.h" > +#include "e0noninline2.h" > + > +int main() > +{ > + return g() + h(); > +} > Index: gcc/testsuite/g++.dg/pph/z0expinstinl2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/z0expinstinl2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/z0expinstinl2.h (revision 0) > @@ -0,0 +1,6 @@ > +#ifndef X0EXPINSTINL2_H > +#define X0EXPINSTINL2_H > + > +#include "a0expinstinl.h" > + > +#endif > Index: gcc/testsuite/g++.dg/pph/x0tmplclass1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0tmplclass1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0tmplclass1.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0TMPLCLASS1_H > +#define X0TMPLCLASS1_H > +#include "a0tmplclass.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/x6rtti.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/x6rtti.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/x6rtti.cc (revision 0) > @@ -0,0 +1,13 @@ > +// { dg-xfail-if "BOGUS" { "*-*-*" } { "-fpph-map=pph.map" } } > +// { dg-bogus "x5rtti1.h:13:29: error: no match for .operator" "" { xfail > *-*-* } 0 } > +// { dg-bogus "x5rtti1.h:13:51: error: no match for .operator" "" { xfail > *-*-* } 0 } > + > + > +//FIXME We should make this a run test. > + > +#include "x5rtti1.h" > + > +int main() > +{ > + return poly1() != nonp1() && hpol1() == hnpl1(); > +} > Index: gcc/testsuite/g++.dg/pph/c4inline.cc > =================================================================== > --- gcc/testsuite/g++.dg/pph/c4inline.cc (revision 0) > +++ gcc/testsuite/g++.dg/pph/c4inline.cc (revision 0) > @@ -0,0 +1,11 @@ > +// pph asm xdiff 46031 > +//Emitting a second copy of the inline function f. > +//With comdat, the linker may paper over the differences. > + > +#include "c0inline1.h" > +#include "c0inline2.h" > + > +int main() > +{ > + return g() + h(); > +} > Index: gcc/testsuite/g++.dg/pph/x0template1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0template1.h (revision 176951) > +++ gcc/testsuite/g++.dg/pph/x0template1.h (working copy) > @@ -1,20 +1,4 @@ > -#ifndef X0TEMPLATE_H > -#define X0TEMPLATE_H > -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; } > -struct D : C< int > { > - int method(); > - int another() > - { return *b; } > -}; > +#ifndef X0TEMPLATE1_H > +#define X0TEMPLATE1_H > +#include "a0template.h" > #endif > Index: gcc/testsuite/g++.dg/pph/c0typedef1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0typedef1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0typedef1.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0TYPEDEF1_H > +#define C0TYPEDEF1_H > +#include "a0typedef.h" > +inline type func1( type arg ) { return arg; } > +#endif > Index: gcc/testsuite/g++.dg/pph/a0keyno.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0keyno.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0keyno.h (revision 0) > @@ -0,0 +1,8 @@ > +#ifndef A0KEYNO_H > +#define A0KEYNO_H > +struct keyno { > + int field; > + virtual int mix( int arg ) { return field ^ arg; } > + virtual ~keyno() { } > +}; > +#endif > Index: gcc/testsuite/g++.dg/pph/a0variables1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/a0variables1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/a0variables1.h (revision 0) > @@ -0,0 +1,7 @@ > +#ifndef A0VARIABLES1_H > +#define A0VARIABLES1_H > +extern int gbl_init_extern; > +extern int gbl_uninit_extern; > +int gbl_tentative; > +extern const int gbl_extern_const; > +#endif > Index: gcc/testsuite/g++.dg/pph/x0nontrivinit2.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0nontrivinit2.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x0nontrivinit2.h (revision 0) > @@ -0,0 +1,4 @@ > +#ifndef X0NONTRIVINIT2_H > +#define X0NONTRIVINIT2_H > +#include "a0nontrivinit.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/c0variables4.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/c0variables4.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/c0variables4.h (revision 0) > @@ -0,0 +1,5 @@ > +#ifndef C0VARIABLES4_H > +#define C0VARIABLES4_H > +#include "a0variables1.h" > +#include "a0variables2.h" > +#endif > Index: gcc/testsuite/g++.dg/pph/x5rtti1.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x5rtti1.h (revision 0) > +++ gcc/testsuite/g++.dg/pph/x5rtti1.h (revision 0) > @@ -0,0 +1,12 @@ > +#ifndef X5RTTI1_H > +#define X5RTTI1_H > + > +#include <typeinfo> > +#include "a0rtti.h" > + > +const std::type_info& poly1() { return typeid( polymorphic ); } > +const std::type_info& nonp1() { return typeid( non_polymorphic ); } > +const std::type_info& hpol1() { polymorphic var; return var.hidden(); } > +const std::type_info& hnpl1() { non_polymorphic var; return var.hidden(); } > + > +#endif > Index: gcc/testsuite/g++.dg/pph/x0template.h > =================================================================== > --- gcc/testsuite/g++.dg/pph/x0template.h (revision 177422) > +++ gcc/testsuite/g++.dg/pph/x0template.h (working copy) > @@ -1,20 +0,0 @@ > -#ifndef X0TEMPLATE_H > -#define X0TEMPLATE_H > -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; } > -struct D : C< int > { > - int method(); > - int another() > - { return *b; } > -}; > -#endif > > -- > This patch is available for review at http://codereview.appspot.com/4810074 >