https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121809
Bug ID: 121809
Summary: cast is ignored
Product: gcc
Version: 15.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: tydeman at tybor dot com
Target Milestone: ---
This fails:
#include <assert.h>
#include <limits.h>
#include <errno.h>
#include <stdio.h>
#include <float.h>
#include <fenv.h>
#include <math.h>
int main(void){
if(1){
#define MAC (float)(FLT_MAX*FLT_MAX) /* infinity */
#define mynan(x) ((x) != (x))
if( mynan( NAN ) ){
assert( 1 && "true1 path is good" ); /* ok here */
}else{
assert( 0 && "false1 path is bad" );
}
if( mynan( MAC - MAC ) ){
assert( 1 && "true2 path is good" );
}else{
assert( 0 && "false2 path is bad" ); /* fails here */
}
}
return 0;
}
It appears that the cast to (float) is ignored (so MAC is not INFINITY)
or the MAC - MAC is "optimized" to 0 (instead of being a NAN).