From murduth@rmstar.campus.luth.se  Sat Dec 12 15:09:34 1998
Received: from rmstar.campus.luth.se (rmstar.campus.luth.se [130.240.197.32])
          by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id PAA08701
          for <FreeBSD-gnats-submit@freebsd.org>; Sat, 12 Dec 1998 15:09:33 -0800 (PST)
          (envelope-from murduth@rmstar.campus.luth.se)
Received: (from root@localhost)
	by rmstar.campus.luth.se (8.9.1/8.9.1) id AAA06477;
	Sun, 13 Dec 1998 00:09:30 +0100 (CET)
	(envelope-from murduth)
Message-Id: <199812122309.AAA06477@rmstar.campus.luth.se>
Date: Sun, 13 Dec 1998 00:09:30 +0100 (CET)
From: Joakim.Henriksson@ludd.luth.se
Reply-To: murduth@ludd.luth.se
To: FreeBSD-gnats-submit@freebsd.org
Subject: Problem with constant folding in jikes, with patch.
X-Send-Pr-Version: 3.2

>Number:         9061
>Category:       ports
>Synopsis:       Problem with constant folding in jikes, with patch.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-ports
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Dec 12 15:10:00 PST 1998
>Closed-Date:    Tue Dec 15 21:00:43 GMT 1998
>Last-Modified:  Tue Dec 15 13:01:32 PST 1998
>Originator:     Joakim Henriksson
>Release:        FreeBSD 3.0-CURRENT i386
>Organization:
University of Lule
>Environment:

Current.

>Description:

Jikes on certain programs causes SIGFPE since jikes folds constants in a bad way. Folding divisions by zero should not be done or if you want to do it you should use a constant for it not calculate it. Patch also submited to shields@watson.ibm.com .

>How-To-Repeat:

public class foo{
  foo(){
    double a = 1.0/0.0;
  }
}


>Fix:
	

*** double.cpp.orig     Thu Dec  3 16:08:56 1998
--- double.cpp  Sat Dec 12 23:54:12 1998
***************
*** 125,136 ****
  
  IEEEdouble IEEEdouble::operator/ (IEEEdouble op)
  {
!     return IEEEdouble(DoubleValue() / op.DoubleValue());
  }
  
  IEEEdouble& IEEEdouble::operator/= (IEEEdouble op)
  {
!     *this = *this / op;
      return *this;
  }
  
--- 125,142 ----
  
  IEEEdouble IEEEdouble::operator/ (IEEEdouble op)
  {
!     if (op.DoubleValue() == 0.0)
!         return HUGE_VAL;
!     else
!         return IEEEdouble(DoubleValue() / op.DoubleValue());
  }
  
  IEEEdouble& IEEEdouble::operator/= (IEEEdouble op)
  {
!     if (op.DoubleValue() == 0.0)
!         *this = HUGE_VAL;
!     else
!         *this = *this / op;
      return *this;
  }
  

>Release-Note:
>Audit-Trail:

From: Joakim Henriksson <murduth@ludd.luth.se>
To: freebsd-gnats-submit@freebsd.org
Cc:  Subject: Re: ports/9061
Date: Tue, 15 Dec 1998 17:51:04 +0100 (CET)

 A corrected patch, don't use the other one...
 
 
 *** jikesos/jikes/src/double.cpp.orig	Tue Dec 15 12:25:00 1998
 --- jikesos/jikes/src/double.cpp	Tue Dec 15 13:00:54 1998
 ***************
 *** 125,136 ****
   
   IEEEdouble IEEEdouble::operator/ (IEEEdouble op)
   {
 !     return IEEEdouble(DoubleValue() / op.DoubleValue());
   }
   
   IEEEdouble& IEEEdouble::operator/= (IEEEdouble op)
   {
 !     *this = *this / op;
       return *this;
   }
   
 --- 125,156 ----
   
   IEEEdouble IEEEdouble::operator/ (IEEEdouble op)
   {
 !     if (op.DoubleValue() == 0.0)
 !     {
 !         if (DoubleValue() < 0.0)
 !             return NEGATIVE_INFINITY();
 ! 	else if (DoubleValue() == 0.0)
 !             return NaN();
 ! 	else
 !             return POSITIVE_INFINITY();
 !     }
 !     else
 !         return IEEEdouble(DoubleValue() / op.DoubleValue());
   }
   
   IEEEdouble& IEEEdouble::operator/= (IEEEdouble op)
   {
 !     if (op.DoubleValue() == 0.0)
 !     {
 !         if (*this < 0.0)
 !             *this = NEGATIVE_INFINITY();
 ! 	else if (*this == 0.0)
 !             *this = NaN();
 ! 	else
 !             *this = POSITIVE_INFINITY();
 !     }
 !     else
 !         *this = *this / op;
       return *this;
   }
   
 ***************
 *** 240,251 ****
   
   void IEEEdouble::Fmodulus(IEEEdouble a, IEEEdouble b, IEEEdouble& result)
   {
 !      result.DoubleValue() = fmod(a.DoubleValue(), b.DoubleValue());
   }
   
   void IEEEdouble::Divide(IEEEdouble dividend, IEEEdouble divisor, IEEEdouble &quotient)
   {
 !     quotient = dividend.DoubleValue() / divisor.DoubleValue();
       return;
   }
   
 --- 260,284 ----
   
   void IEEEdouble::Fmodulus(IEEEdouble a, IEEEdouble b, IEEEdouble& result)
   {
 !      if (b.DoubleValue() == 0)
 !          result.DoubleValue() = NaN().DoubleValue();
 !      else
 !          result.DoubleValue() = fmod(a.DoubleValue(), b.DoubleValue());
   }
   
   void IEEEdouble::Divide(IEEEdouble dividend, IEEEdouble divisor, IEEEdouble &quotient)
   {
 !     if (divisor.DoubleValue() == 0)
 !     {
 !         if (dividend.DoubleValue() < 0.0)
 ! 	    quotient = NEGATIVE_INFINITY();
 ! 	else if (dividend.DoubleValue() == 0.0)
 ! 	    quotient = NaN();
 ! 	else
 ! 	    quotient = POSITIVE_INFINITY();
 !     }
 !     else
 !         quotient = dividend.DoubleValue() / divisor.DoubleValue();
       return;
   }
   
 ***************
 *** 261,267 ****
   
   void IEEEfloat::Fmodulus(IEEEfloat a, IEEEfloat b, IEEEfloat& result)
   {
 !     result.FloatValue() = (float) fmod((double) a.FloatValue(), (double) b.FloatValue());
   }
   
   void IEEEfloat::String(char * str)
 --- 294,306 ----
   
   void IEEEfloat::Fmodulus(IEEEfloat a, IEEEfloat b, IEEEfloat& result)
   {
 !     if (b.FloatValue() == 0.0)
 !     {
 !         IEEEdouble d;
 !         result.FloatValue() = (float) d.NaN().DoubleValue();
 !     }
 !     else
 !         result.FloatValue() = (float) fmod((double) a.FloatValue(), (double) b.FloatValue());
   }
   
   void IEEEfloat::String(char * str)

From: Joakim Henriksson <murduth@ludd.luth.se>
To: freebsd-bugs@freebsd.org
Cc:  Subject: ports/9061 change-request
Date: Tue, 15 Dec 1998 04:17:00 PST

 This is a multipart MIME message.
 
 --==_Exmh_-9182098430
 Content-Type: text/plain; charset=us-ascii
 
 Could someone either close ports/9061 (about jikes) and mail me, so that i can 
 submit a pr with a better patch, or put the following patch in the pr instead. 
 Since after rewieving the old patch i realized it was very wrong indeed.
 
 
 
 
 --==_Exmh_-9182098430
 Content-Type: application/x-patch ; name="jikes.patch"
 Content-Description: jikes-double.patch
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename="JIKES.PAT"
 
 KioqIGppa2Vzb3MvamlrZXMvc3JjL2RvdWJsZS5jcHAub3JpZwlUdWUgRGVjIDE1IDEyOjI1
 OjAwIDE5OTgKLS0tIGppa2Vzb3MvamlrZXMvc3JjL2RvdWJsZS5jcHAJVHVlIERlYyAxNSAx
 MzowMDo1NCAxOTk4CioqKioqKioqKioqKioqKgoqKiogMTI1LDEzNiAqKioqCiAgCiAgSUVF
 RWRvdWJsZSBJRUVFZG91YmxlOjpvcGVyYXRvci8gKElFRUVkb3VibGUgb3ApCiAgewohICAg
 ICByZXR1cm4gSUVFRWRvdWJsZShEb3VibGVWYWx1ZSgpIC8gb3AuRG91YmxlVmFsdWUoKSk7
 CiAgfQogIAogIElFRUVkb3VibGUmIElFRUVkb3VibGU6Om9wZXJhdG9yLz0gKElFRUVkb3Vi
 bGUgb3ApCiAgewohICAgICAqdGhpcyA9ICp0aGlzIC8gb3A7CiAgICAgIHJldHVybiAqdGhp
 czsKICB9CiAgCi0tLSAxMjUsMTU2IC0tLS0KICAKICBJRUVFZG91YmxlIElFRUVkb3VibGU6
 Om9wZXJhdG9yLyAoSUVFRWRvdWJsZSBvcCkKICB7CiEgICAgIGlmIChvcC5Eb3VibGVWYWx1
 ZSgpID09IDAuMCkKISAgICAgewohICAgICAgICAgaWYgKERvdWJsZVZhbHVlKCkgPCAwLjAp
 CiEgICAgICAgICAgICAgcmV0dXJuIE5FR0FUSVZFX0lORklOSVRZKCk7CiEgCWVsc2UgaWYg
 KERvdWJsZVZhbHVlKCkgPT0gMC4wKQohICAgICAgICAgICAgIHJldHVybiBOYU4oKTsKISAJ
 ZWxzZQohICAgICAgICAgICAgIHJldHVybiBQT1NJVElWRV9JTkZJTklUWSgpOwohICAgICB9
 CiEgICAgIGVsc2UKISAgICAgICAgIHJldHVybiBJRUVFZG91YmxlKERvdWJsZVZhbHVlKCkg
 LyBvcC5Eb3VibGVWYWx1ZSgpKTsKICB9CiAgCiAgSUVFRWRvdWJsZSYgSUVFRWRvdWJsZTo6
 b3BlcmF0b3IvPSAoSUVFRWRvdWJsZSBvcCkKICB7CiEgICAgIGlmIChvcC5Eb3VibGVWYWx1
 ZSgpID09IDAuMCkKISAgICAgewohICAgICAgICAgaWYgKCp0aGlzIDwgMC4wKQohICAgICAg
 ICAgICAgICp0aGlzID0gTkVHQVRJVkVfSU5GSU5JVFkoKTsKISAJZWxzZSBpZiAoKnRoaXMg
 PT0gMC4wKQohICAgICAgICAgICAgICp0aGlzID0gTmFOKCk7CiEgCWVsc2UKISAgICAgICAg
 ICAgICAqdGhpcyA9IFBPU0lUSVZFX0lORklOSVRZKCk7CiEgICAgIH0KISAgICAgZWxzZQoh
 ICAgICAgICAgKnRoaXMgPSAqdGhpcyAvIG9wOwogICAgICByZXR1cm4gKnRoaXM7CiAgfQog
 IAoqKioqKioqKioqKioqKioKKioqIDI0MCwyNTEgKioqKgogIAogIHZvaWQgSUVFRWRvdWJs
 ZTo6Rm1vZHVsdXMoSUVFRWRvdWJsZSBhLCBJRUVFZG91YmxlIGIsIElFRUVkb3VibGUmIHJl
 c3VsdCkKICB7CiEgICAgICByZXN1bHQuRG91YmxlVmFsdWUoKSA9IGZtb2QoYS5Eb3VibGVW
 YWx1ZSgpLCBiLkRvdWJsZVZhbHVlKCkpOwogIH0KICAKICB2b2lkIElFRUVkb3VibGU6OkRp
 dmlkZShJRUVFZG91YmxlIGRpdmlkZW5kLCBJRUVFZG91YmxlIGRpdmlzb3IsIElFRUVkb3Vi
 bGUgJnF1b3RpZW50KQogIHsKISAgICAgcXVvdGllbnQgPSBkaXZpZGVuZC5Eb3VibGVWYWx1
 ZSgpIC8gZGl2aXNvci5Eb3VibGVWYWx1ZSgpOwogICAgICByZXR1cm47CiAgfQogIAotLS0g
 MjYwLDI4NCAtLS0tCiAgCiAgdm9pZCBJRUVFZG91YmxlOjpGbW9kdWx1cyhJRUVFZG91Ymxl
 IGEsIElFRUVkb3VibGUgYiwgSUVFRWRvdWJsZSYgcmVzdWx0KQogIHsKISAgICAgIGlmIChi
 LkRvdWJsZVZhbHVlKCkgPT0gMCkKISAgICAgICAgICByZXN1bHQuRG91YmxlVmFsdWUoKSA9
 IE5hTigpLkRvdWJsZVZhbHVlKCk7CiEgICAgICBlbHNlCiEgICAgICAgICAgcmVzdWx0LkRv
 dWJsZVZhbHVlKCkgPSBmbW9kKGEuRG91YmxlVmFsdWUoKSwgYi5Eb3VibGVWYWx1ZSgpKTsK
 ICB9CiAgCiAgdm9pZCBJRUVFZG91YmxlOjpEaXZpZGUoSUVFRWRvdWJsZSBkaXZpZGVuZCwg
 SUVFRWRvdWJsZSBkaXZpc29yLCBJRUVFZG91YmxlICZxdW90aWVudCkKICB7CiEgICAgIGlm
 IChkaXZpc29yLkRvdWJsZVZhbHVlKCkgPT0gMCkKISAgICAgewohICAgICAgICAgaWYgKGRp
 dmlkZW5kLkRvdWJsZVZhbHVlKCkgPCAwLjApCiEgCSAgICBxdW90aWVudCA9IE5FR0FUSVZF
 X0lORklOSVRZKCk7CiEgCWVsc2UgaWYgKGRpdmlkZW5kLkRvdWJsZVZhbHVlKCkgPT0gMC4w
 KQohIAkgICAgcXVvdGllbnQgPSBOYU4oKTsKISAJZWxzZQohIAkgICAgcXVvdGllbnQgPSBQ
 T1NJVElWRV9JTkZJTklUWSgpOwohICAgICB9CiEgICAgIGVsc2UKISAgICAgICAgIHF1b3Rp
 ZW50ID0gZGl2aWRlbmQuRG91YmxlVmFsdWUoKSAvIGRpdmlzb3IuRG91YmxlVmFsdWUoKTsK
 ICAgICAgcmV0dXJuOwogIH0KICAKKioqKioqKioqKioqKioqCioqKiAyNjEsMjY3ICoqKioK
 ICAKICB2b2lkIElFRUVmbG9hdDo6Rm1vZHVsdXMoSUVFRWZsb2F0IGEsIElFRUVmbG9hdCBi
 LCBJRUVFZmxvYXQmIHJlc3VsdCkKICB7CiEgICAgIHJlc3VsdC5GbG9hdFZhbHVlKCkgPSAo
 ZmxvYXQpIGZtb2QoKGRvdWJsZSkgYS5GbG9hdFZhbHVlKCksIChkb3VibGUpIGIuRmxvYXRW
 YWx1ZSgpKTsKICB9CiAgCiAgdm9pZCBJRUVFZmxvYXQ6OlN0cmluZyhjaGFyICogc3RyKQot
 LS0gMjk0LDMwNiAtLS0tCiAgCiAgdm9pZCBJRUVFZmxvYXQ6OkZtb2R1bHVzKElFRUVmbG9h
 dCBhLCBJRUVFZmxvYXQgYiwgSUVFRWZsb2F0JiByZXN1bHQpCiAgewohICAgICBpZiAoYi5G
 bG9hdFZhbHVlKCkgPT0gMC4wKQohICAgICB7CiEgICAgICAgICBJRUVFZG91YmxlIGQ7CiEg
 ICAgICAgICByZXN1bHQuRmxvYXRWYWx1ZSgpID0gKGZsb2F0KSBkLk5hTigpLkRvdWJsZVZh
 bHVlKCk7CiEgICAgIH0KISAgICAgZWxzZQohICAgICAgICAgcmVzdWx0LkZsb2F0VmFsdWUo
 KSA9IChmbG9hdCkgZm1vZCgoZG91YmxlKSBhLkZsb2F0VmFsdWUoKSwgKGRvdWJsZSkgYi5G
 bG9hdFZhbHVlKCkpOwogIH0KICAKICB2b2lkIElFRUVmbG9hdDo6U3RyaW5nKGNoYXIgKiBz
 dHIpCg==
 
 --==_Exmh_-9182098430
 Content-Type: text/plain; charset=us-ascii
 
 regards/ Joakim
 
 --==_Exmh_-9182098430--
 
 
 
 To Unsubscribe: send mail to majordomo@FreeBSD.org
 with "unsubscribe freebsd-bugs" in the body of the message
State-Changed-From-To: open->closed
State-Changed-By: steve
State-Changed-When: Tue Dec 15 21:00:43 GMT 1998
State-Changed-Why: 
Patch committed, thanks.
>Unformatted:
