public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* ICE building a libsupc++ file, pdp11 target
@ 2018-07-13 18:27 Paul Koning
  2018-07-13 18:52 ` U.Mutlu
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Koning @ 2018-07-13 18:27 UTC (permalink / raw)
  To: GCC Mailing List

I'm trying to see if I can build the pdp11 target for languages other than just C, and the answer is for the most part yes.  But I' running into an ICE I can't figure out.  It's way before the back end comes into the picture as far as I can see, and there's nothing particularly strange looking in the input file that suggests anything.

Any suggestions on where to look?  The failure is:

libtool: compile:  /Users/pkoning/Documents/svn/buildpdp+/./gcc/xgcc -shared-libgcc -B/Users/pkoning/Documents/svn/buildpdp+/./gcc -nostdinc++ -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src/.libs -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/libsupc++/.libs -B/usr/local/pdp11-aout/pdp11-aout/bin/ -B/usr/local/pdp11-aout/pdp11-aout/lib/ -isystem /usr/local/pdp11-aout/pdp11-aout/include -isystem /usr/local/pdp11-aout/pdp11-aout/sys-include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/../libgcc -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include/pdp11-aout -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z -c ../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc -o new_opa.o
cc1plus: warning: -Wabi won't warn about anything [-Wabi]
cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc:112:1: internal compiler error: in import_export_decl, at cp/decl2.c:2877
 }
 ^
libbacktrace could not find executable to open
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
make[3]: *** [new_opa.lo] Error 1

	paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-13 18:27 ICE building a libsupc++ file, pdp11 target Paul Koning
@ 2018-07-13 18:52 ` U.Mutlu
  2018-07-13 18:56   ` Paul Koning
  0 siblings, 1 reply; 14+ messages in thread
From: U.Mutlu @ 2018-07-13 18:52 UTC (permalink / raw)
  To: Paul Koning, GCC Mailing List

Paul Koning wrote on 07/13/2018 08:27 PM:
> I'm trying to see if I can build the pdp11 target for languages other than just C, and the answer is for the most part yes.  But I' running into an ICE I can't figure out.  It's way before the back end comes into the picture as far as I can see, and there's nothing particularly strange looking in the input file that suggests anything.
>
> Any suggestions on where to look?  The failure is:
>
> libtool: compile:  /Users/pkoning/Documents/svn/buildpdp+/./gcc/xgcc -shared-libgcc -B/Users/pkoning/Documents/svn/buildpdp+/./gcc -nostdinc++ -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src/.libs -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/libsupc++/.libs -B/usr/local/pdp11-aout/pdp11-aout/bin/ -B/usr/local/pdp11-aout/pdp11-aout/lib/ -isystem /usr/local/pdp11-aout/pdp11-aout/include -isystem /usr/local/pdp11-aout/pdp11-aout/sys-include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/../libgcc -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include/pdp11-aout -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z -c ../../../../gcc/lib
stdc++-v3/libsupc++/new_opa.cc -o new_opa.o
> cc1plus: warning: -Wabi won't warn about anything [-Wabi]
> cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
> cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
> ../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc:112:1: internal compiler error: in import_export_decl, at cp/decl2.c:2877
>   }
>   ^
> libbacktrace could not find executable to open
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See <https://gcc.gnu.org/bugs/> for instructions.
> make[3]: *** [new_opa.lo] Error 1


It's failing at the last gcc_assert() below (file 
../gcc_src/gcc/cp/decl2.c:2877 ):


/* DECL is a FUNCTION_DECL or VAR_DECL.  If the object file linkage
    for DECL has not already been determined, do so now by setting
    DECL_EXTERNAL, DECL_COMDAT and other related flags.  Until this
    function is called entities with vague linkage whose definitions
    are available must have TREE_PUBLIC set.

    If this function decides to place DECL in COMDAT, it will set
    appropriate flags -- but will not clear DECL_EXTERNAL.  It is up to
    the caller to decide whether or not to clear DECL_EXTERNAL.  Some
    callers defer that decision until it is clear that DECL is actually
    required.  */

void
import_export_decl (tree decl)
{
   int emit_p;
   bool comdat_p;
   bool import_p;
   tree class_type = NULL_TREE;

   if (DECL_INTERFACE_KNOWN (decl))
     return;

   /* We cannot determine what linkage to give to an entity with vague
      linkage until the end of the file.  For example, a virtual table
      for a class will be defined if and only if the key method is
      defined in this translation unit.  As a further example, consider
      that when compiling a translation unit that uses PCH file with
      "-frepo" it would be incorrect to make decisions about what
      entities to emit when building the PCH; those decisions must be
      delayed until the repository information has been processed.  */
   gcc_assert (at_eof);
   /* Object file linkage for explicit instantiations is handled in
      mark_decl_instantiated.  For static variables in functions with
      vague linkage, maybe_commonize_var is used.

      Therefore, the only declarations that should be provided to this
      function are those with external linkage that are:

      * implicit instantiations of function templates

      * inline function

      * implicit instantiations of static data members of class
        templates

      * virtual tables

      * typeinfo objects

      Furthermore, all entities that reach this point must have a
      definition available in this translation unit.

      The following assertions check these conditions.  */
   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
   /* Any code that creates entities with TREE_PUBLIC cleared should
      also set DECL_INTERFACE_KNOWN.  */
   gcc_assert (TREE_PUBLIC (decl));



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-13 18:52 ` U.Mutlu
@ 2018-07-13 18:56   ` Paul Koning
  2018-07-13 19:12     ` U.Mutlu
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Koning @ 2018-07-13 18:56 UTC (permalink / raw)
  To: U.Mutlu; +Cc: GCC Mailing List



> On Jul 13, 2018, at 2:52 PM, U.Mutlu <um@mutluit.com> wrote:
> 
> Paul Koning wrote on 07/13/2018 08:27 PM:
>> I'm trying to see if I can build the pdp11 target for languages other than just C, and the answer is for the most part yes.  But I' running into an ICE I can't figure out.  It's way before the back end comes into the picture as far as I can see, and there's nothing particularly strange looking in the input file that suggests anything.
>> 
>> Any suggestions on where to look?  The failure is:
>> 
>> libtool: compile:  /Users/pkoning/Documents/svn/buildpdp+/./gcc/xgcc -shared-libgcc -B/Users/pkoning/Documents/svn/buildpdp+/./gcc -nostdinc++ -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src/.libs -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/libsupc++/.libs -B/usr/local/pdp11-aout/pdp11-aout/bin/ -B/usr/local/pdp11-aout/pdp11-aout/lib/ -isystem /usr/local/pdp11-aout/pdp11-aout/include -isystem /usr/local/pdp11-aout/pdp11-aout/sys-include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/../libgcc -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include/pdp11-aout -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z -c ../../../../gcc/lib
> stdc++-v3/libsupc++/new_opa.cc -o new_opa.o
>> cc1plus: warning: -Wabi won't warn about anything [-Wabi]
>> cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
>> cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
>> ../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc:112:1: internal compiler error: in import_export_decl, at cp/decl2.c:2877
>>  }
>>  ^
>> libbacktrace could not find executable to open
>> Please submit a full bug report,
>> with preprocessed source if appropriate.
>> See <https://gcc.gnu.org/bugs/> for instructions.
>> make[3]: *** [new_opa.lo] Error 1
> 
> 
> It's failing at the last gcc_assert() below (file ../gcc_src/gcc/cp/decl2.c:2877 ):

Sorry, I should have been more explicit.  I saw that, but my question is: what is the underlying problem that triggers the assert?  The comment is not much help to me.  And more specifically: what could a target be doing wrong that would make an early stage of the compiler fail like this on what seems like a pretty straightforward source file?

Many of the other libstdc++ bits compile just fine, as do plenty of testsuite cases and some test files of my own.

	paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-13 18:56   ` Paul Koning
@ 2018-07-13 19:12     ` U.Mutlu
  2018-07-16 21:30       ` Paul Koning
  0 siblings, 1 reply; 14+ messages in thread
From: U.Mutlu @ 2018-07-13 19:12 UTC (permalink / raw)
  To: Paul Koning; +Cc: GCC Mailing List

Paul Koning wrote on 07/13/2018 08:56 PM:
>
>
>> On Jul 13, 2018, at 2:52 PM, U.Mutlu <um@mutluit.com> wrote:
>>
>> Paul Koning wrote on 07/13/2018 08:27 PM:
>>> I'm trying to see if I can build the pdp11 target for languages other than just C, and the answer is for the most part yes.  But I' running into an ICE I can't figure out.  It's way before the back end comes into the picture as far as I can see, and there's nothing particularly strange looking in the input file that suggests anything.
>>>
>>> Any suggestions on where to look?  The failure is:
>>>
>>> libtool: compile:  /Users/pkoning/Documents/svn/buildpdp+/./gcc/xgcc -shared-libgcc -B/Users/pkoning/Documents/svn/buildpdp+/./gcc -nostdinc++ -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src/.libs -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/libsupc++/.libs -B/usr/local/pdp11-aout/pdp11-aout/bin/ -B/usr/local/pdp11-aout/pdp11-aout/lib/ -isystem /usr/local/pdp11-aout/pdp11-aout/include -isystem /usr/local/pdp11-aout/pdp11-aout/sys-include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/../libgcc -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include/pdp11-aout -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z -c ../../../../gcc/l
ib
>> stdc++-v3/libsupc++/new_opa.cc -o new_opa.o
>>> cc1plus: warning: -Wabi won't warn about anything [-Wabi]
>>> cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
>>> cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
>>> ../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc:112:1: internal compiler error: in import_export_decl, at cp/decl2.c:2877
>>>   }
>>>   ^
>>> libbacktrace could not find executable to open
>>> Please submit a full bug report,
>>> with preprocessed source if appropriate.
>>> See <https://gcc.gnu.org/bugs/> for instructions.
>>> make[3]: *** [new_opa.lo] Error 1
>>
>>
>> It's failing at the last gcc_assert() below (file ../gcc_src/gcc/cp/decl2.c:2877 ):
>
> Sorry, I should have been more explicit.  I saw that, but my question is: what is the underlying problem that triggers the assert?  The comment is not much help to me.  And more specifically: what could a target be doing wrong that would make an early stage of the compiler fail like this on what seems like a pretty straightforward source file?
>
> Many of the other libstdc++ bits compile just fine, as do plenty of testsuite cases and some test files of my own.
>

/* In a VAR_DECL, FUNCTION_DECL, NAMESPACE_DECL or TYPE_DECL,
    nonzero means name is to be accessible from outside this translation unit.
    In an IDENTIFIER_NODE, nonzero means an external declaration
    accessible from outside this translation unit was previously seen
    for this name in an inner scope.  */
#define TREE_PUBLIC(NODE) ((NODE)->base.public_flag)


Ie. it has todo with the value of the member var public_flag of the tree decl.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-13 19:12     ` U.Mutlu
@ 2018-07-16 21:30       ` Paul Koning
  2018-07-17  9:46         ` Richard Biener
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Koning @ 2018-07-16 21:30 UTC (permalink / raw)
  To: GCC Mailing List



> On Jul 13, 2018, at 3:12 PM, U.Mutlu <um@mutluit.com> wrote:
> 
> Paul Koning wrote on 07/13/2018 08:56 PM:
>> 
>> 
>>> On Jul 13, 2018, at 2:52 PM, U.Mutlu <um@mutluit.com> wrote:
>>> 
>>> Paul Koning wrote on 07/13/2018 08:27 PM:
>>>> I'm trying to see if I can build the pdp11 target for languages other than just C, and the answer is for the most part yes.  But I' running into an ICE I can't figure out.  It's way before the back end comes into the picture as far as I can see, and there's nothing particularly strange looking in the input file that suggests anything.
>>>> 
>>>> Any suggestions on where to look?  The failure is:
>>>> 
>>>> libtool: compile:  /Users/pkoning/Documents/svn/buildpdp+/./gcc/xgcc -shared-libgcc -B/Users/pkoning/Documents/svn/buildpdp+/./gcc -nostdinc++ -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src/.libs -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/libsupc++/.libs -B/usr/local/pdp11-aout/pdp11-aout/bin/ -B/usr/local/pdp11-aout/pdp11-aout/lib/ -isystem /usr/local/pdp11-aout/pdp11-aout/include -isystem /usr/local/pdp11-aout/pdp11-aout/sys-include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/../libgcc -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include/pdp11-aout -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z -c ../../../../gcc/l
> ib
>>> stdc++-v3/libsupc++/new_opa.cc -o new_opa.o
>>>> cc1plus: warning: -Wabi won't warn about anything [-Wabi]
>>>> cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
>>>> cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
>>>> ../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc:112:1: internal compiler error: in import_export_decl, at cp/decl2.c:2877
>>>>  }
>>>>  ^
>>>> libbacktrace could not find executable to open
>>>> Please submit a full bug report,
>>>> with preprocessed source if appropriate.
>>>> See <https://gcc.gnu.org/bugs/> for instructions.
>>>> make[3]: *** [new_opa.lo] Error 1
>>> 
>>> 
>>> It's failing at the last gcc_assert() below (file ../gcc_src/gcc/cp/decl2.c:2877 ):
>> 
>> Sorry, I should have been more explicit.  I saw that, but my question is: what is the underlying problem that triggers the assert?  The comment is not much help to me.  And more specifically: what could a target be doing wrong that would make an early stage of the compiler fail like this on what seems like a pretty straightforward source file?
>> 
>> Many of the other libstdc++ bits compile just fine, as do plenty of testsuite cases and some test files of my own.
>> 
> 
> /* In a VAR_DECL, FUNCTION_DECL, NAMESPACE_DECL or TYPE_DECL,
>   nonzero means name is to be accessible from outside this translation unit.
>   In an IDENTIFIER_NODE, nonzero means an external declaration
>   accessible from outside this translation unit was previously seen
>   for this name in an inner scope.  */
> #define TREE_PUBLIC(NODE) ((NODE)->base.public_flag)
> 
> 
> Ie. it has todo with the value of the member var public_flag of the tree decl.

I'm still on the same question as before.  Why do I get an ICE in the tree phase of the compiler, complaining about flags of a declaration, based on something I apparently have wrong in my target description?  I can build C++ for other targets, so this isn't a general bug.  But I'm not used to target (back end) stuff affecting the compiler before I even get to the RTL part.  And in this case, looking at the failing code gives me no clue at all.  I can't do anything with the "tree" object to find out what it describes; it's a VAR_DECL but I don't know what to look at. I tried turning on tree dump files, those gave no clue either.  And there is nothing in the manuals.

	paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-16 21:30       ` Paul Koning
@ 2018-07-17  9:46         ` Richard Biener
  2018-07-17 13:08           ` Paul Koning
  0 siblings, 1 reply; 14+ messages in thread
From: Richard Biener @ 2018-07-17  9:46 UTC (permalink / raw)
  To: paulkoning; +Cc: GCC Development

On Mon, Jul 16, 2018 at 11:30 PM Paul Koning <paulkoning@comcast.net> wrote:
>
>
>
> > On Jul 13, 2018, at 3:12 PM, U.Mutlu <um@mutluit.com> wrote:
> >
> > Paul Koning wrote on 07/13/2018 08:56 PM:
> >>
> >>
> >>> On Jul 13, 2018, at 2:52 PM, U.Mutlu <um@mutluit.com> wrote:
> >>>
> >>> Paul Koning wrote on 07/13/2018 08:27 PM:
> >>>> I'm trying to see if I can build the pdp11 target for languages other than just C, and the answer is for the most part yes.  But I' running into an ICE I can't figure out.  It's way before the back end comes into the picture as far as I can see, and there's nothing particularly strange looking in the input file that suggests anything.
> >>>>
> >>>> Any suggestions on where to look?  The failure is:
> >>>>
> >>>> libtool: compile:  /Users/pkoning/Documents/svn/buildpdp+/./gcc/xgcc -shared-libgcc -B/Users/pkoning/Documents/svn/buildpdp+/./gcc -nostdinc++ -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/src/.libs -L/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/libsupc++/.libs -B/usr/local/pdp11-aout/pdp11-aout/bin/ -B/usr/local/pdp11-aout/pdp11-aout/lib/ -isystem /usr/local/pdp11-aout/pdp11-aout/include -isystem /usr/local/pdp11-aout/pdp11-aout/sys-include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/../libgcc -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include/pdp11-aout -I/Users/pkoning/Documents/svn/buildpdp+/pdp11-aout/libstdc++-v3/include -I/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z -c ../../../../gcc/l
> > ib
> >>> stdc++-v3/libsupc++/new_opa.cc -o new_opa.o
> >>>> cc1plus: warning: -Wabi won't warn about anything [-Wabi]
> >>>> cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
> >>>> cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
> >>>> ../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc:112:1: internal compiler error: in import_export_decl, at cp/decl2.c:2877
> >>>>  }
> >>>>  ^
> >>>> libbacktrace could not find executable to open
> >>>> Please submit a full bug report,
> >>>> with preprocessed source if appropriate.
> >>>> See <https://gcc.gnu.org/bugs/> for instructions.
> >>>> make[3]: *** [new_opa.lo] Error 1
> >>>
> >>>
> >>> It's failing at the last gcc_assert() below (file ../gcc_src/gcc/cp/decl2.c:2877 ):
> >>
> >> Sorry, I should have been more explicit.  I saw that, but my question is: what is the underlying problem that triggers the assert?  The comment is not much help to me.  And more specifically: what could a target be doing wrong that would make an early stage of the compiler fail like this on what seems like a pretty straightforward source file?
> >>
> >> Many of the other libstdc++ bits compile just fine, as do plenty of testsuite cases and some test files of my own.
> >>
> >
> > /* In a VAR_DECL, FUNCTION_DECL, NAMESPACE_DECL or TYPE_DECL,
> >   nonzero means name is to be accessible from outside this translation unit.
> >   In an IDENTIFIER_NODE, nonzero means an external declaration
> >   accessible from outside this translation unit was previously seen
> >   for this name in an inner scope.  */
> > #define TREE_PUBLIC(NODE) ((NODE)->base.public_flag)
> >
> >
> > Ie. it has todo with the value of the member var public_flag of the tree decl.
>
> I'm still on the same question as before.  Why do I get an ICE in the tree phase of the compiler, complaining about flags of a declaration, based on something I apparently have wrong in my target description?  I can build C++ for other targets, so this isn't a general bug.  But I'm not used to target (back end) stuff affecting the compiler before I even get to the RTL part.  And in this case, looking at the failing code gives me no clue at all.  I can't do anything with the "tree" object to find out what it describes; it's a VAR_DECL but I don't know what to look at. I tried turning on tree dump files, those gave no clue either.  And there is nothing in the manuals.

There is not enough information for anyone to help you without
reproducing the issue which is maybe too much to ask for ;)

Can you debug_tree () the offending decl in gdb?

>         paul
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-17  9:46         ` Richard Biener
@ 2018-07-17 13:08           ` Paul Koning
  2018-07-17 13:36             ` Richard Biener
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Koning @ 2018-07-17 13:08 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Development

[-- Attachment #1: Type: text/plain, Size: 14413 bytes --]


> On Jul 17, 2018, at 5:46 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> 
>> ...
> 
> There is not enough information for anyone to help you without
> reproducing the issue which is maybe too much to ask for ;)
> 
> Can you debug_tree () the offending decl in gdb?

Yes, here it is.  I don't know anything about debugging in this area, so tools like debug_tree are good to learn about.  How would I interpret its output?

pkoning:gcc pkoning$ lldb ./cc1plus -- new_opa.ii -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z 
(lldb) target create "./cc1plus"
Current executable set to './cc1plus' (x86_64).
(lldb) settings set -- target.run-args  "new_opa.ii" "-fno-implicit-templates" "-Wall" "-Wextra" "-Wwrite-strings" "-Wcast-qual" "-Wabi" "-fdiagnostics-show-location=once" "-frandom-seed=new_opa.lo" "-g" "-O2" "-std=gnu++1z"
(lldb) b internal_error
Breakpoint 1: where = cc1plus`internal_error(char const*, ...) + 104 at diagnostic.c:1441, address = 0x0000000100c21378
(lldb) run
Process 10880 launched: './cc1plus' (x86_64)
cc1plus: warning: -Wabi won't warn about anything [-Wabi]
cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
 long int std::abs(long int) long long int std::abs(long long int) constexpr double std::abs(double) constexpr float std::abs(float) constexpr long double std::abs(long double) ldiv_t std::div(long int, long int) std::exception::exception() std::exception::exception() std::exception::exception() std::bad_exception::bad_exception() std::bad_exception::bad_exception() std::bad_exception::bad_exception() const char* std::type_info::name() const bool std::type_info::operator!=(const std::type_info&) const std::size_t std::type_info::hash_code() const std::type_info::type_info(const char*) std::type_info::type_info(const char*) std::type_info::type_info(const char*) std::bad_cast::bad_cast() std::bad_cast::bad_cast() std::bad_cast::bad_cast() std::bad_typeid::bad_typeid() std::bad_typeid::bad_typeid() std::bad_typeid::bad_typeid() std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr& std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::operator bool() const void std::__exception_ptr::swap(std::__exception_ptr::exception_ptr&, std::__exception_ptr::exception_ptr&) void std::__exception_ptr::__dest_thunk(void*) std::__exception_ptr::exception_ptr std::make_exception_ptr(_Ex) constexpr _Tp* std::__addressof(_Tp&) constexpr std::integral_constant<_Tp, __v>::operator std::integral_constant<_Tp, __v>::value_type() const constexpr std::integral_constant<_Tp, __v>::value_type std::integral_constant<_Tp, __v>::operator()() const std::integral_constant<bool, false> constexpr const bool std::integral_constant<bool, false>::value constexpr const bool std::integral_constant<bool, false>::value std::integral_constant<bool, true> constexpr const bool std::integral_constant<bool, true>::value constexpr const bool std::integral_constant<bool, true>::value std::integral_constant<short unsigned int, 0> constexpr const short unsigned int std::integral_constant<short unsigned int, 0>::value constexpr const short unsigned int std::integral_constant<short unsigned int, 0>::value std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<long long unsigned int> std::__make_unsigned_selector_base::_List<> constexpr const size_t std::__make_unsigned_selector_base::_List<long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector<wchar_t, false, true> std::__make_unsigned_selector_base::__select<2, std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<2, std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>, true> std::is_const<wchar_t> constexpr const bool std::integral_constant<bool, false>::value std::is_volatile<wchar_t> std::__match_cv_qualifiers<wchar_t, short unsigned int, false, false> std::__cv_selector<short unsigned int, false, false> std::__make_unsigned_selector<char16_t, false, true> std::is_const<char16_t> std::is_volatile<char16_t> std::__match_cv_qualifiers<char16_t, short unsigned int, false, false> std::__make_unsigned_selector<char32_t, false, true> std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>, true> std::is_const<char32_t> std::is_volatile<char32_t> std::__match_cv_qualifiers<char32_t, long unsigned int, false, false> std::__cv_selector<long unsigned int, false, false> std::__make_signed_selector<wchar_t, false, true> std::is_integral<wchar_t> std::remove_cv<wchar_t> std::remove_volatile<wchar_t> std::remove_const<wchar_t> constexpr const bool std::integral_constant<bool, true>::value std::is_enum<wchar_t> std::__make_unsigned_selector<wchar_t, true, false> std::is_integral<short unsigned int> std::remove_cv<short unsigned int> std::remove_volatile<short unsigned int> std::remove_const<short unsigned int> std::is_enum<short unsigned int> std::__make_signed_selector<short unsigned int, true, false> std::is_const<short unsigned int> std::is_volatile<short unsigned int> std::__match_cv_qualifiers<short unsigned int, short int, false, false> std::__cv_selector<short int, false, false> std::__make_signed_selector<char16_t, false, true> std::is_integral<char16_t> std::remove_cv<char16_t> std::remove_volatile<char16_t> std::remove_const<char16_t> std::is_enum<char16_t> std::__make_unsigned_selector<char16_t, true, false> std::__make_signed_selector<char32_t, false, true> std::is_integral<char32_t> std::remove_cv<char32_t> std::remove_volatile<char32_t> std::remove_const<char32_t> std::is_enum<char32_t> std::__make_unsigned_selector<char32_t, true, false> std::is_integral<long unsigned int> std::remove_cv<long unsigned int> std::remove_volatile<long unsigned int> std::remove_const<long unsigned int> std::is_enum<long unsigned int> std::__make_signed_selector<long unsigned int, true, false> std::is_const<long unsigned int> std::is_volatile<long unsigned int> std::__match_cv_qualifiers<long unsigned int, long int, false, false> std::__cv_selector<long int, false, false> decltype (__declval<_Tp>(0)) std::declval() constexpr bool std::__call_is_nt(std::__invoke_memfun_ref) constexpr bool std::__call_is_nt(std::__invoke_memfun_deref) constexpr bool std::__call_is_nt(std::__invoke_memobj_ref) constexpr bool std::__call_is_nt(std::__invoke_memobj_deref) constexpr bool std::__call_is_nt(std::__invoke_other) constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&) constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&&) constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) constexpr typename std::conditional<std::__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type std::move_if_noexcept(_Tp&) constexpr _Tp* std::addressof(_Tp&) _Tp std::__exchange(_Tp&, _Up&&) typename std::enable_if<std::__and_<std::__not_<std::__is_tuple_like<_Tp> >, std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> >::value>::type std::swap(_Tp&, _Tp&) typename std::enable_if<std::__is_swappable<_Tp>::value>::type std::swap(_Tp (&)[_Nm], _Tp (&)[_Nm]) std::nested_exception::nested_exception() std::nested_exception::nested_exception() std::nested_exception::nested_exception() void std::nested_exception::rethrow_nested() const std::__exception_ptr::exception_ptr std::nested_exception::nested_ptr() const std::_Nested_exception<_Except>::_Nested_exception(const _Except&) std::_Nested_exception<_Except>::_Nested_exception(_Except&&) void std::__throw_with_nested_impl(_Tp&&, std::true_type) void std::__throw_with_nested_impl(_Tp&&, std::false_type) void std::throw_with_nested(_Tp&&) std::__rethrow_if_nested_cond<_Ex> std::__rethrow_if_nested_impl(const _Ex*) void std::__rethrow_if_nested_impl(const void*) void std::rethrow_if_nested(const _Ex&) std::bad_alloc::bad_alloc() std::bad_alloc::bad_alloc() std::bad_alloc::bad_alloc() std::bad_array_new_length::bad_array_new_length() std::bad_array_new_length::bad_array_new_length() std::bad_array_new_length::bad_array_new_length() void* operator new(std::size_t, void*) void* operator new [](std::size_t, void*) void operator delete(void*, void*) void operator delete [](void*, void*) constexpr _Tp* std::launder(_Tp*) void* operator new(std::size_t, std::align_val_t)cc1plus was compiled with optimization - stepping may behave oddly; variables may not be available.
Process 10880 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100c21378 cc1plus`internal_error(gmsgid="in %s, at %s:%d") at diagnostic.c:1441 [opt]
   1438	internal_error (const char *gmsgid, ...)
   1439	{
   1440	  va_list ap;
-> 1441	  va_start (ap, gmsgid);
   1442	  rich_location richloc (line_table, input_location);
   1443	  diagnostic_impl (&richloc, -1, gmsgid, &ap, DK_ICE);
   1444	  va_end (ap);
Target 0: (cc1plus) stopped.
(lldb) frame sel 2
frame #2: 0x0000000100074b36 cc1plus`import_export_decl(decl=0x000000014269c750) at decl2.c:2877 [opt]
   2874	  gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
   2875	  /* Any code that creates entities with TREE_PUBLIC cleared should
   2876	     also set DECL_INTERFACE_KNOWN.  */
-> 2877	  gcc_assert (TREE_PUBLIC (decl));
   2878	  if (TREE_CODE (decl) == FUNCTION_DECL)
   2879	    gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
   2880			|| DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
(lldb) call debug_tree(decl)
 <var_decl 0x14269c750 value
    type <boolean_type 0x1426aa5e8 bool readonly unsigned type_6 QI
        size <integer_cst 0x142502768 constant 8>
        unit-size <integer_cst 0x142502780 constant 1>
        align:8 warn_if_not_align:0 symtab:150 alias-set -1 canonical-type 0x1426aa5e8 precision:1 min <integer_cst 0x1425029d8 0> max <integer_cst 0x142502a08 1>>
    readonly constant used static tree_1 tree_2 tree_3 unsigned nonlocal in_system_header read decl_1 QI /Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits:59:28 size <integer_cst 0x142502768 8> unit-size <integer_cst 0x142502780 1>
    align:8 warn_if_not_align:0 context <record_type 0x1426a7e70 integral_constant> initial <integer_cst 0x1425029d8 0>
    template-info 0x1426a64e0 chain <function_decl 0x1426a0600 __conv_op >>
(lldb) 

Build/configure info:

pkoning:gcc pkoning$ ./xg++ --verbose
Using built-in specs.
COLLECT_GCC=./xg++
Target: pdp11-aout
Configured with: ../gcc/configure --target=pdp11-aout --prefix=/usr/local/pdp11-aout --without-x target_alias=pdp11-aout --with-mpc=/usr/local --with-mpfr=/usr/local --with-gmp=/usr/local --disable-libssp --disable-shared --with-newlib --enable-languages=c,c++,fortran --enable-checking=rtl
Thread model: single
gcc version 9.0.0 20180716 (experimental) (GCC) 

The new_opa.ii file is attached.

	paul


[-- Attachment #2: new_opa.ii --]
[-- Type: application/octet-stream, Size: 147908 bytes --]

# 1 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc"
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/libsupc++//"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc"
# 26 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc"
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/c++config.h" 1
# 244 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/c++config.h"
namespace std
{
  typedef short unsigned int size_t;
  typedef short int ptrdiff_t;


  typedef decltype(nullptr) nullptr_t;

}
# 266 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/c++config.h"
namespace std
{
  inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
namespace __gnu_cxx
{
  inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
# 516 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/c++config.h"
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/os_defines.h" 1
# 517 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/c++config.h" 2


# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/cpu_defines.h" 1
# 520 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/pdp11-aout/bits/c++config.h" 2
# 27 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc" 2
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/stdlib.h" 1
# 36 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/stdlib.h"
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib" 1
# 39 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib"
       
# 40 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib" 3
# 75 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib" 3
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 1 3 4
# 10 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/machine/ieeefp.h" 1 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/sys/config.h" 1 3 4
# 9 "/usr/local/pdp11-aout/pdp11-aout/include/sys/config.h" 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/machine/ieeefp.h" 1 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/sys/config.h" 1 3 4
# 2 "/usr/local/pdp11-aout/pdp11-aout/include/machine/ieeefp.h" 2 3 4
# 10 "/usr/local/pdp11-aout/pdp11-aout/include/sys/config.h" 2 3 4
# 2 "/usr/local/pdp11-aout/pdp11-aout/include/machine/ieeefp.h" 2 3 4
# 11 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 2 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/_ansi.h" 1 3 4
# 15 "/usr/local/pdp11-aout/pdp11-aout/include/_ansi.h" 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/newlib.h" 1 3 4
# 16 "/usr/local/pdp11-aout/pdp11-aout/include/_ansi.h" 2 3 4
# 12 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 2 3 4



# 1 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 1 3 4
# 209 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 3 4

# 209 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 3 4
typedef short unsigned int size_t;
# 16 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 2 3 4

# 1 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 1 3 4
# 9 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
extern "C" {



# 1 "/usr/local/pdp11-aout/pdp11-aout/include/_ansi.h" 1 3 4
# 14 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 2 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/sys/_types.h" 1 3 4
# 12 "/usr/local/pdp11-aout/pdp11-aout/include/sys/_types.h" 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_types.h" 1 3 4







# 1 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 1 3 4
# 9 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 3 4
extern "C" {
# 26 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 3 4
typedef signed char __int8_t ;
typedef unsigned char __uint8_t ;




typedef signed int __int16_t;
typedef unsigned int __uint16_t;
# 46 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 3 4
typedef __int16_t __int_least16_t;
typedef __uint16_t __uint_least16_t;
# 62 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 3 4
typedef signed long __int32_t;
typedef unsigned long __uint32_t;
# 76 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 3 4
typedef __int32_t __int_least32_t;
typedef __uint32_t __uint_least32_t;
# 99 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 3 4
typedef signed long long __int64_t;
typedef unsigned long long __uint64_t;
# 118 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_default_types.h" 3 4
}
# 9 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_types.h" 2 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/machine/endian.h" 1 3 4
# 10 "/usr/local/pdp11-aout/pdp11-aout/include/machine/_types.h" 2 3 4

typedef int blksize_t;
typedef int blkcnt_t;

typedef int _ssize_t;
# 13 "/usr/local/pdp11-aout/pdp11-aout/include/sys/_types.h" 2 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/sys/lock.h" 1 3 4





typedef int _LOCK_T;
typedef int _LOCK_RECURSIVE_T;
# 14 "/usr/local/pdp11-aout/pdp11-aout/include/sys/_types.h" 2 3 4


typedef long _off_t;







typedef short __dev_t;




typedef unsigned short __uid_t;


typedef unsigned short __gid_t;



__extension__ typedef long long _off64_t;







typedef long _fpos_t;
# 63 "/usr/local/pdp11-aout/pdp11-aout/include/sys/_types.h" 3 4
# 1 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 1 3 4
# 350 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 3 4
typedef unsigned int wint_t;
# 64 "/usr/local/pdp11-aout/pdp11-aout/include/sys/_types.h" 2 3 4



typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    unsigned char __wchb[4];
  } __value;
} _mbstate_t;



typedef _LOCK_RECURSIVE_T _flock_t;




typedef void *_iconv_t;
# 15 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 2 3 4






typedef unsigned long __ULong;
# 37 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
struct _reent;






struct _Bigint
{
  struct _Bigint *_next;
  int _k, _maxwds, _sign, _wds;
  __ULong _x[1];
};


struct __tm
{
  int __tm_sec;
  int __tm_min;
  int __tm_hour;
  int __tm_mday;
  int __tm_mon;
  int __tm_year;
  int __tm_wday;
  int __tm_yday;
  int __tm_isdst;
};







struct _on_exit_args {
 void * _fnargs[32];
 void * _dso_handle[32];

 __ULong _fntypes;


 __ULong _is_cxa;
};
# 89 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
struct _atexit {
 struct _atexit *_next;
 int _ind;

 void (*_fns[32])(void);
        struct _on_exit_args _on_exit_args;
};
# 105 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
struct __sbuf {
 unsigned char *_base;
 int _size;
};
# 169 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
struct __sFILE {
  unsigned char *_p;
  int _r;
  int _w;
  short _flags;
  short _file;
  struct __sbuf _bf;
  int _lbfsize;






  void * _cookie;

  int (* _read) (struct _reent *, void *, char *, int)
                     ;
  int (* _write) (struct _reent *, void *, const char *, int)
                            ;
  _fpos_t (* _seek) (struct _reent *, void *, _fpos_t, int);
  int (* _close) (struct _reent *, void *);


  struct __sbuf _ub;
  unsigned char *_up;
  int _ur;


  unsigned char _ubuf[3];
  unsigned char _nbuf[1];


  struct __sbuf _lb;


  int _blksize;
  int _offset;


  struct _reent *_data;



  _flock_t _lock;

  _mbstate_t _mbstate;
  int _flags2;
};
# 273 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
typedef struct __sFILE __FILE;



struct _glue
{
  struct _glue *_next;
  int _niobs;
  __FILE *_iobs;
};
# 305 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
struct _rand48 {
  unsigned short _seed[3];
  unsigned short _mult[3];
  unsigned short _add;




};
# 579 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
struct _reent
{
  int _errno;




  __FILE *_stdin, *_stdout, *_stderr;

  int _inc;
  char _emergency[25];

  int _current_category;
  const char *_current_locale;

  int __sdidinit;

  void (* __cleanup) (struct _reent *);


  struct _Bigint *_result;
  int _result_k;
  struct _Bigint *_p5s;
  struct _Bigint **_freelist;


  int _cvtlen;
  char *_cvtbuf;

  union
    {
      struct
        {
          unsigned int _unused_rand;
          char * _strtok_last;
          char _asctime_buf[26];
          struct __tm _localtime_buf;
          int _gamma_signgam;
          __extension__ unsigned long long _rand_next;
          struct _rand48 _r48;
          _mbstate_t _mblen_state;
          _mbstate_t _mbtowc_state;
          _mbstate_t _wctomb_state;
          char _l64a_buf[8];
          char _signal_buf[24];
          int _getdate_err;
          _mbstate_t _mbrlen_state;
          _mbstate_t _mbrtowc_state;
          _mbstate_t _mbsrtowcs_state;
          _mbstate_t _wcrtomb_state;
          _mbstate_t _wcsrtombs_state;
   int _h_errno;
        } _reent;



      struct
        {

          unsigned char * _nextf[30];
          unsigned int _nmalloc[30];
        } _unused;
    } _new;


  struct _atexit *_atexit;
  struct _atexit _atexit0;


  void (**(_sig_func))(int);




  struct _glue __sglue;
  __FILE __sf[3];
};
# 817 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
extern struct _reent *_impure_ptr ;
extern struct _reent *const _global_impure_ptr ;

void _reclaim_reent (struct _reent *);
# 840 "/usr/local/pdp11-aout/pdp11-aout/include/sys/reent.h" 3 4
}
# 18 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 2 3 4
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/machine/stdlib.h" 1 3 4
# 19 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 2 3 4

# 1 "/usr/local/pdp11-aout/pdp11-aout/include/alloca.h" 1 3 4
# 21 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 2 3 4






extern "C" {

typedef struct
{
  int quot;
  int rem;
} div_t;

typedef struct
{
  long quot;
  long rem;
} ldiv_t;


typedef struct
{
  long long int quot;
  long long int rem;
} lldiv_t;
# 58 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 3 4
extern int __mb_cur_max;



void abort (void) __attribute__ ((noreturn));
int abs (int);
int atexit (void (*__func)(void));
double atof (const char *__nptr);

float atoff (const char *__nptr);

int atoi (const char *__nptr);
int _atoi_r (struct _reent *, const char *__nptr);
long atol (const char *__nptr);
long _atol_r (struct _reent *, const char *__nptr);
void * bsearch (const void * __key, const void * __base, size_t __nmemb, size_t __size, int (* _compar) (const void *, const void *))



                                                         ;
void * calloc (size_t __nmemb, size_t __size) __attribute__ ((nothrow));
div_t div (int __numer, int __denom);
void exit (int __status) __attribute__ ((noreturn));
void free (void *) __attribute__ ((nothrow));
char * getenv (const char *__string);
char * _getenv_r (struct _reent *, const char *__string);
char * _findenv (const char *, int *);
char * _findenv_r (struct _reent *, const char *, int *);
long labs (long);
ldiv_t ldiv (long __numer, long __denom);
void * malloc (size_t __size) __attribute__ ((nothrow));
int mblen (const char *, size_t);
int _mblen_r (struct _reent *, const char *, size_t, _mbstate_t *);
int mbtowc (wchar_t *, const char *, size_t);
int _mbtowc_r (struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *);
int wctomb (char *, wchar_t);
int _wctomb_r (struct _reent *, char *, wchar_t, _mbstate_t *);
size_t mbstowcs (wchar_t *, const char *, size_t);
size_t _mbstowcs_r (struct _reent *, wchar_t *, const char *, size_t, _mbstate_t *);
size_t wcstombs (char *, const wchar_t *, size_t);
size_t _wcstombs_r (struct _reent *, char *, const wchar_t *, size_t, _mbstate_t *);


char * mkdtemp (char *);
int mkstemp (char *);
int mkstemps (char *, int);
char * mktemp (char *) __attribute__ ((warning ("the use of `mktemp' is dangerous; use `mkstemp' instead")));

char * _mkdtemp_r (struct _reent *, char *);
int _mkstemp_r (struct _reent *, char *);
int _mkstemps_r (struct _reent *, char *, int);
char * _mktemp_r (struct _reent *, char *) __attribute__ ((warning ("the use of `mktemp' is dangerous; use `mkstemp' instead")));

void qsort (void * __base, size_t __nmemb, size_t __size, int(*_compar)(const void *, const void *));
int rand (void);
void * realloc (void * __r, size_t __size) __attribute__ ((nothrow));

void * reallocf (void * __r, size_t __size);

void srand (unsigned __seed);
double strtod (const char *__n, char **__end_PTR);
double _strtod_r (struct _reent *,const char *__n, char **__end_PTR);
float strtof (const char *__n, char **__end_PTR);






long strtol (const char *__n, char **__end_PTR, int __base);
long _strtol_r (struct _reent *,const char *__n, char **__end_PTR, int __base);
unsigned long strtoul (const char *__n, char **__end_PTR, int __base);
unsigned long _strtoul_r (struct _reent *,const char *__n, char **__end_PTR, int __base);

int system (const char *__string);


long a64l (const char *__input);
char * l64a (long __input);
char * _l64a_r (struct _reent *,long __input);
int on_exit (void (*__func)(int, void *),void * __arg);
void _Exit (int __status) __attribute__ ((noreturn));
int putenv (char *__string);
int _putenv_r (struct _reent *, char *__string);
void * _reallocf_r (struct _reent *, void *, size_t);
int setenv (const char *__string, const char *__value, int __overwrite);
int _setenv_r (struct _reent *, const char *__string, const char *__value, int __overwrite);

char * gcvt (double,int,char *);
char * gcvtf (float,int,char *);
char * fcvt (double,int,int *,int *);
char * fcvtf (float,int,int *,int *);
char * ecvt (double,int,int *,int *);
char * ecvtbuf (double, int, int*, int*, char *);
char * fcvtbuf (double, int, int*, int*, char *);
char * ecvtf (float,int,int *,int *);
char * dtoa (double, int, int, int *, int*, char**);
int rand_r (unsigned *__seed);

double drand48 (void);
double _drand48_r (struct _reent *);
double erand48 (unsigned short [3]);
double _erand48_r (struct _reent *, unsigned short [3]);
long jrand48 (unsigned short [3]);
long _jrand48_r (struct _reent *, unsigned short [3]);
void lcong48 (unsigned short [7]);
void _lcong48_r (struct _reent *, unsigned short [7]);
long lrand48 (void);
long _lrand48_r (struct _reent *);
long mrand48 (void);
long _mrand48_r (struct _reent *);
long nrand48 (unsigned short [3]);
long _nrand48_r (struct _reent *, unsigned short [3]);
unsigned short *
       seed48 (unsigned short [3]);
unsigned short *
       _seed48_r (struct _reent *, unsigned short [3]);
void srand48 (long);
void _srand48_r (struct _reent *, long);
long long atoll (const char *__nptr);
long long _atoll_r (struct _reent *, const char *__nptr);
long long llabs (long long);
lldiv_t lldiv (long long __numer, long long __denom);
long long strtoll (const char *__n, char **__end_PTR, int __base);
long long _strtoll_r (struct _reent *, const char *__n, char **__end_PTR, int __base);
unsigned long long strtoull (const char *__n, char **__end_PTR, int __base);
unsigned long long _strtoull_r (struct _reent *, const char *__n, char **__end_PTR, int __base);


void cfree (void *);
int unsetenv (const char *__string);
int _unsetenv_r (struct _reent *, const char *__string);
# 198 "/usr/local/pdp11-aout/pdp11-aout/include/stdlib.h" 3 4
char * _dtoa_r (struct _reent *, double, int, int, int *, int*, char**);

void * _malloc_r (struct _reent *, size_t) __attribute__ ((nothrow));
void * _calloc_r (struct _reent *, size_t, size_t) __attribute__ ((nothrow));
void _free_r (struct _reent *, void *) __attribute__ ((nothrow));
void * _realloc_r (struct _reent *, void *, size_t) __attribute__ ((nothrow));
void _mstats_r (struct _reent *, char *);

int _system_r (struct _reent *, const char *);

void __eprintf (const char *, const char *, unsigned int, const char *);



extern long double strtold (const char *, char **);
extern long double wcstold (const wchar_t *, wchar_t **);


}
# 76 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib" 2 3

# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 1 3
# 33 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 3
       
# 34 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 3
# 46 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 3
extern "C++"
{
namespace std
{


  using ::abs;


  inline long
  abs(long __i) { return __builtin_labs(__i); }



  inline long long
  abs(long long __x) { return __builtin_llabs (__x); }







  inline 
# 69 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h"
        constexpr 
# 69 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 3
                           double
  abs(double __x)
  { return __builtin_fabs(__x); }

  inline 
# 73 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h"
        constexpr 
# 73 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 3
                           float
  abs(float __x)
  { return __builtin_fabsf(__x); }

  inline 
# 77 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h"
        constexpr 
# 77 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 3
                           long double
  abs(long double __x)
  { return __builtin_fabsl(__x); }
# 106 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/std_abs.h" 3

}
}
# 78 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib" 2 3
# 121 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib" 3
extern "C++"
{
namespace std
{


  using ::div_t;
  using ::ldiv_t;

  using ::abort;



  using ::atexit;





  using ::atof;
  using ::atoi;
  using ::atol;
  using ::bsearch;
  using ::calloc;
  using ::div;
  using ::exit;
  using ::free;
  using ::getenv;
  using ::labs;
  using ::ldiv;
  using ::malloc;

  using ::mblen;
  using ::mbstowcs;
  using ::mbtowc;

  using ::qsort;





  using ::rand;
  using ::realloc;
  using ::srand;
  using ::strtod;
  using ::strtol;
  using ::strtoul;
  using ::system;

  using ::wcstombs;
  using ::wctomb;



  inline ldiv_t
  div(long __i, long __j) { return ldiv(__i, __j); }




}
# 257 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/cstdlib" 3
}
# 37 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/stdlib.h" 2


# 38 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/stdlib.h"
using std::abort;
using std::atexit;
using std::exit;
# 51 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/stdlib.h"
using std::div_t;
using std::ldiv_t;

using std::abs;
using std::atof;
using std::atoi;
using std::atol;
using std::bsearch;
using std::calloc;
using std::div;
using std::free;
using std::getenv;
using std::labs;
using std::ldiv;
using std::malloc;

using std::mblen;
using std::mbstowcs;
using std::mbtowc;

using std::qsort;
using std::rand;
using std::realloc;
using std::srand;
using std::strtod;
using std::strtol;
using std::strtoul;
using std::system;

using std::wcstombs;
using std::wctomb;
# 28 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc" 2
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_defines.h" 1
# 29 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc" 2
# 1 "../../../../gcc/libstdc++-v3/libsupc++/new" 1
# 37 "../../../../gcc/libstdc++-v3/libsupc++/new"
       
# 38 "../../../../gcc/libstdc++-v3/libsupc++/new" 3


# 1 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 1 3
# 33 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
       
# 34 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3

#pragma GCC visibility push(default)


# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 1 3
# 34 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 3
       
# 35 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 3

#pragma GCC visibility push(default)




# 40 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 3
extern "C++" {

namespace std
{
# 60 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 3
  class exception
  {
  public:
    exception() 
# 63 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h"
               noexcept 
# 63 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 3
                                { }
    virtual ~exception() 
# 64 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h"
                                              noexcept
# 64 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 3
                                                              ;

    exception(const exception&) = default;
    exception& operator=(const exception&) = default;
    exception(exception&&) = default;
    exception& operator=(exception&&) = default;




    virtual const char*
    what() const 
# 75 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h"
                                      noexcept
# 75 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception.h" 3
                                                      ;
  };

}

}

#pragma GCC visibility pop
# 39 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 2 3

extern "C++" {

namespace std
{


  class bad_exception : public exception
  {
  public:
    bad_exception() 
# 49 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                   noexcept 
# 49 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                         { }



    virtual ~bad_exception() 
# 53 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                                                  noexcept
# 53 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                                                       ;


    virtual const char*
    what() const 
# 57 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                                      noexcept
# 57 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                                           ;
  };


  typedef void (*terminate_handler) ();


  typedef void (*unexpected_handler) ();


  terminate_handler set_terminate(terminate_handler) 
# 67 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                                                    noexcept
# 67 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                                                         ;



  terminate_handler get_terminate() noexcept;




  void terminate() 
# 76 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                  noexcept 
# 76 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                        __attribute__ ((__noreturn__));


  unexpected_handler set_unexpected(unexpected_handler) 
# 79 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                                                       noexcept
# 79 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                                                            ;



  unexpected_handler get_unexpected() noexcept;




  void unexpected() __attribute__ ((__noreturn__));
# 101 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
  
# 101 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
 [[__deprecated__]]
  
# 102 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
 bool uncaught_exception() 
# 102 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                           noexcept 
# 102 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                                 __attribute__ ((__pure__));




  int uncaught_exceptions() 
# 107 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception"
                           noexcept 
# 107 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
                                                 __attribute__ ((__pure__));



}

namespace __gnu_cxx
{

# 133 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 3
  void __verbose_terminate_handler();


}

}

#pragma GCC visibility pop


# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 1 3
# 34 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
#pragma GCC visibility push(default)



# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 1 3
# 34 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 3
       
# 35 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 3

#pragma GCC visibility push(default)

# 1 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 1 3 4
# 143 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 3 4
typedef short int ptrdiff_t;
# 415 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 3 4
typedef struct {
  long long __max_align_ll __attribute__((__aligned__(__alignof__(long long))));
  long double __max_align_ld __attribute__((__aligned__(__alignof__(long double))));
# 426 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 3 4
} max_align_t;






  typedef decltype(nullptr) nullptr_t;
# 39 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 2 3
# 50 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 3
namespace std
{
  class type_info;
}

namespace __cxxabiv1
{
  struct __cxa_refcounted_exception;

  extern "C"
    {

      void*
      __cxa_allocate_exception(size_t) 
# 63 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h"
                                      noexcept
# 63 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 3
                                                      ;

      void
      __cxa_free_exception(void*) 
# 66 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h"
                                 noexcept
# 66 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 3
                                                 ;


      __cxa_refcounted_exception*
      __cxa_init_primary_exception(void *object, std::type_info *tinfo,
                void ( *dest) (void *)) 
# 71 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h"
                                                             noexcept
# 71 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/cxxabi_init_exception.h" 3
                                                                             ;

    }
}



#pragma GCC visibility pop
# 39 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 2 3
# 1 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 1 3
# 32 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
       
# 33 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3



# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/hash_bytes.h" 1 3
# 33 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/hash_bytes.h" 3
       
# 34 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/hash_bytes.h" 3



namespace std
{







  size_t
  _Hash_bytes(const void* __ptr, size_t __len, size_t __seed);





  size_t
  _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);


}
# 37 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 2 3


#pragma GCC visibility push(default)

extern "C++" {

namespace __cxxabiv1
{
  class __class_type_info;
}
# 80 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
namespace std
{






  class type_info
  {
  public:




    virtual ~type_info();



    const char* name() const 
# 99 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                            noexcept
    
# 100 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
   { return __name[0] == '*' ? __name + 1 : __name; }





    bool before(const type_info& __arg) const 
# 106 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                                             noexcept
# 106 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                                              ;
    bool operator==(const type_info& __arg) const 
# 107 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                                                 noexcept
# 107 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                                                  ;
# 136 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
    bool operator!=(const type_info& __arg) const 
# 136 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                                                 noexcept
    
# 137 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
   { return !operator==(__arg); }


    size_t hash_code() const noexcept
    {

      return _Hash_bytes(name(), __builtin_strlen(name()),
    static_cast<size_t>(0xc70f6907UL));



    }



    virtual bool __is_pointer_p() const;


    virtual bool __is_function_p() const;







    virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj,
       unsigned __outer) const;


    virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target,
        void **__obj_ptr) const;

  protected:
    const char *__name;

    explicit type_info(const char *__n): __name(__n) { }

  private:

    type_info& operator=(const type_info&);
    type_info(const type_info&);
  };







  class bad_cast : public exception
  {
  public:
    bad_cast() 
# 190 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
              noexcept 
# 190 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                    { }



    virtual ~bad_cast() 
# 194 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                       noexcept
# 194 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                            ;


    virtual const char* what() const 
# 197 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                                    noexcept
# 197 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                                         ;
  };





  class bad_typeid : public exception
  {
  public:
    bad_typeid () 
# 207 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                 noexcept 
# 207 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                       { }



    virtual ~bad_typeid() 
# 211 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                         noexcept
# 211 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                              ;


    virtual const char* what() const 
# 214 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo"
                                    noexcept
# 214 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/typeinfo" 3
                                                         ;
  };
}

}

#pragma GCC visibility pop
# 40 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 2 3
# 1 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/new" 1 3
# 41 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 2 3

extern "C++" {

namespace std
{
  class type_info;





  namespace __exception_ptr
  {
    class exception_ptr;
  }

  using __exception_ptr::exception_ptr;





  exception_ptr current_exception() 
# 63 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                   noexcept
# 63 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                                        ;

  template<typename _Ex>
  exception_ptr make_exception_ptr(_Ex) 
# 66 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                       noexcept
# 66 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                                            ;


  void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__));

  namespace __exception_ptr
  {
    using std::rethrow_exception;





    class exception_ptr
    {
      void* _M_exception_object;

      explicit exception_ptr(void* __e) 
# 83 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                       noexcept
# 83 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                                            ;

      void _M_addref() 
# 85 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                      noexcept
# 85 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                           ;
      void _M_release() 
# 86 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                       noexcept
# 86 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                            ;

      void *_M_get() const 
# 88 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                          noexcept 
# 88 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                            __attribute__ ((__pure__));

      friend exception_ptr std::current_exception() 
# 90 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                                   noexcept
# 90 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                                                        ;
      friend void std::rethrow_exception(exception_ptr);
      template<typename _Ex>
      friend exception_ptr std::make_exception_ptr(_Ex) 
# 93 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                                       noexcept
# 93 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                                                            ;

    public:
      exception_ptr() 
# 96 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                     noexcept
# 96 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                          ;

      exception_ptr(const exception_ptr&) 
# 98 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                         noexcept
# 98 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                                              ;


      exception_ptr(nullptr_t) noexcept
      : _M_exception_object(0)
      { }

      exception_ptr(exception_ptr&& __o) noexcept
      : _M_exception_object(__o._M_exception_object)
      { __o._M_exception_object = 0; }
# 117 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
      exception_ptr&
      operator=(const exception_ptr&) 
# 118 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                     noexcept
# 118 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                                          ;


      exception_ptr&
      operator=(exception_ptr&& __o) noexcept
      {
        exception_ptr(static_cast<exception_ptr&&>(__o)).swap(*this);
        return *this;
      }


      ~exception_ptr() 
# 129 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                      noexcept
# 129 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                           ;

      void
      swap(exception_ptr&) 
# 132 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                          noexcept
# 132 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                                               ;
# 144 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
      explicit operator bool() const
      { return _M_exception_object; }


      friend bool
      operator==(const exception_ptr&, const exception_ptr&)
 
# 150 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
noexcept 
# 150 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                      __attribute__ ((__pure__));

      const class std::type_info*
      __cxa_exception_type() const 
# 153 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                  noexcept
 
# 154 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
__attribute__ ((__pure__));
    };

    bool
    operator==(const exception_ptr&, const exception_ptr&)
      
# 159 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
     noexcept 
# 159 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                           __attribute__ ((__pure__));

    bool
    operator!=(const exception_ptr&, const exception_ptr&)
      
# 163 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
     noexcept 
# 163 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
                           __attribute__ ((__pure__));

    inline void
    swap(exception_ptr& __lhs, exception_ptr& __rhs)
    { __lhs.swap(__rhs); }

    template<typename _Ex>
      inline void
      __dest_thunk(void* __x)
      { static_cast<_Ex*>(__x)->~_Ex(); }

  }


  template<typename _Ex>
    exception_ptr
    make_exception_ptr(_Ex __ex) 
# 179 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h"
                                noexcept
    
# 180 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
   {

      void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex));
      (void) __cxxabiv1::__cxa_init_primary_exception(
   __e, const_cast<std::type_info*>(&typeid(__ex)),
   __exception_ptr::__dest_thunk<_Ex>);
      try
 {
          ::new (__e) _Ex(__ex);
          return exception_ptr(__e);
 }
      catch(...)
 {
   __cxxabiv1::__cxa_free_exception(__e);
   return current_exception();
 }
# 208 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/exception_ptr.h" 3
    }


}

}

#pragma GCC visibility pop
# 144 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 2 3
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/nested_exception.h" 1 3
# 33 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/nested_exception.h" 3
#pragma GCC visibility push(default)






# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 1 3
# 34 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/concept_check.h" 1 3
# 33 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/concept_check.h" 3
       
# 34 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/concept_check.h" 3
# 35 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 2 3

namespace std
{







  template<typename _Tp>
    inline 
# 46 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h"
          constexpr 
# 46 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
                             _Tp*
    __addressof(_Tp& __r) 
# 47 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h"
                         noexcept
    
# 48 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
   { return __builtin_addressof(__r); }




}

# 1 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 1 3
# 32 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
       
# 33 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3







namespace std
{

# 56 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp, _Tp __v>
    struct integral_constant
    {
      static constexpr _Tp value = __v;
      typedef _Tp value_type;
      typedef integral_constant<_Tp, __v> type;
      constexpr operator value_type() const noexcept { return value; }




      constexpr value_type operator()() const noexcept { return value; }

    };

  template<typename _Tp, _Tp __v>
    constexpr _Tp integral_constant<_Tp, __v>::value;


  typedef integral_constant<bool, true> true_type;


  typedef integral_constant<bool, false> false_type;

  template<bool __v>
    using __bool_constant = integral_constant<bool, __v>;



  template<bool __v>
    using bool_constant = integral_constant<bool, __v>;




  template<bool, typename, typename>
    struct conditional;

  template<typename...>
    struct __or_;

  template<>
    struct __or_<>
    : public false_type
    { };

  template<typename _B1>
    struct __or_<_B1>
    : public _B1
    { };

  template<typename _B1, typename _B2>
    struct __or_<_B1, _B2>
    : public conditional<_B1::value, _B1, _B2>::type
    { };

  template<typename _B1, typename _B2, typename _B3, typename... _Bn>
    struct __or_<_B1, _B2, _B3, _Bn...>
    : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
    { };

  template<typename...>
    struct __and_;

  template<>
    struct __and_<>
    : public true_type
    { };

  template<typename _B1>
    struct __and_<_B1>
    : public _B1
    { };

  template<typename _B1, typename _B2>
    struct __and_<_B1, _B2>
    : public conditional<_B1::value, _B2, _B1>::type
    { };

  template<typename _B1, typename _B2, typename _B3, typename... _Bn>
    struct __and_<_B1, _B2, _B3, _Bn...>
    : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type
    { };

  template<typename _Pp>
    struct __not_
    : public __bool_constant<!bool(_Pp::value)>
    { };





  template<typename... _Bn>
    struct conjunction
    : __and_<_Bn...>
    { };

  template<typename... _Bn>
    struct disjunction
    : __or_<_Bn...>
    { };

  template<typename _Pp>
    struct negation
    : __not_<_Pp>
    { };

  template<typename... _Bn>
    inline constexpr bool conjunction_v = conjunction<_Bn...>::value;

  template<typename... _Bn>
    inline constexpr bool disjunction_v = disjunction<_Bn...>::value;

  template<typename _Pp>
    inline constexpr bool negation_v = negation<_Pp>::value;
# 180 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp>
    struct __success_type
    { typedef _Tp type; };

  struct __failure_type
  { };



  template<typename>
    struct remove_cv;

  template<typename>
    struct __is_void_helper
    : public false_type { };

  template<>
    struct __is_void_helper<void>
    : public true_type { };


  template<typename _Tp>
    struct is_void
    : public __is_void_helper<typename remove_cv<_Tp>::type>::type
    { };

  template<typename>
    struct __is_integral_helper
    : public false_type { };

  template<>
    struct __is_integral_helper<bool>
    : public true_type { };

  template<>
    struct __is_integral_helper<char>
    : public true_type { };

  template<>
    struct __is_integral_helper<signed char>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned char>
    : public true_type { };


  template<>
    struct __is_integral_helper<wchar_t>
    : public true_type { };


  template<>
    struct __is_integral_helper<char16_t>
    : public true_type { };

  template<>
    struct __is_integral_helper<char32_t>
    : public true_type { };

  template<>
    struct __is_integral_helper<short>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned short>
    : public true_type { };

  template<>
    struct __is_integral_helper<int>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned int>
    : public true_type { };

  template<>
    struct __is_integral_helper<long>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned long>
    : public true_type { };

  template<>
    struct __is_integral_helper<long long>
    : public true_type { };

  template<>
    struct __is_integral_helper<unsigned long long>
    : public true_type { };
# 312 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp>
    struct is_integral
    : public __is_integral_helper<typename remove_cv<_Tp>::type>::type
    { };

  template<typename>
    struct __is_floating_point_helper
    : public false_type { };

  template<>
    struct __is_floating_point_helper<float>
    : public true_type { };

  template<>
    struct __is_floating_point_helper<double>
    : public true_type { };

  template<>
    struct __is_floating_point_helper<long double>
    : public true_type { };
# 340 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp>
    struct is_floating_point
    : public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
    { };


  template<typename>
    struct is_array
    : public false_type { };

  template<typename _Tp, std::size_t _Size>
    struct is_array<_Tp[_Size]>
    : public true_type { };

  template<typename _Tp>
    struct is_array<_Tp[]>
    : public true_type { };

  template<typename>
    struct __is_pointer_helper
    : public false_type { };

  template<typename _Tp>
    struct __is_pointer_helper<_Tp*>
    : public true_type { };


  template<typename _Tp>
    struct is_pointer
    : public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
    { };


  template<typename>
    struct is_lvalue_reference
    : public false_type { };

  template<typename _Tp>
    struct is_lvalue_reference<_Tp&>
    : public true_type { };


  template<typename>
    struct is_rvalue_reference
    : public false_type { };

  template<typename _Tp>
    struct is_rvalue_reference<_Tp&&>
    : public true_type { };

  template<typename>
    struct is_function;

  template<typename>
    struct __is_member_object_pointer_helper
    : public false_type { };

  template<typename _Tp, typename _Cp>
    struct __is_member_object_pointer_helper<_Tp _Cp::*>
    : public integral_constant<bool, !is_function<_Tp>::value> { };


  template<typename _Tp>
    struct is_member_object_pointer
    : public __is_member_object_pointer_helper<
    typename remove_cv<_Tp>::type>::type
    { };

  template<typename>
    struct __is_member_function_pointer_helper
    : public false_type { };

  template<typename _Tp, typename _Cp>
    struct __is_member_function_pointer_helper<_Tp _Cp::*>
    : public integral_constant<bool, is_function<_Tp>::value> { };


  template<typename _Tp>
    struct is_member_function_pointer
    : public __is_member_function_pointer_helper<
    typename remove_cv<_Tp>::type>::type
    { };


  template<typename _Tp>
    struct is_enum
    : public integral_constant<bool, __is_enum(_Tp)>
    { };


  template<typename _Tp>
    struct is_union
    : public integral_constant<bool, __is_union(_Tp)>
    { };


  template<typename _Tp>
    struct is_class
    : public integral_constant<bool, __is_class(_Tp)>
    { };


  template<typename>
    struct is_function
    : public false_type { };

  template<typename _Res, typename... _ArgTypes 
# 446 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 446 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) 
# 447 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                         noexcept (_NE)
# 447 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                               >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 450 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 450 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) & 
# 451 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                           noexcept (_NE)
# 451 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                 >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 454 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 454 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) && 
# 455 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                            noexcept (_NE)
# 455 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                  >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 458 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 458 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) 
# 459 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                            noexcept (_NE)
# 459 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                  >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 462 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 462 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) & 
# 463 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                              noexcept (_NE)
# 463 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                    >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 466 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 466 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) && 
# 467 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               noexcept (_NE)
# 467 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 470 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 470 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) const 
# 471 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               noexcept (_NE)
# 471 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 474 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 474 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) const & 
# 475 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                 noexcept (_NE)
# 475 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                       >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 478 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 478 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) const && 
# 479 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                  noexcept (_NE)
# 479 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                        >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 482 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 482 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) const 
# 483 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                  noexcept (_NE)
# 483 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                        >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 486 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 486 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) const & 
# 487 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                    noexcept (_NE)
# 487 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                          >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 490 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 490 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) const && 
# 491 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                     noexcept (_NE)
# 491 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                           >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 494 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 494 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) volatile 
# 495 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                  noexcept (_NE)
# 495 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                        >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 498 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 498 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) volatile & 
# 499 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                    noexcept (_NE)
# 499 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                          >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 502 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 502 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) volatile && 
# 503 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                     noexcept (_NE)
# 503 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                           >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 506 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 506 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) volatile 
# 507 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                     noexcept (_NE)
# 507 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                           >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 510 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 510 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) volatile & 
# 511 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                       noexcept (_NE)
# 511 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                             >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 514 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 514 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) volatile && 
# 515 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                        noexcept (_NE)
# 515 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                              >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 518 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 518 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) const volatile 
# 519 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                        noexcept (_NE)
# 519 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                              >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 522 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 522 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) const volatile & 
# 523 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                          noexcept (_NE)
# 523 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                                >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 526 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 526 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes...) const volatile && 
# 527 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                           noexcept (_NE)
# 527 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                                 >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 530 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 530 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) const volatile 
# 531 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                           noexcept (_NE)
# 531 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                                 >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 534 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 534 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) const volatile & 
# 535 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                             noexcept (_NE)
# 535 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                                   >
    : public true_type { };

  template<typename _Res, typename... _ArgTypes 
# 538 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               , bool _NE
# 538 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    struct is_function<_Res(_ArgTypes......) const volatile && 
# 539 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                                              noexcept (_NE)
# 539 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                                    >
    : public true_type { };



  template<typename>
    struct __is_null_pointer_helper
    : public false_type { };

  template<>
    struct __is_null_pointer_helper<std::nullptr_t>
    : public true_type { };


  template<typename _Tp>
    struct is_null_pointer
    : public __is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
    { };


  template<typename _Tp>
    struct __is_nullptr_t
    : public is_null_pointer<_Tp>
    { };




  template<typename _Tp>
    struct is_reference
    : public __or_<is_lvalue_reference<_Tp>,
                   is_rvalue_reference<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_arithmetic
    : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_fundamental
    : public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
     is_null_pointer<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_object
    : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
                          is_void<_Tp>>>::type
    { };

  template<typename>
    struct is_member_pointer;


  template<typename _Tp>
    struct is_scalar
    : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
                   is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
    { };


  template<typename _Tp>
    struct is_compound
    : public integral_constant<bool, !is_fundamental<_Tp>::value> { };

  template<typename _Tp>
    struct __is_member_pointer_helper
    : public false_type { };

  template<typename _Tp, typename _Cp>
    struct __is_member_pointer_helper<_Tp _Cp::*>
    : public true_type { };


  template<typename _Tp>
    struct is_member_pointer
    : public __is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
    { };



  template<typename _Tp>
    struct __is_referenceable
    : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
    { };

  template<typename _Res, typename... _Args 
# 629 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                           , bool _NE
# 629 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                 >
    struct __is_referenceable<_Res(_Args...) 
# 630 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                            noexcept (_NE)
# 630 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                  >
    : public true_type
    { };

  template<typename _Res, typename... _Args 
# 634 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                           , bool _NE
# 634 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                 >
    struct __is_referenceable<_Res(_Args......) 
# 635 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
                                               noexcept (_NE)
# 635 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                                                                     >
    : public true_type
    { };




  template<typename>
    struct is_const
    : public false_type { };

  template<typename _Tp>
    struct is_const<_Tp const>
    : public true_type { };


  template<typename>
    struct is_volatile
    : public false_type { };

  template<typename _Tp>
    struct is_volatile<_Tp volatile>
    : public true_type { };


  template<typename _Tp>
    struct is_trivial
    : public integral_constant<bool, __is_trivial(_Tp)>
    { };


  template<typename _Tp>
    struct is_trivially_copyable
    : public integral_constant<bool, __is_trivially_copyable(_Tp)>
    { };


  template<typename _Tp>
    struct is_standard_layout
    : public integral_constant<bool, __is_standard_layout(_Tp)>
    { };



  template<typename _Tp>
    struct is_pod
    : public integral_constant<bool, __is_pod(_Tp)>
    { };


  template<typename _Tp>
    struct is_literal_type
    : public integral_constant<bool, __is_literal_type(_Tp)>
    { };


  template<typename _Tp>
    struct is_empty
    : public integral_constant<bool, __is_empty(_Tp)>
    { };


  template<typename _Tp>
    struct is_polymorphic
    : public integral_constant<bool, __is_polymorphic(_Tp)>
    { };




  template<typename _Tp>
    struct is_final
    : public integral_constant<bool, __is_final(_Tp)>
    { };



  template<typename _Tp>
    struct is_abstract
    : public integral_constant<bool, __is_abstract(_Tp)>
    { };

  template<typename _Tp,
    bool = is_arithmetic<_Tp>::value>
    struct __is_signed_helper
    : public false_type { };

  template<typename _Tp>
    struct __is_signed_helper<_Tp, true>
    : public integral_constant<bool, _Tp(-1) < _Tp(0)>
    { };


  template<typename _Tp>
    struct is_signed
    : public __is_signed_helper<_Tp>::type
    { };


  template<typename _Tp>
    struct is_unsigned
    : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>
    { };
# 747 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp, typename _Up = _Tp&&>
    _Up
    __declval(int);

  template<typename _Tp>
    _Tp
    __declval(long);

  template<typename _Tp>
    auto declval() noexcept -> decltype(__declval<_Tp>(0));

  template<typename, unsigned = 0>
    struct extent;

  template<typename>
    struct remove_all_extents;

  template<typename _Tp>
    struct __is_array_known_bounds
    : public integral_constant<bool, (extent<_Tp>::value > 0)>
    { };

  template<typename _Tp>
    struct __is_array_unknown_bounds
    : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>
    { };






  struct __do_is_destructible_impl
  {
    template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
      static true_type __test(int);

    template<typename>
      static false_type __test(...);
  };

  template<typename _Tp>
    struct __is_destructible_impl
    : public __do_is_destructible_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp,
           bool = __or_<is_void<_Tp>,
                        __is_array_unknown_bounds<_Tp>,
                        is_function<_Tp>>::value,
           bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
    struct __is_destructible_safe;

  template<typename _Tp>
    struct __is_destructible_safe<_Tp, false, false>
    : public __is_destructible_impl<typename
               remove_all_extents<_Tp>::type>::type
    { };

  template<typename _Tp>
    struct __is_destructible_safe<_Tp, true, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_destructible_safe<_Tp, false, true>
    : public true_type { };


  template<typename _Tp>
    struct is_destructible
    : public __is_destructible_safe<_Tp>::type
    { };





  struct __do_is_nt_destructible_impl
  {
    template<typename _Tp>
      static integral_constant<bool, noexcept(declval<_Tp&>().~_Tp())>
        __test(int);

    template<typename>
      static false_type __test(...);
  };

  template<typename _Tp>
    struct __is_nt_destructible_impl
    : public __do_is_nt_destructible_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp,
           bool = __or_<is_void<_Tp>,
                        __is_array_unknown_bounds<_Tp>,
                        is_function<_Tp>>::value,
           bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
    struct __is_nt_destructible_safe;

  template<typename _Tp>
    struct __is_nt_destructible_safe<_Tp, false, false>
    : public __is_nt_destructible_impl<typename
               remove_all_extents<_Tp>::type>::type
    { };

  template<typename _Tp>
    struct __is_nt_destructible_safe<_Tp, true, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_nt_destructible_safe<_Tp, false, true>
    : public true_type { };


  template<typename _Tp>
    struct is_nothrow_destructible
    : public __is_nt_destructible_safe<_Tp>::type
    { };

  struct __do_is_default_constructible_impl
  {
    template<typename _Tp, typename = decltype(_Tp())>
      static true_type __test(int);

    template<typename>
      static false_type __test(...);
  };

  template<typename _Tp>
    struct __is_default_constructible_impl
    : public __do_is_default_constructible_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp>
    struct __is_default_constructible_atom
    : public __and_<__not_<is_void<_Tp>>,
                    __is_default_constructible_impl<_Tp>>
    { };

  template<typename _Tp, bool = is_array<_Tp>::value>
    struct __is_default_constructible_safe;






  template<typename _Tp>
    struct __is_default_constructible_safe<_Tp, true>
    : public __and_<__is_array_known_bounds<_Tp>,
      __is_default_constructible_atom<typename
                      remove_all_extents<_Tp>::type>>
    { };

  template<typename _Tp>
    struct __is_default_constructible_safe<_Tp, false>
    : public __is_default_constructible_atom<_Tp>::type
    { };


  template<typename _Tp>
    struct is_default_constructible
    : public __is_default_constructible_safe<_Tp>::type
    { };


  template<typename _Tp, typename... _Args>
    struct is_constructible
      : public __bool_constant<__is_constructible(_Tp, _Args...)>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_copy_constructible_impl;

  template<typename _Tp>
    struct __is_copy_constructible_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_copy_constructible_impl<_Tp, true>
    : public is_constructible<_Tp, const _Tp&>
    { };


  template<typename _Tp>
    struct is_copy_constructible
    : public __is_copy_constructible_impl<_Tp>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_move_constructible_impl;

  template<typename _Tp>
    struct __is_move_constructible_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_move_constructible_impl<_Tp, true>
    : public is_constructible<_Tp, _Tp&&>
    { };


  template<typename _Tp>
    struct is_move_constructible
    : public __is_move_constructible_impl<_Tp>
    { };

  template<typename _Tp>
    struct __is_nt_default_constructible_atom
    : public integral_constant<bool, noexcept(_Tp())>
    { };

  template<typename _Tp, bool = is_array<_Tp>::value>
    struct __is_nt_default_constructible_impl;

  template<typename _Tp>
    struct __is_nt_default_constructible_impl<_Tp, true>
    : public __and_<__is_array_known_bounds<_Tp>,
      __is_nt_default_constructible_atom<typename
                      remove_all_extents<_Tp>::type>>
    { };

  template<typename _Tp>
    struct __is_nt_default_constructible_impl<_Tp, false>
    : public __is_nt_default_constructible_atom<_Tp>
    { };


  template<typename _Tp>
    struct is_nothrow_default_constructible
    : public __and_<is_default_constructible<_Tp>,
                    __is_nt_default_constructible_impl<_Tp>>
    { };

  template<typename _Tp, typename... _Args>
    struct __is_nt_constructible_impl
    : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))>
    { };

  template<typename _Tp, typename _Arg>
    struct __is_nt_constructible_impl<_Tp, _Arg>
    : public integral_constant<bool,
                               noexcept(static_cast<_Tp>(declval<_Arg>()))>
    { };

  template<typename _Tp>
    struct __is_nt_constructible_impl<_Tp>
    : public is_nothrow_default_constructible<_Tp>
    { };


  template<typename _Tp, typename... _Args>
    struct is_nothrow_constructible
    : public __and_<is_constructible<_Tp, _Args...>,
      __is_nt_constructible_impl<_Tp, _Args...>>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_nothrow_copy_constructible_impl;

  template<typename _Tp>
    struct __is_nothrow_copy_constructible_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_nothrow_copy_constructible_impl<_Tp, true>
    : public is_nothrow_constructible<_Tp, const _Tp&>
    { };


  template<typename _Tp>
    struct is_nothrow_copy_constructible
    : public __is_nothrow_copy_constructible_impl<_Tp>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_nothrow_move_constructible_impl;

  template<typename _Tp>
    struct __is_nothrow_move_constructible_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_nothrow_move_constructible_impl<_Tp, true>
    : public is_nothrow_constructible<_Tp, _Tp&&>
    { };


  template<typename _Tp>
    struct is_nothrow_move_constructible
    : public __is_nothrow_move_constructible_impl<_Tp>
    { };


  template<typename _Tp, typename _Up>
    struct is_assignable
      : public __bool_constant<__is_assignable(_Tp, _Up)>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_copy_assignable_impl;

  template<typename _Tp>
    struct __is_copy_assignable_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_copy_assignable_impl<_Tp, true>
    : public is_assignable<_Tp&, const _Tp&>
    { };


  template<typename _Tp>
    struct is_copy_assignable
    : public __is_copy_assignable_impl<_Tp>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_move_assignable_impl;

  template<typename _Tp>
    struct __is_move_assignable_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_move_assignable_impl<_Tp, true>
    : public is_assignable<_Tp&, _Tp&&>
    { };


  template<typename _Tp>
    struct is_move_assignable
    : public __is_move_assignable_impl<_Tp>
    { };

  template<typename _Tp, typename _Up>
    struct __is_nt_assignable_impl
    : public integral_constant<bool, noexcept(declval<_Tp>() = declval<_Up>())>
    { };


  template<typename _Tp, typename _Up>
    struct is_nothrow_assignable
    : public __and_<is_assignable<_Tp, _Up>,
      __is_nt_assignable_impl<_Tp, _Up>>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_nt_copy_assignable_impl;

  template<typename _Tp>
    struct __is_nt_copy_assignable_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_nt_copy_assignable_impl<_Tp, true>
    : public is_nothrow_assignable<_Tp&, const _Tp&>
    { };


  template<typename _Tp>
    struct is_nothrow_copy_assignable
    : public __is_nt_copy_assignable_impl<_Tp>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_nt_move_assignable_impl;

  template<typename _Tp>
    struct __is_nt_move_assignable_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_nt_move_assignable_impl<_Tp, true>
    : public is_nothrow_assignable<_Tp&, _Tp&&>
    { };


  template<typename _Tp>
    struct is_nothrow_move_assignable
    : public __is_nt_move_assignable_impl<_Tp>
    { };


  template<typename _Tp, typename... _Args>
    struct is_trivially_constructible
    : public __and_<is_constructible<_Tp, _Args...>, __bool_constant<
        __is_trivially_constructible(_Tp, _Args...)>>::type
    { };


  template<typename _Tp>
    struct is_trivially_default_constructible
    : public is_trivially_constructible<_Tp>::type
    { };

  struct __do_is_implicitly_default_constructible_impl
  {
    template <typename _Tp>
    static void __helper(const _Tp&);

    template <typename _Tp>
    static true_type __test(const _Tp&,
                            decltype(__helper<const _Tp&>({}))* = 0);

    static false_type __test(...);
  };

  template<typename _Tp>
    struct __is_implicitly_default_constructible_impl
    : public __do_is_implicitly_default_constructible_impl
    {
      typedef decltype(__test(declval<_Tp>())) type;
    };

  template<typename _Tp>
    struct __is_implicitly_default_constructible_safe
    : public __is_implicitly_default_constructible_impl<_Tp>::type
    { };

  template <typename _Tp>
    struct __is_implicitly_default_constructible
    : public __and_<is_default_constructible<_Tp>,
      __is_implicitly_default_constructible_safe<_Tp>>
    { };



  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_trivially_copy_constructible_impl;

  template<typename _Tp>
    struct __is_trivially_copy_constructible_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_trivially_copy_constructible_impl<_Tp, true>
    : public __and_<is_copy_constructible<_Tp>,
      integral_constant<bool,
   __is_trivially_constructible(_Tp, const _Tp&)>>
    { };

  template<typename _Tp>
    struct is_trivially_copy_constructible
    : public __is_trivially_copy_constructible_impl<_Tp>
    { };



  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_trivially_move_constructible_impl;

  template<typename _Tp>
    struct __is_trivially_move_constructible_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_trivially_move_constructible_impl<_Tp, true>
    : public __and_<is_move_constructible<_Tp>,
      integral_constant<bool,
   __is_trivially_constructible(_Tp, _Tp&&)>>
    { };

  template<typename _Tp>
    struct is_trivially_move_constructible
    : public __is_trivially_move_constructible_impl<_Tp>
    { };


  template<typename _Tp, typename _Up>
    struct is_trivially_assignable
    : public __bool_constant<__is_trivially_assignable(_Tp, _Up)>
    { };



  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_trivially_copy_assignable_impl;

  template<typename _Tp>
    struct __is_trivially_copy_assignable_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_trivially_copy_assignable_impl<_Tp, true>
    : public __and_<is_copy_assignable<_Tp>,
      integral_constant<bool,
   __is_trivially_assignable(_Tp&, const _Tp&)>>
    { };

  template<typename _Tp>
    struct is_trivially_copy_assignable
    : public __is_trivially_copy_assignable_impl<_Tp>
    { };



  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __is_trivially_move_assignable_impl;

  template<typename _Tp>
    struct __is_trivially_move_assignable_impl<_Tp, false>
    : public false_type { };

  template<typename _Tp>
    struct __is_trivially_move_assignable_impl<_Tp, true>
    : public __and_<is_move_assignable<_Tp>,
      integral_constant<bool,
   __is_trivially_assignable(_Tp&, _Tp&&)>>
    { };

  template<typename _Tp>
    struct is_trivially_move_assignable
    : public __is_trivially_move_assignable_impl<_Tp>
    { };


  template<typename _Tp>
    struct is_trivially_destructible
    : public __and_<is_destructible<_Tp>, integral_constant<bool,
         __has_trivial_destructor(_Tp)>>
    { };



  template<typename _Tp>
    struct has_virtual_destructor
    : public integral_constant<bool, __has_virtual_destructor(_Tp)>
    { };





  template<typename _Tp>
    struct alignment_of
    : public integral_constant<std::size_t, __alignof__(_Tp)> { };


  template<typename>
    struct rank
    : public integral_constant<std::size_t, 0> { };

  template<typename _Tp, std::size_t _Size>
    struct rank<_Tp[_Size]>
    : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };

  template<typename _Tp>
    struct rank<_Tp[]>
    : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };


  template<typename, unsigned _Uint>
    struct extent
    : public integral_constant<std::size_t, 0> { };

  template<typename _Tp, unsigned _Uint, std::size_t _Size>
    struct extent<_Tp[_Size], _Uint>
    : public integral_constant<std::size_t,
          _Uint == 0 ? _Size : extent<_Tp,
          _Uint - 1>::value>
    { };

  template<typename _Tp, unsigned _Uint>
    struct extent<_Tp[], _Uint>
    : public integral_constant<std::size_t,
          _Uint == 0 ? 0 : extent<_Tp,
             _Uint - 1>::value>
    { };





  template<typename, typename>
    struct is_same
    : public false_type { };

  template<typename _Tp>
    struct is_same<_Tp, _Tp>
    : public true_type { };


  template<typename _Base, typename _Derived>
    struct is_base_of
    : public integral_constant<bool, __is_base_of(_Base, _Derived)>
    { };

  template<typename _From, typename _To,
           bool = __or_<is_void<_From>, is_function<_To>,
                        is_array<_To>>::value>
    struct __is_convertible_helper
    {
      typedef typename is_void<_To>::type type;



    };

  template<typename _From, typename _To>
    class __is_convertible_helper<_From, _To, false>
    {
      template<typename _To1>
 static void __test_aux(_To1) noexcept;

      template<typename _From1, typename _To1,
        typename = decltype(__test_aux<_To1>(std::declval<_From1>()))>
 static true_type
 __test(int);

      template<typename, typename>
 static false_type
 __test(...);
# 1378 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
    public:
      typedef decltype(__test<_From, _To>(0)) type;




    };



  template<typename _From, typename _To>
    struct is_convertible
    : public __is_convertible_helper<_From, _To>::type
    { };
# 1409 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp>
    struct remove_const
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_const<_Tp const>
    { typedef _Tp type; };


  template<typename _Tp>
    struct remove_volatile
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_volatile<_Tp volatile>
    { typedef _Tp type; };


  template<typename _Tp>
    struct remove_cv
    {
      typedef typename
      remove_const<typename remove_volatile<_Tp>::type>::type type;
    };


  template<typename _Tp>
    struct add_const
    { typedef _Tp const type; };


  template<typename _Tp>
    struct add_volatile
    { typedef _Tp volatile type; };


  template<typename _Tp>
    struct add_cv
    {
      typedef typename
      add_const<typename add_volatile<_Tp>::type>::type type;
    };






  template<typename _Tp>
    using remove_const_t = typename remove_const<_Tp>::type;


  template<typename _Tp>
    using remove_volatile_t = typename remove_volatile<_Tp>::type;


  template<typename _Tp>
    using remove_cv_t = typename remove_cv<_Tp>::type;


  template<typename _Tp>
    using add_const_t = typename add_const<_Tp>::type;


  template<typename _Tp>
    using add_volatile_t = typename add_volatile<_Tp>::type;


  template<typename _Tp>
    using add_cv_t = typename add_cv<_Tp>::type;





  template<typename _Tp>
    struct remove_reference
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_reference<_Tp&>
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_reference<_Tp&&>
    { typedef _Tp type; };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __add_lvalue_reference_helper
    { typedef _Tp type; };

  template<typename _Tp>
    struct __add_lvalue_reference_helper<_Tp, true>
    { typedef _Tp& type; };


  template<typename _Tp>
    struct add_lvalue_reference
    : public __add_lvalue_reference_helper<_Tp>
    { };

  template<typename _Tp, bool = __is_referenceable<_Tp>::value>
    struct __add_rvalue_reference_helper
    { typedef _Tp type; };

  template<typename _Tp>
    struct __add_rvalue_reference_helper<_Tp, true>
    { typedef _Tp&& type; };


  template<typename _Tp>
    struct add_rvalue_reference
    : public __add_rvalue_reference_helper<_Tp>
    { };



  template<typename _Tp>
    using remove_reference_t = typename remove_reference<_Tp>::type;


  template<typename _Tp>
    using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;


  template<typename _Tp>
    using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;





  template<typename _Unqualified, bool _IsConst, bool _IsVol>
    struct __cv_selector;

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, false, false>
    { typedef _Unqualified __type; };

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, false, true>
    { typedef volatile _Unqualified __type; };

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, true, false>
    { typedef const _Unqualified __type; };

  template<typename _Unqualified>
    struct __cv_selector<_Unqualified, true, true>
    { typedef const volatile _Unqualified __type; };

  template<typename _Qualified, typename _Unqualified,
    bool _IsConst = is_const<_Qualified>::value,
    bool _IsVol = is_volatile<_Qualified>::value>
    class __match_cv_qualifiers
    {
      typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;

    public:
      typedef typename __match::__type __type;
    };


  template<typename _Tp>
    struct __make_unsigned
    { typedef _Tp __type; };

  template<>
    struct __make_unsigned<char>
    { typedef unsigned char __type; };

  template<>
    struct __make_unsigned<signed char>
    { typedef unsigned char __type; };

  template<>
    struct __make_unsigned<short>
    { typedef unsigned short __type; };

  template<>
    struct __make_unsigned<int>
    { typedef unsigned int __type; };

  template<>
    struct __make_unsigned<long>
    { typedef unsigned long __type; };

  template<>
    struct __make_unsigned<long long>
    { typedef unsigned long long __type; };
# 1622 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp,
    bool _IsInt = is_integral<_Tp>::value,
    bool _IsEnum = is_enum<_Tp>::value>
    class __make_unsigned_selector;

  template<typename _Tp>
    class __make_unsigned_selector<_Tp, true, false>
    {
      using __unsigned_type
 = typename __make_unsigned<typename remove_cv<_Tp>::type>::__type;

    public:
      using __type
 = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
    };

  class __make_unsigned_selector_base
  {
  protected:
    template<typename...> struct _List { };

    template<typename _Tp, typename... _Up>
      struct _List<_Tp, _Up...> : _List<_Up...>
      { static constexpr size_t __size = sizeof(_Tp); };

    template<size_t _Sz, typename _Tp, bool = (_Sz <= _Tp::__size)>
      struct __select;

    template<size_t _Sz, typename _Uint, typename... _UInts>
      struct __select<_Sz, _List<_Uint, _UInts...>, true>
      { using __type = _Uint; };

    template<size_t _Sz, typename _Uint, typename... _UInts>
      struct __select<_Sz, _List<_Uint, _UInts...>, false>
      : __select<_Sz, _List<_UInts...>>
      { };
  };


  template<typename _Tp>
    class __make_unsigned_selector<_Tp, false, true>
    : __make_unsigned_selector_base
    {

      using _UInts = _List<unsigned char, unsigned short, unsigned int,
      unsigned long, unsigned long long>;

      using __unsigned_type = typename __select<sizeof(_Tp), _UInts>::__type;

    public:
      using __type
 = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type;
    };






  template<>
    struct __make_unsigned<wchar_t>
    {
      using __type
 = typename __make_unsigned_selector<wchar_t, false, true>::__type;
    };


  template<>
    struct __make_unsigned<char16_t>
    {
      using __type
 = typename __make_unsigned_selector<char16_t, false, true>::__type;
    };

  template<>
    struct __make_unsigned<char32_t>
    {
      using __type
 = typename __make_unsigned_selector<char32_t, false, true>::__type;
    };





  template<typename _Tp>
    struct make_unsigned
    { typedef typename __make_unsigned_selector<_Tp>::__type type; };


  template<>
    struct make_unsigned<bool>;



  template<typename _Tp>
    struct __make_signed
    { typedef _Tp __type; };

  template<>
    struct __make_signed<char>
    { typedef signed char __type; };

  template<>
    struct __make_signed<unsigned char>
    { typedef signed char __type; };

  template<>
    struct __make_signed<unsigned short>
    { typedef signed short __type; };

  template<>
    struct __make_signed<unsigned int>
    { typedef signed int __type; };

  template<>
    struct __make_signed<unsigned long>
    { typedef signed long __type; };

  template<>
    struct __make_signed<unsigned long long>
    { typedef signed long long __type; };
# 1767 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp,
    bool _IsInt = is_integral<_Tp>::value,
    bool _IsEnum = is_enum<_Tp>::value>
    class __make_signed_selector;

  template<typename _Tp>
    class __make_signed_selector<_Tp, true, false>
    {
      using __signed_type
 = typename __make_signed<typename remove_cv<_Tp>::type>::__type;

    public:
      using __type
 = typename __match_cv_qualifiers<_Tp, __signed_type>::__type;
    };


  template<typename _Tp>
    class __make_signed_selector<_Tp, false, true>
    {
      typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type;

    public:
      typedef typename __make_signed_selector<__unsigned_type>::__type __type;
    };






  template<>
    struct __make_signed<wchar_t>
    {
      using __type
 = typename __make_signed_selector<wchar_t, false, true>::__type;
    };


  template<>
    struct __make_signed<char16_t>
    {
      using __type
 = typename __make_signed_selector<char16_t, false, true>::__type;
    };

  template<>
    struct __make_signed<char32_t>
    {
      using __type
 = typename __make_signed_selector<char32_t, false, true>::__type;
    };





  template<typename _Tp>
    struct make_signed
    { typedef typename __make_signed_selector<_Tp>::__type type; };


  template<>
    struct make_signed<bool>;



  template<typename _Tp>
    using make_signed_t = typename make_signed<_Tp>::type;


  template<typename _Tp>
    using make_unsigned_t = typename make_unsigned<_Tp>::type;





  template<typename _Tp>
    struct remove_extent
    { typedef _Tp type; };

  template<typename _Tp, std::size_t _Size>
    struct remove_extent<_Tp[_Size]>
    { typedef _Tp type; };

  template<typename _Tp>
    struct remove_extent<_Tp[]>
    { typedef _Tp type; };


  template<typename _Tp>
    struct remove_all_extents
    { typedef _Tp type; };

  template<typename _Tp, std::size_t _Size>
    struct remove_all_extents<_Tp[_Size]>
    { typedef typename remove_all_extents<_Tp>::type type; };

  template<typename _Tp>
    struct remove_all_extents<_Tp[]>
    { typedef typename remove_all_extents<_Tp>::type type; };



  template<typename _Tp>
    using remove_extent_t = typename remove_extent<_Tp>::type;


  template<typename _Tp>
    using remove_all_extents_t = typename remove_all_extents<_Tp>::type;




  template<typename _Tp, typename>
    struct __remove_pointer_helper
    { typedef _Tp type; };

  template<typename _Tp, typename _Up>
    struct __remove_pointer_helper<_Tp, _Up*>
    { typedef _Up type; };


  template<typename _Tp>
    struct remove_pointer
    : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
    { };


  template<typename _Tp, bool = __or_<__is_referenceable<_Tp>,
          is_void<_Tp>>::value>
    struct __add_pointer_helper
    { typedef _Tp type; };

  template<typename _Tp>
    struct __add_pointer_helper<_Tp, true>
    { typedef typename remove_reference<_Tp>::type* type; };

  template<typename _Tp>
    struct add_pointer
    : public __add_pointer_helper<_Tp>
    { };



  template<typename _Tp>
    using remove_pointer_t = typename remove_pointer<_Tp>::type;


  template<typename _Tp>
    using add_pointer_t = typename add_pointer<_Tp>::type;


  template<std::size_t _Len>
    struct __aligned_storage_msa
    {
      union __type
      {
 unsigned char __data[_Len];
 struct __attribute__((__aligned__)) { } __align;
      };
    };
# 1941 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<std::size_t _Len, std::size_t _Align =
    __alignof__(typename __aligned_storage_msa<_Len>::__type)>
    struct aligned_storage
    {
      union type
      {
 unsigned char __data[_Len];
 struct __attribute__((__aligned__((_Align)))) { } __align;
      };
    };

  template <typename... _Types>
    struct __strictest_alignment
    {
      static const size_t _S_alignment = 0;
      static const size_t _S_size = 0;
    };

  template <typename _Tp, typename... _Types>
    struct __strictest_alignment<_Tp, _Types...>
    {
      static const size_t _S_alignment =
        alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
 ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
      static const size_t _S_size =
        sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
 ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
    };
# 1980 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template <size_t _Len, typename... _Types>
    struct aligned_union
    {
    private:
      static_assert(sizeof...(_Types) != 0, "At least one type is required");

      using __strictest = __strictest_alignment<_Types...>;
      static const size_t _S_len = _Len > __strictest::_S_size
 ? _Len : __strictest::_S_size;
    public:

      static const size_t alignment_value = __strictest::_S_alignment;

      typedef typename aligned_storage<_S_len, alignment_value>::type type;
    };

  template <size_t _Len, typename... _Types>
    const size_t aligned_union<_Len, _Types...>::alignment_value;



  template<typename _Up,
    bool _IsArray = is_array<_Up>::value,
    bool _IsFunction = is_function<_Up>::value>
    struct __decay_selector;


  template<typename _Up>
    struct __decay_selector<_Up, false, false>
    { typedef typename remove_cv<_Up>::type __type; };

  template<typename _Up>
    struct __decay_selector<_Up, true, false>
    { typedef typename remove_extent<_Up>::type* __type; };

  template<typename _Up>
    struct __decay_selector<_Up, false, true>
    { typedef typename add_pointer<_Up>::type __type; };


  template<typename _Tp>
    class decay
    {
      typedef typename remove_reference<_Tp>::type __remove_type;

    public:
      typedef typename __decay_selector<__remove_type>::__type type;
    };

  template<typename _Tp>
    class reference_wrapper;


  template<typename _Tp>
    struct __strip_reference_wrapper
    {
      typedef _Tp __type;
    };

  template<typename _Tp>
    struct __strip_reference_wrapper<reference_wrapper<_Tp> >
    {
      typedef _Tp& __type;
    };

  template<typename _Tp>
    struct __decay_and_strip
    {
      typedef typename __strip_reference_wrapper<
 typename decay<_Tp>::type>::__type __type;
    };




  template<bool, typename _Tp = void>
    struct enable_if
    { };


  template<typename _Tp>
    struct enable_if<true, _Tp>
    { typedef _Tp type; };

  template<typename... _Cond>
    using _Require = typename enable_if<__and_<_Cond...>::value>::type;



  template<bool _Cond, typename _Iftrue, typename _Iffalse>
    struct conditional
    { typedef _Iftrue type; };


  template<typename _Iftrue, typename _Iffalse>
    struct conditional<false, _Iftrue, _Iffalse>
    { typedef _Iffalse type; };


  template<typename... _Tp>
    struct common_type;



  struct __do_common_type_impl
  {
    template<typename _Tp, typename _Up>
      static __success_type<typename decay<decltype
       (true ? std::declval<_Tp>()
        : std::declval<_Up>())>::type> _S_test(int);

    template<typename, typename>
      static __failure_type _S_test(...);
  };

  template<typename _Tp, typename _Up>
    struct __common_type_impl
    : private __do_common_type_impl
    {
      typedef decltype(_S_test<_Tp, _Up>(0)) type;
    };

  struct __do_member_type_wrapper
  {
    template<typename _Tp>
      static __success_type<typename _Tp::type> _S_test(int);

    template<typename>
      static __failure_type _S_test(...);
  };

  template<typename _Tp>
    struct __member_type_wrapper
    : private __do_member_type_wrapper
    {
      typedef decltype(_S_test<_Tp>(0)) type;
    };

  template<typename _CTp, typename... _Args>
    struct __expanded_common_type_wrapper
    {
      typedef common_type<typename _CTp::type, _Args...> type;
    };

  template<typename... _Args>
    struct __expanded_common_type_wrapper<__failure_type, _Args...>
    { typedef __failure_type type; };

  template<typename _Tp>
    struct common_type<_Tp>
    { typedef typename decay<_Tp>::type type; };

  template<typename _Tp, typename _Up>
    struct common_type<_Tp, _Up>
    : public __common_type_impl<_Tp, _Up>::type
    { };

  template<typename _Tp, typename _Up, typename... _Vp>
    struct common_type<_Tp, _Up, _Vp...>
    : public __expanded_common_type_wrapper<typename __member_type_wrapper<
               common_type<_Tp, _Up>>::type, _Vp...>::type
    { };


  template<typename _Tp>
    struct underlying_type
    {
      typedef __underlying_type(_Tp) type;
    };

  template<typename _Tp>
    struct __declval_protector
    {
      static const bool __stop = false;
    };

  template<typename _Tp>
    auto declval() noexcept -> decltype(__declval<_Tp>(0))
    {
      static_assert(__declval_protector<_Tp>::__stop,
      "declval() must not be used!");
      return __declval<_Tp>(0);
    }


  template<typename _Tp>
    using __remove_cvref_t
     = typename remove_cv<typename remove_reference<_Tp>::type>::type;


  template<typename _Signature>
    class result_of;





  struct __invoke_memfun_ref { };
  struct __invoke_memfun_deref { };
  struct __invoke_memobj_ref { };
  struct __invoke_memobj_deref { };
  struct __invoke_other { };


  template<typename _Tp, typename _Tag>
    struct __result_of_success : __success_type<_Tp>
    { using __invoke_type = _Tag; };


  struct __result_of_memfun_ref_impl
  {
    template<typename _Fp, typename _Tp1, typename... _Args>
      static __result_of_success<decltype(
      (std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
      ), __invoke_memfun_ref> _S_test(int);

    template<typename...>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_memfun_ref
    : private __result_of_memfun_ref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
    };


  struct __result_of_memfun_deref_impl
  {
    template<typename _Fp, typename _Tp1, typename... _Args>
      static __result_of_success<decltype(
      ((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
      ), __invoke_memfun_deref> _S_test(int);

    template<typename...>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_memfun_deref
    : private __result_of_memfun_deref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
    };


  struct __result_of_memobj_ref_impl
  {
    template<typename _Fp, typename _Tp1>
      static __result_of_success<decltype(
      std::declval<_Tp1>().*std::declval<_Fp>()
      ), __invoke_memobj_ref> _S_test(int);

    template<typename, typename>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_memobj_ref
    : private __result_of_memobj_ref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
    };


  struct __result_of_memobj_deref_impl
  {
    template<typename _Fp, typename _Tp1>
      static __result_of_success<decltype(
      (*std::declval<_Tp1>()).*std::declval<_Fp>()
      ), __invoke_memobj_deref> _S_test(int);

    template<typename, typename>
      static __failure_type _S_test(...);
  };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_memobj_deref
    : private __result_of_memobj_deref_impl
    {
      typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
    };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_memobj;

  template<typename _Res, typename _Class, typename _Arg>
    struct __result_of_memobj<_Res _Class::*, _Arg>
    {
      typedef __remove_cvref_t<_Arg> _Argval;
      typedef _Res _Class::* _MemPtr;
      typedef typename conditional<__or_<is_same<_Argval, _Class>,
        is_base_of<_Class, _Argval>>::value,
        __result_of_memobj_ref<_MemPtr, _Arg>,
        __result_of_memobj_deref<_MemPtr, _Arg>
      >::type::type type;
    };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_memfun;

  template<typename _Res, typename _Class, typename _Arg, typename... _Args>
    struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
    {
      typedef __remove_cvref_t<_Arg> _Argval;
      typedef _Res _Class::* _MemPtr;
      typedef typename conditional<__or_<is_same<_Argval, _Class>,
        is_base_of<_Class, _Argval>>::value,
        __result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
        __result_of_memfun_deref<_MemPtr, _Arg, _Args...>
      >::type::type type;
    };






  template<typename _Tp, typename _Up = typename decay<_Tp>::type>
    struct __inv_unwrap
    {
      using type = _Tp;
    };

  template<typename _Tp, typename _Up>
    struct __inv_unwrap<_Tp, reference_wrapper<_Up>>
    {
      using type = _Up&;
    };

  template<bool, bool, typename _Functor, typename... _ArgTypes>
    struct __result_of_impl
    {
      typedef __failure_type type;
    };

  template<typename _MemPtr, typename _Arg>
    struct __result_of_impl<true, false, _MemPtr, _Arg>
    : public __result_of_memobj<typename decay<_MemPtr>::type,
    typename __inv_unwrap<_Arg>::type>
    { };

  template<typename _MemPtr, typename _Arg, typename... _Args>
    struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
    : public __result_of_memfun<typename decay<_MemPtr>::type,
    typename __inv_unwrap<_Arg>::type, _Args...>
    { };


  struct __result_of_other_impl
  {
    template<typename _Fn, typename... _Args>
      static __result_of_success<decltype(
      std::declval<_Fn>()(std::declval<_Args>()...)
      ), __invoke_other> _S_test(int);

    template<typename...>
      static __failure_type _S_test(...);
  };

  template<typename _Functor, typename... _ArgTypes>
    struct __result_of_impl<false, false, _Functor, _ArgTypes...>
    : private __result_of_other_impl
    {
      typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
    };


  template<typename _Functor, typename... _ArgTypes>
    struct __invoke_result
    : public __result_of_impl<
        is_member_object_pointer<
          typename remove_reference<_Functor>::type
        >::value,
        is_member_function_pointer<
          typename remove_reference<_Functor>::type
        >::value,
 _Functor, _ArgTypes...
      >::type
    { };

  template<typename _Functor, typename... _ArgTypes>
    struct result_of<_Functor(_ArgTypes...)>
    : public __invoke_result<_Functor, _ArgTypes...>
    { };



  template<size_t _Len, size_t _Align =
     __alignof__(typename __aligned_storage_msa<_Len>::__type)>
    using aligned_storage_t = typename aligned_storage<_Len, _Align>::type;

  template <size_t _Len, typename... _Types>
    using aligned_union_t = typename aligned_union<_Len, _Types...>::type;


  template<typename _Tp>
    using decay_t = typename decay<_Tp>::type;


  template<bool _Cond, typename _Tp = void>
    using enable_if_t = typename enable_if<_Cond, _Tp>::type;


  template<bool _Cond, typename _Iftrue, typename _Iffalse>
    using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;


  template<typename... _Tp>
    using common_type_t = typename common_type<_Tp...>::type;


  template<typename _Tp>
    using underlying_type_t = typename underlying_type<_Tp>::type;


  template<typename _Tp>
    using result_of_t = typename result_of<_Tp>::type;



  template<bool _Cond, typename _Tp = void>
    using __enable_if_t = typename enable_if<_Cond, _Tp>::type;


  template<typename...> using __void_t = void;




  template<typename...> using void_t = void;



  template<typename _Default, typename _AlwaysVoid,
    template<typename...> class _Op, typename... _Args>
    struct __detector
    {
      using value_t = false_type;
      using type = _Default;
    };


  template<typename _Default, template<typename...> class _Op,
     typename... _Args>
    struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...>
    {
      using value_t = true_type;
      using type = _Op<_Args...>;
    };


  template<typename _Default, template<typename...> class _Op,
    typename... _Args>
    using __detected_or = __detector<_Default, void, _Op, _Args...>;


  template<typename _Default, template<typename...> class _Op,
    typename... _Args>
    using __detected_or_t
      = typename __detected_or<_Default, _Op, _Args...>::type;
# 2459 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template <typename _Tp>
    struct __is_swappable;

  template <typename _Tp>
    struct __is_nothrow_swappable;

  template<typename... _Elements>
    class tuple;

  template<typename>
    struct __is_tuple_like_impl : false_type
    { };

  template<typename... _Tps>
    struct __is_tuple_like_impl<tuple<_Tps...>> : true_type
    { };


  template<typename _Tp>
    struct __is_tuple_like
    : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type
    { };

  template<typename _Tp>
    inline
    typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
         is_move_constructible<_Tp>,
         is_move_assignable<_Tp>>::value>::type
    swap(_Tp&, _Tp&)
    noexcept(__and_<is_nothrow_move_constructible<_Tp>,
             is_nothrow_move_assignable<_Tp>>::value);

  template<typename _Tp, size_t _Nm>
    inline
    typename enable_if<__is_swappable<_Tp>::value>::type
    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
    noexcept(__is_nothrow_swappable<_Tp>::value);

  namespace __swappable_details {
    using std::swap;

    struct __do_is_swappable_impl
    {
      template<typename _Tp, typename
               = decltype(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))>
        static true_type __test(int);

      template<typename>
        static false_type __test(...);
    };

    struct __do_is_nothrow_swappable_impl
    {
      template<typename _Tp>
        static __bool_constant<
          noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>()))
        > __test(int);

      template<typename>
        static false_type __test(...);
    };

  }

  template<typename _Tp>
    struct __is_swappable_impl
    : public __swappable_details::__do_is_swappable_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp>
    struct __is_nothrow_swappable_impl
    : public __swappable_details::__do_is_nothrow_swappable_impl
    {
      typedef decltype(__test<_Tp>(0)) type;
    };

  template<typename _Tp>
    struct __is_swappable
    : public __is_swappable_impl<_Tp>::type
    { };

  template<typename _Tp>
    struct __is_nothrow_swappable
    : public __is_nothrow_swappable_impl<_Tp>::type
    { };






  template<typename _Tp>
    struct is_swappable
    : public __is_swappable_impl<_Tp>::type
    { };


  template<typename _Tp>
    struct is_nothrow_swappable
    : public __is_nothrow_swappable_impl<_Tp>::type
    { };



  template<typename _Tp>
    
# 2566 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
   inline 
# 2566 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                     constexpr bool is_swappable_v =
      is_swappable<_Tp>::value;


  template<typename _Tp>
    
# 2571 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
   inline 
# 2571 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                     constexpr bool is_nothrow_swappable_v =
      is_nothrow_swappable<_Tp>::value;


  namespace __swappable_with_details {
    using std::swap;

    struct __do_is_swappable_with_impl
    {
      template<typename _Tp, typename _Up, typename
               = decltype(swap(std::declval<_Tp>(), std::declval<_Up>())),
               typename
               = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))>
        static true_type __test(int);

      template<typename, typename>
        static false_type __test(...);
    };

    struct __do_is_nothrow_swappable_with_impl
    {
      template<typename _Tp, typename _Up>
        static __bool_constant<
          noexcept(swap(std::declval<_Tp>(), std::declval<_Up>()))
          &&
          noexcept(swap(std::declval<_Up>(), std::declval<_Tp>()))
        > __test(int);

      template<typename, typename>
        static false_type __test(...);
    };

  }

  template<typename _Tp, typename _Up>
    struct __is_swappable_with_impl
    : public __swappable_with_details::__do_is_swappable_with_impl
    {
      typedef decltype(__test<_Tp, _Up>(0)) type;
    };


  template<typename _Tp>
    struct __is_swappable_with_impl<_Tp&, _Tp&>
    : public __swappable_details::__do_is_swappable_impl
    {
      typedef decltype(__test<_Tp&>(0)) type;
    };

  template<typename _Tp, typename _Up>
    struct __is_nothrow_swappable_with_impl
    : public __swappable_with_details::__do_is_nothrow_swappable_with_impl
    {
      typedef decltype(__test<_Tp, _Up>(0)) type;
    };


  template<typename _Tp>
    struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&>
    : public __swappable_details::__do_is_nothrow_swappable_impl
    {
      typedef decltype(__test<_Tp&>(0)) type;
    };


  template<typename _Tp, typename _Up>
    struct is_swappable_with
    : public __is_swappable_with_impl<_Tp, _Up>::type
    { };


  template<typename _Tp, typename _Up>
    struct is_nothrow_swappable_with
    : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type
    { };



  template<typename _Tp, typename _Up>
    
# 2650 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
   inline 
# 2650 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                     constexpr bool is_swappable_with_v =
      is_swappable_with<_Tp, _Up>::value;


  template<typename _Tp, typename _Up>
    
# 2655 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
   inline 
# 2655 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
                     constexpr bool is_nothrow_swappable_with_v =
      is_nothrow_swappable_with<_Tp, _Up>::value;






  template<typename _Result, typename _Ret, typename = void>
    struct __is_invocable_impl : false_type { };

  template<typename _Result, typename _Ret>
    struct __is_invocable_impl<_Result, _Ret, __void_t<typename _Result::type>>
    : __or_<is_void<_Ret>, is_convertible<typename _Result::type, _Ret>>::type
    { };

  template<typename _Fn, typename... _ArgTypes>
    struct __is_invocable
    : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
    { };

  template<typename _Fn, typename _Tp, typename... _Args>
    constexpr bool __call_is_nt(__invoke_memfun_ref)
    {
      using _Up = typename __inv_unwrap<_Tp>::type;
      return noexcept((std::declval<_Up>().*std::declval<_Fn>())(
     std::declval<_Args>()...));
    }

  template<typename _Fn, typename _Tp, typename... _Args>
    constexpr bool __call_is_nt(__invoke_memfun_deref)
    {
      return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())(
     std::declval<_Args>()...));
    }

  template<typename _Fn, typename _Tp>
    constexpr bool __call_is_nt(__invoke_memobj_ref)
    {
      using _Up = typename __inv_unwrap<_Tp>::type;
      return noexcept(std::declval<_Up>().*std::declval<_Fn>());
    }

  template<typename _Fn, typename _Tp>
    constexpr bool __call_is_nt(__invoke_memobj_deref)
    {
      return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>());
    }

  template<typename _Fn, typename... _Args>
    constexpr bool __call_is_nt(__invoke_other)
    {
      return noexcept(std::declval<_Fn>()(std::declval<_Args>()...));
    }

  template<typename _Result, typename _Fn, typename... _Args>
    struct __call_is_nothrow
    : __bool_constant<
 std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{})
      >
    { };

  template<typename _Fn, typename... _Args>
    using __call_is_nothrow_
      = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>;


  template<typename _Fn, typename... _Args>
    struct __is_nothrow_invocable
    : __and_<__is_invocable<_Fn, _Args...>,
             __call_is_nothrow_<_Fn, _Args...>>::type
    { };

  struct __nonesuch {
    __nonesuch() = delete;
    ~__nonesuch() = delete;
    __nonesuch(__nonesuch const&) = delete;
    void operator=(__nonesuch const&) = delete;
  };





  template<typename _Functor, typename... _ArgTypes>
    struct invoke_result
    : public __invoke_result<_Functor, _ArgTypes...>
    { };


  template<typename _Fn, typename... _Args>
    using invoke_result_t = typename invoke_result<_Fn, _Args...>::type;


  template<typename _Fn, typename... _ArgTypes>
    struct is_invocable
    : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type
    { };


  template<typename _Ret, typename _Fn, typename... _ArgTypes>
    struct is_invocable_r
    : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>::type
    { };


  template<typename _Fn, typename... _ArgTypes>
    struct is_nothrow_invocable
    : __and_<__is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>,
             __call_is_nothrow_<_Fn, _ArgTypes...>>::type
    { };

  template<typename _Result, typename _Ret, typename = void>
    struct __is_nt_invocable_impl : false_type { };

  template<typename _Result, typename _Ret>
    struct __is_nt_invocable_impl<_Result, _Ret,
      __void_t<typename _Result::type>>
    : __or_<is_void<_Ret>,
     __and_<is_convertible<typename _Result::type, _Ret>,
     is_nothrow_constructible<_Ret, typename _Result::type>>>
    { };


  template<typename _Ret, typename _Fn, typename... _ArgTypes>
    struct is_nothrow_invocable_r
    : __and_<__is_nt_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, _Ret>,
             __call_is_nothrow_<_Fn, _ArgTypes...>>::type
    { };


  template<typename _Fn, typename... _Args>
    inline constexpr bool is_invocable_v = is_invocable<_Fn, _Args...>::value;


  template<typename _Fn, typename... _Args>
    inline constexpr bool is_nothrow_invocable_v
      = is_nothrow_invocable<_Fn, _Args...>::value;


  template<typename _Fn, typename... _Args>
    inline constexpr bool is_invocable_r_v
      = is_invocable_r<_Fn, _Args...>::value;


  template<typename _Fn, typename... _Args>
    inline constexpr bool is_nothrow_invocable_r_v
      = is_nothrow_invocable_r<_Fn, _Args...>::value;




template <typename _Tp>
  inline constexpr bool is_void_v = is_void<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_null_pointer_v = is_null_pointer<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_integral_v = is_integral<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_floating_point_v = is_floating_point<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_array_v = is_array<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_pointer_v = is_pointer<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_lvalue_reference_v =
    is_lvalue_reference<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_rvalue_reference_v =
    is_rvalue_reference<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_member_object_pointer_v =
    is_member_object_pointer<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_member_function_pointer_v =
    is_member_function_pointer<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_enum_v = is_enum<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_union_v = is_union<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_class_v = is_class<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_function_v = is_function<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_reference_v = is_reference<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_arithmetic_v = is_arithmetic<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_fundamental_v = is_fundamental<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_object_v = is_object<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_scalar_v = is_scalar<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_compound_v = is_compound<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_member_pointer_v = is_member_pointer<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_const_v = is_const<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_volatile_v = is_volatile<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_trivial_v = is_trivial<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_trivially_copyable_v =
    is_trivially_copyable<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_standard_layout_v = is_standard_layout<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_pod_v = is_pod<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_literal_type_v = is_literal_type<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_empty_v = is_empty<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_polymorphic_v = is_polymorphic<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_abstract_v = is_abstract<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_final_v = is_final<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_signed_v = is_signed<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_unsigned_v = is_unsigned<_Tp>::value;
template <typename _Tp, typename... _Args>
  inline constexpr bool is_constructible_v =
    is_constructible<_Tp, _Args...>::value;
template <typename _Tp>
  inline constexpr bool is_default_constructible_v =
    is_default_constructible<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_copy_constructible_v =
    is_copy_constructible<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_move_constructible_v =
    is_move_constructible<_Tp>::value;
template <typename _Tp, typename _Up>
  inline constexpr bool is_assignable_v = is_assignable<_Tp, _Up>::value;
template <typename _Tp>
  inline constexpr bool is_copy_assignable_v = is_copy_assignable<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_move_assignable_v = is_move_assignable<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_destructible_v = is_destructible<_Tp>::value;
template <typename _Tp, typename... _Args>
  inline constexpr bool is_trivially_constructible_v =
    is_trivially_constructible<_Tp, _Args...>::value;
template <typename _Tp>
  inline constexpr bool is_trivially_default_constructible_v =
    is_trivially_default_constructible<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_trivially_copy_constructible_v =
    is_trivially_copy_constructible<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_trivially_move_constructible_v =
    is_trivially_move_constructible<_Tp>::value;
template <typename _Tp, typename _Up>
  inline constexpr bool is_trivially_assignable_v =
    is_trivially_assignable<_Tp, _Up>::value;
template <typename _Tp>
  inline constexpr bool is_trivially_copy_assignable_v =
    is_trivially_copy_assignable<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_trivially_move_assignable_v =
    is_trivially_move_assignable<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_trivially_destructible_v =
    is_trivially_destructible<_Tp>::value;
template <typename _Tp, typename... _Args>
  inline constexpr bool is_nothrow_constructible_v =
    is_nothrow_constructible<_Tp, _Args...>::value;
template <typename _Tp>
  inline constexpr bool is_nothrow_default_constructible_v =
    is_nothrow_default_constructible<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_nothrow_copy_constructible_v =
    is_nothrow_copy_constructible<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_nothrow_move_constructible_v =
    is_nothrow_move_constructible<_Tp>::value;
template <typename _Tp, typename _Up>
  inline constexpr bool is_nothrow_assignable_v =
    is_nothrow_assignable<_Tp, _Up>::value;
template <typename _Tp>
  inline constexpr bool is_nothrow_copy_assignable_v =
    is_nothrow_copy_assignable<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_nothrow_move_assignable_v =
    is_nothrow_move_assignable<_Tp>::value;
template <typename _Tp>
  inline constexpr bool is_nothrow_destructible_v =
    is_nothrow_destructible<_Tp>::value;
template <typename _Tp>
  inline constexpr bool has_virtual_destructor_v =
    has_virtual_destructor<_Tp>::value;
template <typename _Tp>
  inline constexpr size_t alignment_of_v = alignment_of<_Tp>::value;
template <typename _Tp>
  inline constexpr size_t rank_v = rank<_Tp>::value;
template <typename _Tp, unsigned _Idx = 0>
  inline constexpr size_t extent_v = extent<_Tp, _Idx>::value;
template <typename _Tp, typename _Up>
  inline constexpr bool is_same_v = is_same<_Tp, _Up>::value;
template <typename _Base, typename _Derived>
  inline constexpr bool is_base_of_v = is_base_of<_Base, _Derived>::value;
template <typename _From, typename _To>
  inline constexpr bool is_convertible_v = is_convertible<_From, _To>::value;
# 2976 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp>
    struct has_unique_object_representations
    : bool_constant<__has_unique_object_representations(
      remove_cv_t<remove_all_extents_t<_Tp>>
      )>
    { };

  template<typename _Tp>
    inline constexpr bool has_unique_object_representations_v
      = has_unique_object_representations<_Tp>::value;
# 3001 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3
  template<typename _Tp>
    struct is_aggregate
    : bool_constant<__is_aggregate(remove_cv_t<_Tp>)> { };


  template<typename _Tp>
    inline constexpr bool is_aggregate_v = is_aggregate<_Tp>::value;
# 3041 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" 3

}
# 56 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 2 3

namespace std
{

# 72 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
  template<typename _Tp>
    constexpr _Tp&&
    forward(typename std::remove_reference<_Tp>::type& __t) noexcept
    { return static_cast<_Tp&&>(__t); }







  template<typename _Tp>
    constexpr _Tp&&
    forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
    {
      static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
      " substituting _Tp is an lvalue reference type");
      return static_cast<_Tp&&>(__t);
    }






  template<typename _Tp>
    constexpr typename std::remove_reference<_Tp>::type&&
    move(_Tp&& __t) noexcept
    { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }


  template<typename _Tp>
    struct __move_if_noexcept_cond
    : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
                    is_copy_constructible<_Tp>>::type { };
# 116 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
  template<typename _Tp>
    constexpr typename
    conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type
    move_if_noexcept(_Tp& __x) noexcept
    { return std::move(__x); }
# 136 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
  template<typename _Tp>
    inline 
# 137 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h"
          constexpr 
# 137 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
                               _Tp*
    addressof(_Tp& __r) noexcept
    { return std::__addressof(__r); }



  template<typename _Tp>
    const _Tp* addressof(const _Tp&&) = delete;


  template <typename _Tp, typename _Up = _Tp>
    inline _Tp
    __exchange(_Tp& __obj, _Up&& __new_val)
    {
      _Tp __old_val = std::move(__obj);
      __obj = std::forward<_Up>(__new_val);
      return __old_val;
    }
# 176 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/move.h" 3
  template<typename _Tp>
    inline

    typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>,
         is_move_constructible<_Tp>,
         is_move_assignable<_Tp>>::value>::type
    swap(_Tp& __a, _Tp& __b)
    noexcept(__and_<is_nothrow_move_constructible<_Tp>,
             is_nothrow_move_assignable<_Tp>>::value)




    {

     

      _Tp __tmp = std::move(__a);
      __a = std::move(__b);
      __b = std::move(__tmp);
    }




  template<typename _Tp, size_t _Nm>
    inline

    typename enable_if<__is_swappable<_Tp>::value>::type
    swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
    noexcept(__is_nothrow_swappable<_Tp>::value)




    {
      for (size_t __n = 0; __n < _Nm; ++__n)
 swap(__a[__n], __b[__n]);
    }



}
# 41 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/bits/nested_exception.h" 2 3

extern "C++" {

namespace std
{






  class nested_exception
  {
    exception_ptr _M_ptr;

  public:
    nested_exception() noexcept : _M_ptr(current_exception()) { }

    nested_exception(const nested_exception&) noexcept = default;

    nested_exception& operator=(const nested_exception&) noexcept = default;

    virtual ~nested_exception() noexcept;

    [[noreturn]]
    void
    rethrow_nested() const
    {
      if (_M_ptr)
 rethrow_exception(_M_ptr);
      std::terminate();
    }

    exception_ptr
    nested_ptr() const noexcept
    { return _M_ptr; }
  };

  template<typename _Except>
    struct _Nested_exception : public _Except, public nested_exception
    {
      explicit _Nested_exception(const _Except& __ex)
      : _Except(__ex)
      { }

      explicit _Nested_exception(_Except&& __ex)
      : _Except(static_cast<_Except&&>(__ex))
      { }
    };




  template<typename _Tp>
    [[noreturn]]
    inline void
    __throw_with_nested_impl(_Tp&& __t, true_type)
    {
      using _Up = typename remove_reference<_Tp>::type;
      throw _Nested_exception<_Up>{std::forward<_Tp>(__t)};
    }

  template<typename _Tp>
    [[noreturn]]
    inline void
    __throw_with_nested_impl(_Tp&& __t, false_type)
    { throw std::forward<_Tp>(__t); }



  template<typename _Tp>
    [[noreturn]]
    inline void
    throw_with_nested(_Tp&& __t)
    {
      using _Up = typename decay<_Tp>::type;
      using _CopyConstructible
 = __and_<is_copy_constructible<_Up>, is_move_constructible<_Up>>;
      static_assert(_CopyConstructible::value,
   "throw_with_nested argument must be CopyConstructible");
      using __nest = __and_<is_class<_Up>, __bool_constant<!__is_final(_Up)>,
       __not_<is_base_of<nested_exception, _Up>>>;
      std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{});
    }


  template<typename _Tp>
    using __rethrow_if_nested_cond = typename enable_if<
      __and_<is_polymorphic<_Tp>,
      __or_<__not_<is_base_of<nested_exception, _Tp>>,
     is_convertible<_Tp*, nested_exception*>>>::value
    >::type;


  template<typename _Ex>
    inline __rethrow_if_nested_cond<_Ex>
    __rethrow_if_nested_impl(const _Ex* __ptr)
    {
      if (auto __ne_ptr = dynamic_cast<const nested_exception*>(__ptr))
 __ne_ptr->rethrow_nested();
    }


  inline void
  __rethrow_if_nested_impl(const void*)
  { }


  template<typename _Ex>
    inline void
    rethrow_if_nested(const _Ex& __ex)
    { std::__rethrow_if_nested_impl(std::__addressof(__ex)); }


}

}



#pragma GCC visibility pop
# 145 "/Users/pkoning/Documents/svn/gcc/libstdc++-v3/libsupc++/exception" 2 3
# 41 "../../../../gcc/libstdc++-v3/libsupc++/new" 2 3

#pragma GCC visibility push(default)

extern "C++" {

namespace std
{






  class bad_alloc : public exception
  {
  public:
    bad_alloc() throw() { }


    bad_alloc(const bad_alloc&) = default;
    bad_alloc& operator=(const bad_alloc&) = default;




    virtual ~bad_alloc() throw();


    virtual const char* what() const throw();
  };


  class bad_array_new_length : public bad_alloc
  {
  public:
    bad_array_new_length() throw() { }



    virtual ~bad_array_new_length() throw();


    virtual const char* what() const throw();
  };



  enum class align_val_t: size_t {};


  struct nothrow_t
  {

    explicit nothrow_t() = default;

  };

  extern const nothrow_t nothrow;



  typedef void (*new_handler)();



  new_handler set_new_handler(new_handler) throw();



  new_handler get_new_handler() noexcept;

}
# 125 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
void* operator new(std::size_t)
  __attribute__((__externally_visible__));
void* operator new[](std::size_t)
  __attribute__((__externally_visible__));
void operator delete(void*) 
# 129 "../../../../gcc/libstdc++-v3/libsupc++/new"
                           noexcept
  
# 130 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));
void operator delete[](void*) 
# 131 "../../../../gcc/libstdc++-v3/libsupc++/new"
                             noexcept
  
# 132 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));

void operator delete(void*, std::size_t) 
# 134 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                        noexcept
  
# 135 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));
void operator delete[](void*, std::size_t) 
# 136 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                          noexcept
  
# 137 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));

void* operator new(std::size_t, const std::nothrow_t&) 
# 139 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                                      noexcept
  
# 140 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));
void* operator new[](std::size_t, const std::nothrow_t&) 
# 141 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                                        noexcept
  
# 142 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));
void operator delete(void*, const std::nothrow_t&) 
# 143 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                                  noexcept
  
# 144 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));
void operator delete[](void*, const std::nothrow_t&) 
# 145 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                                    noexcept
  
# 146 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
 __attribute__((__externally_visible__));

void* operator new(std::size_t, std::align_val_t)
  __attribute__((__externally_visible__));
void* operator new(std::size_t, std::align_val_t, const std::nothrow_t&)
  
# 151 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 151 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));
void operator delete(void*, std::align_val_t)
  
# 153 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 153 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));
void operator delete(void*, std::align_val_t, const std::nothrow_t&)
  
# 155 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 155 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));
void* operator new[](std::size_t, std::align_val_t)
  __attribute__((__externally_visible__));
void* operator new[](std::size_t, std::align_val_t, const std::nothrow_t&)
  
# 159 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 159 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));
void operator delete[](void*, std::align_val_t)
  
# 161 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 161 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));
void operator delete[](void*, std::align_val_t, const std::nothrow_t&)
  
# 163 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 163 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));

void operator delete(void*, std::size_t, std::align_val_t)
  
# 166 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 166 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));
void operator delete[](void*, std::size_t, std::align_val_t)
  
# 168 "../../../../gcc/libstdc++-v3/libsupc++/new"
 noexcept 
# 168 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                       __attribute__((__externally_visible__));




inline void* operator new(std::size_t, void* __p) 
# 173 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                                 noexcept

# 174 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
{ return __p; }
inline void* operator new[](std::size_t, void* __p) 
# 175 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                                   noexcept

# 176 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
{ return __p; }


inline void operator delete (void*, void*) 
# 179 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                           noexcept 
# 179 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                                                                 { }
inline void operator delete[](void*, void*) 
# 180 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                           noexcept 
# 180 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                                                                 { }

}
# 195 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
namespace std
{


  template<typename _Tp>
    [[nodiscard]] constexpr _Tp*
    launder(_Tp* __p) noexcept
    { return __builtin_launder(__p); }




  template<typename _Ret, typename... _Args 
# 207 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                           , bool _NE
# 207 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                                                                 >
    void launder(_Ret (*)(_Args...) 
# 208 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                   noexcept (_NE)
# 208 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                                                         ) = delete;
  template<typename _Ret, typename... _Args 
# 209 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                           , bool _NE
# 209 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                                                                 >
    void launder(_Ret (*)(_Args......) 
# 210 "../../../../gcc/libstdc++-v3/libsupc++/new"
                                      noexcept (_NE)
# 210 "../../../../gcc/libstdc++-v3/libsupc++/new" 3
                                                            ) = delete;

  void launder(void*) = delete;
  void launder(const void*) = delete;
  void launder(volatile void*) = delete;
  void launder(const volatile void*) = delete;
}




#pragma GCC visibility pop
# 30 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc" 2


# 31 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc"
using std::new_handler;
using std::bad_alloc;
# 52 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc"
# 1 "/usr/local/pdp11-aout/pdp11-aout/include/malloc.h" 1 3 4
# 10 "/usr/local/pdp11-aout/pdp11-aout/include/malloc.h" 3 4
# 1 "/Users/pkoning/Documents/svn/buildpdp/gcc/include/stddef.h" 1 3 4
# 11 "/usr/local/pdp11-aout/pdp11-aout/include/malloc.h" 2 3 4


# 1 "/usr/local/pdp11-aout/pdp11-aout/include/machine/malloc.h" 1 3 4
# 14 "/usr/local/pdp11-aout/pdp11-aout/include/malloc.h" 2 3 4



# 16 "/usr/local/pdp11-aout/pdp11-aout/include/malloc.h" 3 4
extern "C" {





struct mallinfo {
  int arena;
  int ordblks;
  int smblks;
  int hblks;
  int hblkhd;
  int usmblks;
  int fsmblks;
  int uordblks;
  int fordblks;
  int keepcost;
};



extern void * malloc (size_t);




extern void * _malloc_r (struct _reent *, size_t);


extern void free (void *);




extern void _free_r (struct _reent *, void *);


extern void * realloc (void *, size_t);




extern void * _realloc_r (struct _reent *, void *, size_t);


extern void * calloc (size_t, size_t);




extern void * _calloc_r (struct _reent *, size_t, size_t);


extern void * memalign (size_t, size_t);




extern void * _memalign_r (struct _reent *, size_t, size_t);


extern struct mallinfo mallinfo (void);




extern struct mallinfo _mallinfo_r (struct _reent *);


extern void malloc_stats (void);




extern void _malloc_stats_r (struct _reent *);


extern int mallopt (int, int);




extern int _mallopt_r (struct _reent *, int, int);


extern size_t malloc_usable_size (void *);




extern size_t _malloc_usable_size_r (struct _reent *, void *);





extern void * valloc (size_t);




extern void * _valloc_r (struct _reent *, size_t);


extern void * pvalloc (size_t);




extern void * _pvalloc_r (struct _reent *, size_t);


extern int malloc_trim (size_t);




extern int _malloc_trim_r (struct _reent *, size_t);




extern void mstats (char *);




extern void _mstats_r (struct _reent *, char *);
# 162 "/usr/local/pdp11-aout/pdp11-aout/include/malloc.h" 3 4
extern void cfree (void *);



}
# 53 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc" 2
# 87 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc"
 
# 87 "../../../../gcc/libstdc++-v3/libsupc++/new_opa.cc"
                        void *
operator new (std::size_t sz, std::align_val_t al)
{
  void *p;
  std::size_t align = (std::size_t)al;


  if (sz == 0)
    sz = 1;







  while (__builtin_expect ((p = memalign (align, sz)) == 0, false))
    {
      new_handler handler = std::get_new_handler ();
      if (! handler)
 (throw (bad_alloc()));
      handler ();
    }

  return p;
}

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-17 13:08           ` Paul Koning
@ 2018-07-17 13:36             ` Richard Biener
  2018-07-17 13:38               ` Richard Biener
  2018-10-09 21:39               ` Paul Koning
  0 siblings, 2 replies; 14+ messages in thread
From: Richard Biener @ 2018-07-17 13:36 UTC (permalink / raw)
  To: paulkoning; +Cc: GCC Development

On Tue, Jul 17, 2018 at 3:08 PM Paul Koning <paulkoning@comcast.net> wrote:
>
>
> > On Jul 17, 2018, at 5:46 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> >
> >> ...
> >
> > There is not enough information for anyone to help you without
> > reproducing the issue which is maybe too much to ask for ;)
> >
> > Can you debug_tree () the offending decl in gdb?
>
> Yes, here it is.  I don't know anything about debugging in this area, so tools like debug_tree are good to learn about.  How would I interpret its output?
>
> pkoning:gcc pkoning$ lldb ./cc1plus -- new_opa.ii -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z
> (lldb) target create "./cc1plus"
> Current executable set to './cc1plus' (x86_64).
> (lldb) settings set -- target.run-args  "new_opa.ii" "-fno-implicit-templates" "-Wall" "-Wextra" "-Wwrite-strings" "-Wcast-qual" "-Wabi" "-fdiagnostics-show-location=once" "-frandom-seed=new_opa.lo" "-g" "-O2" "-std=gnu++1z"
> (lldb) b internal_error
> Breakpoint 1: where = cc1plus`internal_error(char const*, ...) + 104 at diagnostic.c:1441, address = 0x0000000100c21378
> (lldb) run
> Process 10880 launched: './cc1plus' (x86_64)
> cc1plus: warning: -Wabi won't warn about anything [-Wabi]
> cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
> cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
>  long int std::abs(long int) long long int std::abs(long long int) constexpr double std::abs(double) constexpr float std::abs(float) constexpr long double std::abs(long double) ldiv_t std::div(long int, long int) std::exception::exception() std::exception::exception() std::exception::exception() std::bad_exception::bad_exception() std::bad_exception::bad_exception() std::bad_exception::bad_exception() const char* std::type_info::name() const bool std::type_info::operator!=(const std::type_info&) const std::size_t std::type_info::hash_code() const std::type_info::type_info(const char*) std::type_info::type_info(const char*) std::type_info::type_info(const char*) std::bad_cast::bad_cast() std::bad_cast::bad_cast() std::bad_cast::bad_cast() std::bad_typeid::bad_typeid() std::bad_typeid::bad_typeid() std::bad_typeid::bad_typeid() std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr& std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::operator bool() const void std::__exception_ptr::swap(std::__exception_ptr::exception_ptr&, std::__exception_ptr::exception_ptr&) void std::__exception_ptr::__dest_thunk(void*) std::__exception_ptr::exception_ptr std::make_exception_ptr(_Ex) constexpr _Tp* std::__addressof(_Tp&) constexpr std::integral_constant<_Tp, __v>::operator std::integral_constant<_Tp, __v>::value_type() const constexpr std::integral_constant<_Tp, __v>::value_type std::integral_constant<_Tp, __v>::operator()() const std::integral_constant<bool, false> constexpr const bool std::integral_constant<bool, false>::value constexpr const bool std::integral_constant<bool, false>::value std::integral_constant<bool, true> constexpr const bool std::integral_constant<bool, true>::value constexpr const bool std::integral_constant<bool, true>::value std::integral_constant<short unsigned int, 0> constexpr const short unsigned int std::integral_constant<short unsigned int, 0>::value constexpr const short unsigned int std::integral_constant<short unsigned int, 0>::value std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<long long unsigned int> std::__make_unsigned_selector_base::_List<> constexpr const size_t std::__make_unsigned_selector_base::_List<long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector<wchar_t, false, true> std::__make_unsigned_selector_base::__select<2, std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<2, std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>, true> std::is_const<wchar_t> constexpr const bool std::integral_constant<bool, false>::value std::is_volatile<wchar_t> std::__match_cv_qualifiers<wchar_t, short unsigned int, false, false> std::__cv_selector<short unsigned int, false, false> std::__make_unsigned_selector<char16_t, false, true> std::is_const<char16_t> std::is_volatile<char16_t> std::__match_cv_qualifiers<char16_t, short unsigned int, false, false> std::__make_unsigned_selector<char32_t, false, true> std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>, true> std::is_const<char32_t> std::is_volatile<char32_t> std::__match_cv_qualifiers<char32_t, long unsigned int, false, false> std::__cv_selector<long unsigned int, false, false> std::__make_signed_selector<wchar_t, false, true> std::is_integral<wchar_t> std::remove_cv<wchar_t> std::remove_volatile<wchar_t> std::remove_const<wchar_t> constexpr const bool std::integral_constant<bool, true>::value std::is_enum<wchar_t> std::__make_unsigned_selector<wchar_t, true, false> std::is_integral<short unsigned int> std::remove_cv<short unsigned int> std::remove_volatile<short unsigned int> std::remove_const<short unsigned int> std::is_enum<short unsigned int> std::__make_signed_selector<short unsigned int, true, false> std::is_const<short unsigned int> std::is_volatile<short unsigned int> std::__match_cv_qualifiers<short unsigned int, short int, false, false> std::__cv_selector<short int, false, false> std::__make_signed_selector<char16_t, false, true> std::is_integral<char16_t> std::remove_cv<char16_t> std::remove_volatile<char16_t> std::remove_const<char16_t> std::is_enum<char16_t> std::__make_unsigned_selector<char16_t, true, false> std::__make_signed_selector<char32_t, false, true> std::is_integral<char32_t> std::remove_cv<char32_t> std::remove_volatile<char32_t> std::remove_const<char32_t> std::is_enum<char32_t> std::__make_unsigned_selector<char32_t, true, false> std::is_integral<long unsigned int> std::remove_cv<long unsigned int> std::remove_volatile<long unsigned int> std::remove_const<long unsigned int> std::is_enum<long unsigned int> std::__make_signed_selector<long unsigned int, true, false> std::is_const<long unsigned int> std::is_volatile<long unsigned int> std::__match_cv_qualifiers<long unsigned int, long int, false, false> std::__cv_selector<long int, false, false> decltype (__declval<_Tp>(0)) std::declval() constexpr bool std::__call_is_nt(std::__invoke_memfun_ref) constexpr bool std::__call_is_nt(std::__invoke_memfun_deref) constexpr bool std::__call_is_nt(std::__invoke_memobj_ref) constexpr bool std::__call_is_nt(std::__invoke_memobj_deref) constexpr bool std::__call_is_nt(std::__invoke_other) constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&) constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&&) constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) constexpr typename std::conditional<std::__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type std::move_if_noexcept(_Tp&) constexpr _Tp* std::addressof(_Tp&) _Tp std::__exchange(_Tp&, _Up&&) typename std::enable_if<std::__and_<std::__not_<std::__is_tuple_like<_Tp> >, std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> >::value>::type std::swap(_Tp&, _Tp&) typename std::enable_if<std::__is_swappable<_Tp>::value>::type std::swap(_Tp (&)[_Nm], _Tp (&)[_Nm]) std::nested_exception::nested_exception() std::nested_exception::nested_exception() std::nested_exception::nested_exception() void std::nested_exception::rethrow_nested() const std::__exception_ptr::exception_ptr std::nested_exception::nested_ptr() const std::_Nested_exception<_Except>::_Nested_exception(const _Except&) std::_Nested_exception<_Except>::_Nested_exception(_Except&&) void std::__throw_with_nested_impl(_Tp&&, std::true_type) void std::__throw_with_nested_impl(_Tp&&, std::false_type) void std::throw_with_nested(_Tp&&) std::__rethrow_if_nested_cond<_Ex> std::__rethrow_if_nested_impl(const _Ex*) void std::__rethrow_if_nested_impl(const void*) void std::rethrow_if_nested(const _Ex&) std::bad_alloc::bad_alloc() std::bad_alloc::bad_alloc() std::bad_alloc::bad_alloc() std::bad_array_new_length::bad_array_new_length() std::bad_array_new_length::bad_array_new_length() std::bad_array_new_length::bad_array_new_length() void* operator new(std::size_t, void*) void* operator new [](std::size_t, void*) void operator delete(void*, void*) void operator delete [](void*, void*) constexpr _Tp* std::launder(_Tp*) void* operator new(std::size_t, std::align_val_t)cc1plus was compiled with optimization - stepping may behave oddly; variables may not be available.
> Process 10880 stopped
> * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
>     frame #0: 0x0000000100c21378 cc1plus`internal_error(gmsgid="in %s, at %s:%d") at diagnostic.c:1441 [opt]
>    1438 internal_error (const char *gmsgid, ...)
>    1439 {
>    1440   va_list ap;
> -> 1441   va_start (ap, gmsgid);
>    1442   rich_location richloc (line_table, input_location);
>    1443   diagnostic_impl (&richloc, -1, gmsgid, &ap, DK_ICE);
>    1444   va_end (ap);
> Target 0: (cc1plus) stopped.
> (lldb) frame sel 2
> frame #2: 0x0000000100074b36 cc1plus`import_export_decl(decl=0x000000014269c750) at decl2.c:2877 [opt]
>    2874   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
>    2875   /* Any code that creates entities with TREE_PUBLIC cleared should
>    2876      also set DECL_INTERFACE_KNOWN.  */
> -> 2877   gcc_assert (TREE_PUBLIC (decl));
>    2878   if (TREE_CODE (decl) == FUNCTION_DECL)
>    2879     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
>    2880                 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
> (lldb) call debug_tree(decl)
>  <var_decl 0x14269c750 value
>     type <boolean_type 0x1426aa5e8 bool readonly unsigned type_6 QI
>         size <integer_cst 0x142502768 constant 8>
>         unit-size <integer_cst 0x142502780 constant 1>
>         align:8 warn_if_not_align:0 symtab:150 alias-set -1 canonical-type 0x1426aa5e8 precision:1 min <integer_cst 0x1425029d8 0> max <integer_cst 0x142502a08 1>>
>     readonly constant used static tree_1 tree_2 tree_3 unsigned nonlocal in_system_header read decl_1 QI /Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits:59:28 size <integer_cst 0x142502768 8> unit-size <integer_cst 0x142502780 1>
>     align:8 warn_if_not_align:0 context <record_type 0x1426a7e70 integral_constant> initial <integer_cst 0x1425029d8 0>
>     template-info 0x1426a64e0 chain <function_decl 0x1426a0600 __conv_op >>
> (lldb)

lldb? eh ... ;)

anyhow, this is

namespace std
{

# 56 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
3
  template<typename _Tp, _Tp __v>
    struct integral_constant
    {
      static constexpr _Tp value = __v;
^^^

which should have TREE_PUBLIC set.  My next step would be to watch how
this flag changes (if it does...)

break at ggc-page.c:1442 (the return stmt of ggc_internal_alloc)
conditional on result == 0x14269c750
and then watch *&the-decl->base.public_flag printing said flag when
the watchpoint hits
(because you're watching the whole integer containing the bitfield bit).

If that doesn't go anywhere try reducing the source file using creduce
or by other means.

Maybe look at reset_decl_linkage () and visibility support in general.

Richard.

> Build/configure info:
>
> pkoning:gcc pkoning$ ./xg++ --verbose
> Using built-in specs.
> COLLECT_GCC=./xg++
> Target: pdp11-aout
> Configured with: ../gcc/configure --target=pdp11-aout --prefix=/usr/local/pdp11-aout --without-x target_alias=pdp11-aout --with-mpc=/usr/local --with-mpfr=/usr/local --with-gmp=/usr/local --disable-libssp --disable-shared --with-newlib --enable-languages=c,c++,fortran --enable-checking=rtl
> Thread model: single
> gcc version 9.0.0 20180716 (experimental) (GCC)
>
> The new_opa.ii file is attached.
>
>         paul
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-17 13:36             ` Richard Biener
@ 2018-07-17 13:38               ` Richard Biener
  2018-07-17 16:27                 ` Paul Koning
  2018-10-09 21:39               ` Paul Koning
  1 sibling, 1 reply; 14+ messages in thread
From: Richard Biener @ 2018-07-17 13:38 UTC (permalink / raw)
  To: paulkoning; +Cc: GCC Development

On Tue, Jul 17, 2018 at 3:36 PM Richard Biener
<richard.guenther@gmail.com> wrote:
>
> On Tue, Jul 17, 2018 at 3:08 PM Paul Koning <paulkoning@comcast.net> wrote:
> >
> >
> > > On Jul 17, 2018, at 5:46 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> > >
> > >> ...
> > >
> > > There is not enough information for anyone to help you without
> > > reproducing the issue which is maybe too much to ask for ;)
> > >
> > > Can you debug_tree () the offending decl in gdb?
> >
> > Yes, here it is.  I don't know anything about debugging in this area, so tools like debug_tree are good to learn about.  How would I interpret its output?
> >
> > pkoning:gcc pkoning$ lldb ./cc1plus -- new_opa.ii -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z
> > (lldb) target create "./cc1plus"
> > Current executable set to './cc1plus' (x86_64).
> > (lldb) settings set -- target.run-args  "new_opa.ii" "-fno-implicit-templates" "-Wall" "-Wextra" "-Wwrite-strings" "-Wcast-qual" "-Wabi" "-fdiagnostics-show-location=once" "-frandom-seed=new_opa.lo" "-g" "-O2" "-std=gnu++1z"
> > (lldb) b internal_error
> > Breakpoint 1: where = cc1plus`internal_error(char const*, ...) + 104 at diagnostic.c:1441, address = 0x0000000100c21378
> > (lldb) run
> > Process 10880 launched: './cc1plus' (x86_64)
> > cc1plus: warning: -Wabi won't warn about anything [-Wabi]
> > cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default
> > cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7
> >  long int std::abs(long int) long long int std::abs(long long int) constexpr double std::abs(double) constexpr float std::abs(float) constexpr long double std::abs(long double) ldiv_t std::div(long int, long int) std::exception::exception() std::exception::exception() std::exception::exception() std::bad_exception::bad_exception() std::bad_exception::bad_exception() std::bad_exception::bad_exception() const char* std::type_info::name() const bool std::type_info::operator!=(const std::type_info&) const std::size_t std::type_info::hash_code() const std::type_info::type_info(const char*) std::type_info::type_info(const char*) std::type_info::type_info(const char*) std::bad_cast::bad_cast() std::bad_cast::bad_cast() std::bad_cast::bad_cast() std::bad_typeid::bad_typeid() std::bad_typeid::bad_typeid() std::bad_typeid::bad_typeid() std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr& std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&) std::__exception_ptr::exception_ptr::operator bool() const void std::__exception_ptr::swap(std::__exception_ptr::exception_ptr&, std::__exception_ptr::exception_ptr&) void std::__exception_ptr::__dest_thunk(void*) std::__exception_ptr::exception_ptr std::make_exception_ptr(_Ex) constexpr _Tp* std::__addressof(_Tp&) constexpr std::integral_constant<_Tp, __v>::operator std::integral_constant<_Tp, __v>::value_type() const constexpr std::integral_constant<_Tp, __v>::value_type std::integral_constant<_Tp, __v>::operator()() const std::integral_constant<bool, false> constexpr const bool std::integral_constant<bool, false>::value constexpr const bool std::integral_constant<bool, false>::value std::integral_constant<bool, true> constexpr const bool std::integral_constant<bool, true>::value constexpr const bool std::integral_constant<bool, true>::value std::integral_constant<short unsigned int, 0> constexpr const short unsigned int std::integral_constant<short unsigned int, 0>::value constexpr const short unsigned int std::integral_constant<short unsigned int, 0>::value std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int> std::__make_unsigned_selector_base::_List<long long unsigned int> std::__make_unsigned_selector_base::_List<> constexpr const size_t std::__make_unsigned_selector_base::_List<long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector<wchar_t, false, true> std::__make_unsigned_selector_base::__select<2, std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<2, std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>, true> std::is_const<wchar_t> constexpr const bool std::integral_constant<bool, false>::value std::is_volatile<wchar_t> std::__match_cv_qualifiers<wchar_t, short unsigned int, false, false> std::__cv_selector<short unsigned int, false, false> std::__make_unsigned_selector<char16_t, false, true> std::is_const<char16_t> std::is_volatile<char16_t> std::__match_cv_qualifiers<char16_t, short unsigned int, false, false> std::__make_unsigned_selector<char32_t, false, true> std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<unsigned char, short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, long long unsigned int>, false> constexpr const size_t std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>::__size std::__make_unsigned_selector_base::__select<4, std::__make_unsigned_selector_base::_List<long unsigned int, long long unsigned int>, true> std::is_const<char32_t> std::is_volatile<char32_t> std::__match_cv_qualifiers<char32_t, long unsigned int, false, false> std::__cv_selector<long unsigned int, false, false> std::__make_signed_selector<wchar_t, false, true> std::is_integral<wchar_t> std::remove_cv<wchar_t> std::remove_volatile<wchar_t> std::remove_const<wchar_t> constexpr const bool std::integral_constant<bool, true>::value std::is_enum<wchar_t> std::__make_unsigned_selector<wchar_t, true, false> std::is_integral<short unsigned int> std::remove_cv<short unsigned int> std::remove_volatile<short unsigned int> std::remove_const<short unsigned int> std::is_enum<short unsigned int> std::__make_signed_selector<short unsigned int, true, false> std::is_const<short unsigned int> std::is_volatile<short unsigned int> std::__match_cv_qualifiers<short unsigned int, short int, false, false> std::__cv_selector<short int, false, false> std::__make_signed_selector<char16_t, false, true> std::is_integral<char16_t> std::remove_cv<char16_t> std::remove_volatile<char16_t> std::remove_const<char16_t> std::is_enum<char16_t> std::__make_unsigned_selector<char16_t, true, false> std::__make_signed_selector<char32_t, false, true> std::is_integral<char32_t> std::remove_cv<char32_t> std::remove_volatile<char32_t> std::remove_const<char32_t> std::is_enum<char32_t> std::__make_unsigned_selector<char32_t, true, false> std::is_integral<long unsigned int> std::remove_cv<long unsigned int> std::remove_volatile<long unsigned int> std::remove_const<long unsigned int> std::is_enum<long unsigned int> std::__make_signed_selector<long unsigned int, true, false> std::is_const<long unsigned int> std::is_volatile<long unsigned int> std::__match_cv_qualifiers<long unsigned int, long int, false, false> std::__cv_selector<long int, false, false> decltype (__declval<_Tp>(0)) std::declval() constexpr bool std::__call_is_nt(std::__invoke_memfun_ref) constexpr bool std::__call_is_nt(std::__invoke_memfun_deref) constexpr bool std::__call_is_nt(std::__invoke_memobj_ref) constexpr bool std::__call_is_nt(std::__invoke_memobj_deref) constexpr bool std::__call_is_nt(std::__invoke_other) constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&) constexpr _Tp&& std::forward(typename std::remove_reference<_Tp>::type&&) constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) constexpr typename std::conditional<std::__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type std::move_if_noexcept(_Tp&) constexpr _Tp* std::addressof(_Tp&) _Tp std::__exchange(_Tp&, _Up&&) typename std::enable_if<std::__and_<std::__not_<std::__is_tuple_like<_Tp> >, std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> >::value>::type std::swap(_Tp&, _Tp&) typename std::enable_if<std::__is_swappable<_Tp>::value>::type std::swap(_Tp (&)[_Nm], _Tp (&)[_Nm]) std::nested_exception::nested_exception() std::nested_exception::nested_exception() std::nested_exception::nested_exception() void std::nested_exception::rethrow_nested() const std::__exception_ptr::exception_ptr std::nested_exception::nested_ptr() const std::_Nested_exception<_Except>::_Nested_exception(const _Except&) std::_Nested_exception<_Except>::_Nested_exception(_Except&&) void std::__throw_with_nested_impl(_Tp&&, std::true_type) void std::__throw_with_nested_impl(_Tp&&, std::false_type) void std::throw_with_nested(_Tp&&) std::__rethrow_if_nested_cond<_Ex> std::__rethrow_if_nested_impl(const _Ex*) void std::__rethrow_if_nested_impl(const void*) void std::rethrow_if_nested(const _Ex&) std::bad_alloc::bad_alloc() std::bad_alloc::bad_alloc() std::bad_alloc::bad_alloc() std::bad_array_new_length::bad_array_new_length() std::bad_array_new_length::bad_array_new_length() std::bad_array_new_length::bad_array_new_length() void* operator new(std::size_t, void*) void* operator new [](std::size_t, void*) void operator delete(void*, void*) void operator delete [](void*, void*) constexpr _Tp* std::launder(_Tp*) void* operator new(std::size_t, std::align_val_t)cc1plus was compiled with optimization - stepping may behave oddly; variables may not be available.
> > Process 10880 stopped
> > * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
> >     frame #0: 0x0000000100c21378 cc1plus`internal_error(gmsgid="in %s, at %s:%d") at diagnostic.c:1441 [opt]
> >    1438 internal_error (const char *gmsgid, ...)
> >    1439 {
> >    1440   va_list ap;
> > -> 1441   va_start (ap, gmsgid);
> >    1442   rich_location richloc (line_table, input_location);
> >    1443   diagnostic_impl (&richloc, -1, gmsgid, &ap, DK_ICE);
> >    1444   va_end (ap);
> > Target 0: (cc1plus) stopped.
> > (lldb) frame sel 2
> > frame #2: 0x0000000100074b36 cc1plus`import_export_decl(decl=0x000000014269c750) at decl2.c:2877 [opt]
> >    2874   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
> >    2875   /* Any code that creates entities with TREE_PUBLIC cleared should
> >    2876      also set DECL_INTERFACE_KNOWN.  */
> > -> 2877   gcc_assert (TREE_PUBLIC (decl));
> >    2878   if (TREE_CODE (decl) == FUNCTION_DECL)
> >    2879     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
> >    2880                 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
> > (lldb) call debug_tree(decl)
> >  <var_decl 0x14269c750 value
> >     type <boolean_type 0x1426aa5e8 bool readonly unsigned type_6 QI
> >         size <integer_cst 0x142502768 constant 8>
> >         unit-size <integer_cst 0x142502780 constant 1>
> >         align:8 warn_if_not_align:0 symtab:150 alias-set -1 canonical-type 0x1426aa5e8 precision:1 min <integer_cst 0x1425029d8 0> max <integer_cst 0x142502a08 1>>
> >     readonly constant used static tree_1 tree_2 tree_3 unsigned nonlocal in_system_header read decl_1 QI /Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits:59:28 size <integer_cst 0x142502768 8> unit-size <integer_cst 0x142502780 1>
> >     align:8 warn_if_not_align:0 context <record_type 0x1426a7e70 integral_constant> initial <integer_cst 0x1425029d8 0>
> >     template-info 0x1426a64e0 chain <function_decl 0x1426a0600 __conv_op >>
> > (lldb)
>
> lldb? eh ... ;)
>
> anyhow, this is
>
> namespace std
> {
>
> # 56 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
> 3
>   template<typename _Tp, _Tp __v>
>     struct integral_constant
>     {
>       static constexpr _Tp value = __v;
> ^^^
>
> which should have TREE_PUBLIC set.  My next step would be to watch how
> this flag changes (if it does...)
>
> break at ggc-page.c:1442 (the return stmt of ggc_internal_alloc)
> conditional on result == 0x14269c750
> and then watch *&the-decl->base.public_flag printing said flag when
> the watchpoint hits
> (because you're watching the whole integer containing the bitfield bit).
>
> If that doesn't go anywhere try reducing the source file using creduce
> or by other means.
>
> Maybe look at reset_decl_linkage () and visibility support in general.

Oh, and generally a grep for 'targetm' in cp/ might reveal bits that sound
interesting.

Richard.

> Richard.
>
> > Build/configure info:
> >
> > pkoning:gcc pkoning$ ./xg++ --verbose
> > Using built-in specs.
> > COLLECT_GCC=./xg++
> > Target: pdp11-aout
> > Configured with: ../gcc/configure --target=pdp11-aout --prefix=/usr/local/pdp11-aout --without-x target_alias=pdp11-aout --with-mpc=/usr/local --with-mpfr=/usr/local --with-gmp=/usr/local --disable-libssp --disable-shared --with-newlib --enable-languages=c,c++,fortran --enable-checking=rtl
> > Thread model: single
> > gcc version 9.0.0 20180716 (experimental) (GCC)
> >
> > The new_opa.ii file is attached.
> >
> >         paul
> >

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-17 13:38               ` Richard Biener
@ 2018-07-17 16:27                 ` Paul Koning
  2018-07-23 14:30                   ` Joseph Myers
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Koning @ 2018-07-17 16:27 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Development



> On Jul 17, 2018, at 9:38 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> 
>> ...
>> lldb? eh ... ;)

Yes, gdb is hard to make work on Mac OS.

>> anyhow, this is
>> 
>> namespace std
>> {
>> 
>> # 56 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
>> 3
>>  template<typename _Tp, _Tp __v>
>>    struct integral_constant
>>    {
>>      static constexpr _Tp value = __v;
>> ^^^
>> 
>> which should have TREE_PUBLIC set.  My next step would be to watch how
>> this flag changes (if it does...)
>> 
>> break at ggc-page.c:1442 (the return stmt of ggc_internal_alloc)
>> conditional on result == 0x14269c750
>> and then watch *&the-decl->base.public_flag printing said flag when
>> the watchpoint hits
>> (because you're watching the whole integer containing the bitfield bit).
>> 
>> If that doesn't go anywhere try reducing the source file using creduce
>> or by other means.
>> 
>> Maybe look at reset_decl_linkage () and visibility support in general.
> 
> Oh, and generally a grep for 'targetm' in cp/ might reveal bits that sound
> interesting.

That reveals some things but nothing jumps out at me.  However... pdp11 is an a.out target, not an ELF target.  Would that explain the problem?  If yes, is there a workaround (short of implementing ELF)?

	paul


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-17 16:27                 ` Paul Koning
@ 2018-07-23 14:30                   ` Joseph Myers
  2018-07-23 14:31                     ` Paul Koning
  0 siblings, 1 reply; 14+ messages in thread
From: Joseph Myers @ 2018-07-23 14:30 UTC (permalink / raw)
  To: Paul Koning; +Cc: Richard Biener, GCC Development

On Tue, 17 Jul 2018, Paul Koning wrote:

> That reveals some things but nothing jumps out at me.  However... pdp11 
> is an a.out target, not an ELF target.  Would that explain the problem?  
> If yes, is there a workaround (short of implementing ELF)?

As there are hardly any targets left without named section support, using 
ELF might be a good idea so you don't have to deal with the 
no-named-sections issues.

The ELF e_machine value EM_PDP11 was assigned to Lars Brinkoff, 
lars@nocrew.org, 30 May 2002, according to the comments in 
ch4.eheader.html.  I don't know if an actual ELF ABI has been defined.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-23 14:30                   ` Joseph Myers
@ 2018-07-23 14:31                     ` Paul Koning
  0 siblings, 0 replies; 14+ messages in thread
From: Paul Koning @ 2018-07-23 14:31 UTC (permalink / raw)
  To: Joseph Myers; +Cc: GCC Development



> On Jul 23, 2018, at 10:21 AM, Joseph Myers <joseph@codesourcery.com> wrote:
> 
> On Tue, 17 Jul 2018, Paul Koning wrote:
> 
>> That reveals some things but nothing jumps out at me.  However... pdp11 
>> is an a.out target, not an ELF target.  Would that explain the problem?  
>> If yes, is there a workaround (short of implementing ELF)?
> 
> As there are hardly any targets left without named section support, using 
> ELF might be a good idea so you don't have to deal with the 
> no-named-sections issues.
> 
> The ELF e_machine value EM_PDP11 was assigned to Lars Brinkoff, 
> lars@nocrew.org, 30 May 2002, according to the comments in 
> ch4.eheader.html.  I don't know if an actual ELF ABI has been defined.

I don't know of pdp11 ELF code in binutils.  

The named-section stuff itself doesn't seem to be directly related.  If I run the test with the target flag -mdec-asm, it still fails.  That mode does support named sections.

I can easily see the issue with the debugger and compare with a target that works (vax).  So I should be able to find this, at least once I figure out how to turn off address space randomization on my host.

	paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-07-17 13:36             ` Richard Biener
  2018-07-17 13:38               ` Richard Biener
@ 2018-10-09 21:39               ` Paul Koning
  2018-10-10  9:52                 ` Richard Biener
  1 sibling, 1 reply; 14+ messages in thread
From: Paul Koning @ 2018-10-09 21:39 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Development



> On Jul 17, 2018, at 9:36 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> 
> On Tue, Jul 17, 2018 at 3:08 PM Paul Koning <paulkoning@comcast.net> wrote:
>> 
>> 
>>> On Jul 17, 2018, at 5:46 AM, Richard Biener <richard.guenther@gmail.com> wrote:
>>> 
>>>> ...
>>> 
>>> There is not enough information for anyone to help you without
>>> reproducing the issue which is maybe too much to ask for ;)
>>> 
>>> Can you debug_tree () the offending decl in gdb?
>> 
>> Yes, here it is.  I don't know anything about debugging in this area, so tools like debug_tree are good to learn about.  How would I interpret its output?
>> 
>> pkoning:gcc pkoning$ lldb ./cc1plus -- new_opa.ii -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z
>> (lldb) target create "./cc1plus"
>> Current executable set to './cc1plus' (x86_64).
>> ...
>> Process 10880 stopped
>> * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
>>    frame #0: 0x0000000100c21378 cc1plus`internal_error(gmsgid="in %s, at %s:%d") at diagnostic.c:1441 [opt]
>>   1438 internal_error (const char *gmsgid, ...)
>>   1439 {
>>   1440   va_list ap;
>> -> 1441   va_start (ap, gmsgid);
>>   1442   rich_location richloc (line_table, input_location);
>>   1443   diagnostic_impl (&richloc, -1, gmsgid, &ap, DK_ICE);
>>   1444   va_end (ap);
>> Target 0: (cc1plus) stopped.
>> (lldb) frame sel 2
>> frame #2: 0x0000000100074b36 cc1plus`import_export_decl(decl=0x000000014269c750) at decl2.c:2877 [opt]
>>   2874   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
>>   2875   /* Any code that creates entities with TREE_PUBLIC cleared should
>>   2876      also set DECL_INTERFACE_KNOWN.  */
>> -> 2877   gcc_assert (TREE_PUBLIC (decl));
>>   2878   if (TREE_CODE (decl) == FUNCTION_DECL)
>>   2879     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
>>   2880                 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
>> (lldb) call debug_tree(decl)
>> <var_decl 0x14269c750 value
>>    type <boolean_type 0x1426aa5e8 bool readonly unsigned type_6 QI
>>        size <integer_cst 0x142502768 constant 8>
>>        unit-size <integer_cst 0x142502780 constant 1>
>>        align:8 warn_if_not_align:0 symtab:150 alias-set -1 canonical-type 0x1426aa5e8 precision:1 min <integer_cst 0x1425029d8 0> max <integer_cst 0x142502a08 1>>
>>    readonly constant used static tree_1 tree_2 tree_3 unsigned nonlocal in_system_header read decl_1 QI /Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits:59:28 size <integer_cst 0x142502768 8> unit-size <integer_cst 0x142502780 1>
>>    align:8 warn_if_not_align:0 context <record_type 0x1426a7e70 integral_constant> initial <integer_cst 0x1425029d8 0>
>>    template-info 0x1426a64e0 chain <function_decl 0x1426a0600 __conv_op >>
>> (lldb)
> 
> lldb? eh ... ;)
> 
> anyhow, this is
> 
> namespace std
> {
> 
> # 56 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
> 3
>  template<typename _Tp, _Tp __v>
>    struct integral_constant
>    {
>      static constexpr _Tp value = __v;
> ^^^
> 
> which should have TREE_PUBLIC set.  My next step would be to watch how
> this flag changes (if it does...)
> 
> break at ggc-page.c:1442 (the return stmt of ggc_internal_alloc)
> conditional on result == 0x14269c750
> and then watch *&the-decl->base.public_flag printing said flag when
> the watchpoint hits
> (because you're watching the whole integer containing the bitfield bit).
> 
> If that doesn't go anywhere try reducing the source file using creduce
> or by other means.
> 
> Maybe look at reset_decl_linkage () and visibility support in general.

I trimmed the file a bit.

Managed to find where public_flag is cleared.  It is in cp/expr.c maybe_commonize_var, line 5619, here:

	  else
	    {
	      /* While for initialized variables, we must use internal
		 linkage -- which means that multiple copies will not
		 be merged.  */
	      TREE_PUBLIC (decl) = 0;
	      DECL_COMMON (decl) = 0;

Could it be related to the fact that I have an a.out (rather than ELF) target?

	paul

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: ICE building a libsupc++ file, pdp11 target
  2018-10-09 21:39               ` Paul Koning
@ 2018-10-10  9:52                 ` Richard Biener
  0 siblings, 0 replies; 14+ messages in thread
From: Richard Biener @ 2018-10-10  9:52 UTC (permalink / raw)
  To: Paul Koning; +Cc: GCC Development

On Tue, Oct 9, 2018 at 11:39 PM Paul Koning <paulkoning@comcast.net> wrote:
>
>
>
> > On Jul 17, 2018, at 9:36 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> >
> > On Tue, Jul 17, 2018 at 3:08 PM Paul Koning <paulkoning@comcast.net> wrote:
> >>
> >>
> >>> On Jul 17, 2018, at 5:46 AM, Richard Biener <richard.guenther@gmail.com> wrote:
> >>>
> >>>> ...
> >>>
> >>> There is not enough information for anyone to help you without
> >>> reproducing the issue which is maybe too much to ask for ;)
> >>>
> >>> Can you debug_tree () the offending decl in gdb?
> >>
> >> Yes, here it is.  I don't know anything about debugging in this area, so tools like debug_tree are good to learn about.  How would I interpret its output?
> >>
> >> pkoning:gcc pkoning$ lldb ./cc1plus -- new_opa.ii -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 -std=gnu++1z
> >> (lldb) target create "./cc1plus"
> >> Current executable set to './cc1plus' (x86_64).
> >> ...
> >> Process 10880 stopped
> >> * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
> >>    frame #0: 0x0000000100c21378 cc1plus`internal_error(gmsgid="in %s, at %s:%d") at diagnostic.c:1441 [opt]
> >>   1438 internal_error (const char *gmsgid, ...)
> >>   1439 {
> >>   1440   va_list ap;
> >> -> 1441   va_start (ap, gmsgid);
> >>   1442   rich_location richloc (line_table, input_location);
> >>   1443   diagnostic_impl (&richloc, -1, gmsgid, &ap, DK_ICE);
> >>   1444   va_end (ap);
> >> Target 0: (cc1plus) stopped.
> >> (lldb) frame sel 2
> >> frame #2: 0x0000000100074b36 cc1plus`import_export_decl(decl=0x000000014269c750) at decl2.c:2877 [opt]
> >>   2874   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
> >>   2875   /* Any code that creates entities with TREE_PUBLIC cleared should
> >>   2876      also set DECL_INTERFACE_KNOWN.  */
> >> -> 2877   gcc_assert (TREE_PUBLIC (decl));
> >>   2878   if (TREE_CODE (decl) == FUNCTION_DECL)
> >>   2879     gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
> >>   2880                 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
> >> (lldb) call debug_tree(decl)
> >> <var_decl 0x14269c750 value
> >>    type <boolean_type 0x1426aa5e8 bool readonly unsigned type_6 QI
> >>        size <integer_cst 0x142502768 constant 8>
> >>        unit-size <integer_cst 0x142502780 constant 1>
> >>        align:8 warn_if_not_align:0 symtab:150 alias-set -1 canonical-type 0x1426aa5e8 precision:1 min <integer_cst 0x1425029d8 0> max <integer_cst 0x142502a08 1>>
> >>    readonly constant used static tree_1 tree_2 tree_3 unsigned nonlocal in_system_header read decl_1 QI /Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits:59:28 size <integer_cst 0x142502768 8> unit-size <integer_cst 0x142502780 1>
> >>    align:8 warn_if_not_align:0 context <record_type 0x1426a7e70 integral_constant> initial <integer_cst 0x1425029d8 0>
> >>    template-info 0x1426a64e0 chain <function_decl 0x1426a0600 __conv_op >>
> >> (lldb)
> >
> > lldb? eh ... ;)
> >
> > anyhow, this is
> >
> > namespace std
> > {
> >
> > # 56 "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits"
> > 3
> >  template<typename _Tp, _Tp __v>
> >    struct integral_constant
> >    {
> >      static constexpr _Tp value = __v;
> > ^^^
> >
> > which should have TREE_PUBLIC set.  My next step would be to watch how
> > this flag changes (if it does...)
> >
> > break at ggc-page.c:1442 (the return stmt of ggc_internal_alloc)
> > conditional on result == 0x14269c750
> > and then watch *&the-decl->base.public_flag printing said flag when
> > the watchpoint hits
> > (because you're watching the whole integer containing the bitfield bit).
> >
> > If that doesn't go anywhere try reducing the source file using creduce
> > or by other means.
> >
> > Maybe look at reset_decl_linkage () and visibility support in general.
>
> I trimmed the file a bit.
>
> Managed to find where public_flag is cleared.  It is in cp/expr.c maybe_commonize_var, line 5619, here:
>
>           else
>             {
>               /* While for initialized variables, we must use internal
>                  linkage -- which means that multiple copies will not
>                  be merged.  */
>               TREE_PUBLIC (decl) = 0;
>               DECL_COMMON (decl) = 0;
>
> Could it be related to the fact that I have an a.out (rather than ELF) target?

I guess a.out is bitrotten (or too incapable) for C++ here.  I see the
code above emits warnings about this
being unhandled as well, it possibly should simply sorry() when it can
figure out it
will run into the import_export_decl ICE later...

Richard.

>         paul
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2018-10-10  9:52 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-13 18:27 ICE building a libsupc++ file, pdp11 target Paul Koning
2018-07-13 18:52 ` U.Mutlu
2018-07-13 18:56   ` Paul Koning
2018-07-13 19:12     ` U.Mutlu
2018-07-16 21:30       ` Paul Koning
2018-07-17  9:46         ` Richard Biener
2018-07-17 13:08           ` Paul Koning
2018-07-17 13:36             ` Richard Biener
2018-07-17 13:38               ` Richard Biener
2018-07-17 16:27                 ` Paul Koning
2018-07-23 14:30                   ` Joseph Myers
2018-07-23 14:31                     ` Paul Koning
2018-10-09 21:39               ` Paul Koning
2018-10-10  9:52                 ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).