Sent from my iPhone

On Jan 29, 2009, at 6:00 PM, "tydeman at tybor dot com" <gcc-bugzi...@gcc.gnu.org > wrote:

Using gcc 4.3.2-7 on Intel Pentium 4 running Linux Fedora Core 10 and
-std=gnu99

There were some dfp fixes on the trunk relating to fp exceptions so you should try the trunk before reporting any more bugs.



/* DFP TR 24732 == WG14 / N1176, N1312 */
#define __STDC_WANT_DEC_FP__ /* Tell implementation that we want Decimal FP */ #pragma STDC FENV_ACCESS ON /* will be testing FP exception flags */

#include <stdio.h>      /* printf() */
#include <fenv.h>       /* fetestexcept(), FE_* */
#include <float.h>      /* DEC*_MIN, DEC*_MAX */


int main(void){
 _Decimal64 d10;
 int before;
 int after;

 before = feclearexcept( FE_ALL_EXCEPT );
 d10 = 1.0DD;
 d10 /= 3.0DD;
 after = fetestexcept( FE_ALL_EXCEPT );
 if( FE_INEXACT & after ){
   printf("Inexact raised as expected\n");
 }else{
   printf("Inexact wrong; after=%i\n", after);
 }

 before = feclearexcept( FE_ALL_EXCEPT );
 d10 = DEC64_MIN;
 d10 *= d10;
 after = fetestexcept( FE_ALL_EXCEPT );
 if( FE_UNDERFLOW & after ){
   printf("Underflow raised as expected\n");
 }else{
   printf("Underflow wrong; after=%i\n", after);
 }

 before = feclearexcept( FE_ALL_EXCEPT );
 d10 = DEC64_MAX;
 d10 *= d10;
 after = fetestexcept( FE_ALL_EXCEPT );
 if( FE_OVERFLOW & after ){
   printf("Overflow raised as expected\n");
 }else{
   printf("Overflow wrong; after=%i\n", after);
 }

 before = feclearexcept( FE_ALL_EXCEPT );
 d10 = DEC64_MIN;
 d10 /= (d10-d10);
 after = fetestexcept( FE_ALL_EXCEPT );
 if( FE_DIVBYZERO & after ){
   printf("Divbyzero raised as expected\n");
 }else{
   printf("Divbyzero wrong; after=%i\n", after);
 }

 before = feclearexcept( FE_ALL_EXCEPT );
 d10 = 0.0e-15DD;
 d10 /= d10;
 after = fetestexcept( FE_ALL_EXCEPT );
 if( FE_INVALID & after ){
   printf("Invalid raised as expected\n");
 }else{
   printf("Invalid wrong; after=%i\n", after);
 }

 printf("%2i = FE_INEXACT\n", FE_INEXACT);
 printf("%2i = FE_UNDERFLOW\n", FE_UNDERFLOW);
 printf("%2i = FE_OVERFLOW\n", FE_OVERFLOW);
 printf("%2i = FE_DIVBYZERO\n", FE_DIVBYZERO);
 printf("%2i = FE_INVALID\n", FE_INVALID);

 return 0;
}

gets:

Inexact wrong; after=0
Underflow wrong; after=0
Overflow wrong; after=32
Divbyzero wrong; after=0
Invalid wrong; after=0
32 = FE_INEXACT
16 = FE_UNDERFLOW
8 = FE_OVERFLOW
4 = FE_DIVBYZERO
1 = FE_INVALID


--
          Summary: Decimal floating-point exception flags done wrong
          Product: gcc
          Version: 4.3.2
           Status: UNCONFIRMED
         Severity: normal
         Priority: P3
        Component: c
       AssignedTo: unassigned at gcc dot gnu dot org
       ReportedBy: tydeman at tybor dot com
 GCC host triplet: 4.3.2
GCC target triplet: 4.3.2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39036

Reply via email to