Home | History | Annotate | Download | only in ld-cdtest
      1 // main program for Class Foo
      2 
      3 extern "C" {
      4 // Some <assert.h> implementations (e.g. SUNOS 4.1) are broken,
      5 // in that they require <stdio.h>.  But, if gcc/g++ is installed
      6 // correctly, you should get gcc's assert.h.
      7 // If the compile fails, it means the wrong include files are in use!
      8 #include <assert.h>
      9 };
     10 #include "cdtest-foo.h"
     11 
     12 extern "C" void __init_start();
     13 
     14 extern Foo f(void);
     15 extern void g(void);
     16 
     17 /* This function should *not* be called by the environment.  There is
     18    no way in C++ to ``run something after the initializers but before main()''.
     19    The library that depends on this (NIHCL) is broken.  -- John Gilmore
     20    We leave this here to test that future changes to the compiler
     21    do not re-introduce this losing ``feature''.  */
     22 void
     23 __init_start()
     24 {
     25     Foo::init_foo();
     26 }
     27 
     28 static Foo static_foo( "static_foo");
     29 
     30 int main()
     31 {
     32     assert (Foo::nb_foos() == 2);
     33     Foo automatic_foo( "automatic_foo");
     34     Foo bla_foo = f();
     35     assert (Foo::nb_foos() == 4);
     36     g();
     37     assert (Foo::nb_foos() == 4);
     38     // `automatic_foo' and `bla_foo' are destructed here
     39 }
     40 
     41