This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Move g++ test



g++.old-deja/g++.ext/initp1.C really belongs in g++.dg/special where
the framework will detect whether or not constructor priorities are
supported and automatically xfail the test if they do not.

I've tested and verified the right thing happens for this test on a
system without constructor priorities (hpux) and with constructor
priorities (ia32-linux).

Installed on the branch and mainline sources.

        * g++.dg/special/initp1.C: Moved here from g++.old-deja/g++.ext.
        Tweak slightly to work with g++.dg framework.
        * g++.dg/special/ecos.exp: Run initp1.C test.
        * g++.old-deja/g++.ext/initp1.C: Moved to g++.dg/special.

Index: g++.dg/special/ecos.exp
===================================================================
RCS file: /cvs/gcc/egcs/gcc/testsuite/g++.dg/special/ecos.exp,v
retrieving revision 1.5
diff -c -3 -p -r1.5 ecos.exp
*** ecos.exp	2001/03/28 21:10:51	1.5
--- ecos.exp	2001/04/26 20:03:51
*************** if [string match "*init_priority*" $line
*** 84,88 ****
--- 84,105 ----
  }
  dg-finish
  
+ ###########
+ # initp1.C
+ ###########
+ 
+ dg-init
+ set lines [g++_target_compile "$srcdir/$subdir/initp1.C" "$objdir/a.out" 
executable ""]
+ if [string match "*init_priority*" $lines] then {
+     xfail "initp1.C"
+     file delete $objdir/a.out
+ } elseif ![string match "" $lines] then {
+     fail "initp1.C"
+ } else {
+     dg-runtest "$srcdir/$subdir/conpr-1.C" "" "" 
+     file delete $objdir/a.out
+ }
+ dg-finish
+ 
  
  ### EOF ecos.exp
*** /dev/null	Thu Apr 26 13:50:20 2001
--- g++.dg/special/initp1.C	Thu Apr 26 13:52:31 2001
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do run } */
+ #include <stdlib.h>
+ 
+ class Two {
+ private:
+     int i, j, k;
+ public:
+     static int count;
+     Two( int ii, int jj ) { i = ii; j = jj; k = count++; };
+     Two( void )           { i =  0; j =  0; k = count++; };
+     int eye( void ) { return i; };
+     int jay( void ) { return j; };
+     int kay( void ) { return k; };
+ };
+ 
+ extern Two foo;
+ extern Two goo;
+ extern Two coo[];
+ extern Two koo[];
+ 
+ Two foo( 5, 6 ) __attribute__((init_priority(1005)));
+ 
+ Two goo __attribute__((init_priority(1007))) = Two( 7, 8 );
+ 
+ Two doo[ 3 ];
+ 
+ Two hoo[ 3 ] = {
+     Two( 11, 12 ),
+     Two( 13, 14 ),
+     Two( 15, 16 )
+ };
+ 
+ Two coo[ 3 ] __attribute__((init_priority(1000)));
+ 
+ Two koo[ 3 ] __attribute__((init_priority(1000))) = {
+     Two( 21, 22 ),
+     Two( 23, 24 ),
+     Two( 25, 26 )
+ };
+ 
+ Two xoo[ 3 ] __attribute__((init_priority(1100)));
+ 
+ Two zoo[ 3 ] __attribute__((init_priority(1100))) = {
+     Two( 31, 32 ),
+     Two( 33, 34 ),
+     Two( 35, 36 )
+ };
+ 
+ int Two::count;
+ 
+ int x = 0;
+ 
+ #define X( n ) \
+   do { if ( x & (1 << (n)) ) return 1; else x |= (1 << (n)); } while (0)
+ 
+ int main()
+ {
+ 
+     X( coo[0].kay() );
+     X( coo[1].kay() );
+     X( coo[2].kay() );
+     X( koo[0].kay() );
+     X( koo[1].kay() );
+     X( koo[2].kay() );
+     if ( 0x3f != x ) abort ();
+ 
+     X( foo.kay() );
+     if ( 0x7f != x ) abort ();
+ 
+     X( goo.kay() );
+     if ( 0xff != x ) abort ();
+ 
+     X( xoo[0].kay() );
+     X( xoo[1].kay() );
+     X( xoo[2].kay() );
+     X( zoo[0].kay() );
+     X( zoo[1].kay() );
+     X( zoo[2].kay() );
+     if ( 0x3fff != x ) abort ();
+ 
+     X( doo[0].kay() );
+     X( doo[1].kay() );
+     X( doo[2].kay() );
+     X( hoo[0].kay() );
+     X( hoo[1].kay() );
+     X( hoo[2].kay() );
+     if ( 0xfffff != x ) abort ();
+ 
+     exit (0);
+ }





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]