[pph] small multi-pph tests (issue4810074)

Gabriel Charette gchare@google.com
Wed Aug 10 18:23:00 GMT 2011


It didn't fix everything.

Potentially another commit conflict with Diego's trunk merge from yesterday?

I just sent out another patch that fixes everything that was left on
my end. Let me know if it works on your end.

Cheers,
Gab

On Tue, Aug 9, 2011 at 7:26 PM, Lawrence Crowl <crowl@google.com> wrote:
> Let me know if my recent push has not solved this problem.
>
> On 8/5/11, Gabriel Charette <gchare@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 <crowl@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  <crowl@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
>



More information about the Gcc-patches mailing list