Let me know if my recent push has not solved this problem. On 8/5/11, Gabriel Charette <gch...@google.com> wrote: > 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 >> >
-- Lawrence Crowl