delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/03/09/14:04:29

From: kh AT wg DOT icl DOT co DOT uk (Kevin Hughes)
Subject: FW: B19 compiler fail - on debug but not optimised
9 Mar 1998 14:04:29 -0800 :
Message-ID: <01BD4B3C.4D81B8F0.kh.cygnus.gnu-win32@wg.icl.co.uk>
Reply-To: "kh AT wg DOT icl DOT co DOT uk" <kh AT wg DOT icl DOT co DOT uk>
To: "Gnuwin95 (E-mail)" <gnu-win32 AT cygnus DOT com>


-----Original Message-----
From:	Kevin Hughes [SMTP:kh AT wg DOT icl DOT co DOT uk]
Sent:	05 March 1998 16:12
To:	Gnuwin95 (E-mail)
Subject:	B19 compiler fail - on debug but not optimised



We have just moved to b19 and our project failed miserably, it compiled but 
did not run. After much poking about in the
assmbler we discovered an odd switch which ended up jumping to part way 
through an instruction. We recoded this as an if then else sequence and all 
was fine. We then looked more deeply and extracted the failing source. We 
also noted that if we compile with -O3 it all works.

Heres the code

typedef unsigned int uint;
typedef unsigned char uchar;

class AClass {
protected:
   uint  ib;
public:
   AClass( void )           { }
   AClass( uint initib )    { ib = initib; }
   operator uint ()         { return ib; }
   uint  getTop()           { return ib >> (16+9); }
   bool hasPropertyX()      { return true; }
   typedef enum
   {
      XYZunk = 0, XYZ1 = 1, XYZ2 = 2, XYZ4 = 3, XYZopDep = 4,
      XYZstDep = 5, XYZhalf = 6, XYZdble = 7, XYZ4to2 = 8, XYZsame = 9
   } XYZType;
   XYZType getXYZType()
   {
      static uchar XYZ[128] =
      {
            XYZunk,  XYZsame, XYZsame, XYZsame, XYZunk,  XYZunk,  XYZunk, 
 XYZunk,
            XYZsame, XYZ2,    XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, 
XYZunk,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, 
XYZsame,
            XYZsame, XYZopDep,XYZsame, XYZsame, XYZstDep,XYZsame, XYZunk, 
 XYZunk,
            XYZsame, XYZ1,    XYZ2,    XYZ4,    XYZsame, XYZhalf, XYZsame, 
XYZsame,
            XYZsame, XYZsame, XYZ1,    XYZ1,    XYZsame, XYZsame, XYZsame, 
XYZsame,
            XYZsame, XYZ1,    XYZ2,    XYZ4,    XYZ2,    XYZdble, XYZsame, 
XYZsame,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, 
XYZsame,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, 
XYZsame,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, 
XYZsame,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZdble, XYZsame, XYZsame, 
XYZsame,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZ4to2, XYZsame, XYZsame, 
XYZhalf,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, 
XYZsame,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZdble, 
XYZ4to2,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZdble, 
XYZdble,
            XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZsame, XYZdble, 
XYZsame,
      };
      return ( XYZType ) ( XYZ[ this->getTop() ] );
   }

   int getNextXYZ( uint startXYZ )
   {
      switch ( getXYZType() )
      {
      case XYZ1:
         return( 1 );
      case XYZ2:
         return( 2 );
      case XYZ4:
         return( 3 );
      case XYZhalf:
         return( startXYZ - 1 );
      case XYZdble:
         return( startXYZ + 1 );
      case XYZ4to2:
         return( startXYZ == 3 ? 2 : startXYZ );
      case XYZsame:
         return( startXYZ );
      case XYZopDep: // MPSR only!
         if ( hasPropertyX() )
         {
            return( 4 );
         }
         // Drop through!!
      case XYZstDep:
      case XYZunk:
      default:
         return( 0 );
      }
   }
};

main()
{
	AClass x( 0x62000000 );
	printf( "Next XYZ for %.8X = %d\n", x, x.getNextXYZ( 2 ) );
}
////////////////////////////////////////////////////////////////////////  
/////
//
// gives the following behaviour..
//
// aab55>g++ -g -o swbuganon.exe swbuganon.c
// swbuganon.c: In function `int main()':
// swbuganon.c:77: warning: implicit declaration of function `int 
printf(...)'
// aab55>./swbuganon.exe
// (C:\temp\swbuganon.exe 1124) Exception: STATUS_ACCESS_VIOLATION
// (C:\temp\swbuganon.exe 1124) Dumping stack trace to swbuganon.exe.core
// aab55>g++ -g -O3 -o swbuganon.exe swbuganon.c
// swbuganon.c: In function `int main()':
// swbuganon.c:77: warning: implicit declaration of function `int printf  
(...)'
// aab55>./swbuganon.exe
// Next XYZ for 62000000 = 1
// aab55>
//
////////////////////////////////////////////////////////////////////////  
//////

Hope this is usefull to the maintainers.

We will try this on the egcs compiler when it arrives - hope the problem 
has been fixed.


Thanks for any input


Kevin

-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019