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

Reply via email to