Date: Mon, 30 Sep 2002 16:09:49 -0700 (PDT) From: Archie Cobbs <archie@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/43544: Bogus definition of HUGE_VAL in <math.h> Message-ID: <200209302309.g8UN9nWh083274@panther.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 43544
>Category: bin
>Synopsis: Bogus definition of HUGE_VAL in <math.h>
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Sep 30 16:10:05 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Archie Cobbs
>Release: FreeBSD 5.0-CURRENT sparc64
>Organization:
Packet Design
>Environment:
System: FreeBSD panther.freebsd.org 5.0-CURRENT FreeBSD 5.0-CURRENT #7: Tue Sep 17 18:14:25 PDT 2002 peter@panther.freebsd.org:/s/src/sys/sparc64/compile/PANTHER sparc64
>Description:
The defintion of HUGE_VAL in <math.h> looks like this:
extern char __infinity[];
#define HUGE_VAL (*(double *) __infinity)
This causes compiler warnings when using -Wcast-align:
xx.c: In function `main':
xx.c:9: warning: cast increases required alignment of target type
There is an additional problem: there are two versions of "math.h"
in the FreeBSD tree:
src/include/math.h
src/lib/msun/src/math.h
Contrary to what you might think, src/include/math.h is NOT the
one that gets installed into /usr/include during installation.
>How-To-Repeat:
Logon to a sparc or alpha FreeBSD machine. Then do this:
$ cat > xx.c
#include <stdio.h>
#include <math.h>
int
main(int ac, char **av)
{
double x = 0;
printf("%d\n", x == HUGE_VAL);
return (0);
}
^D
$ cc -Wcast-align -o xx xx.c
>Fix:
I tried to fix this with these commits:
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/msun/src/math.h.diff?r1=1.14&r2=1.15
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/i386/gen/infinity.c.diff?r1=1.6&r2=1.7
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/alpha/gen/infinity.c.diff?r1=1.3&r2=1.4
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/ia64/gen/infinity.c.diff?r1=1.2&r2=1.3
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/sparc64/gen/infinity.c.diff?r1=1.3&r2=1.4
but for some completely screwed reason, the libc compilation fails
because of bogus #include paths, and I had to back out my commit.
I have no idea how to fix this... why the heck are there two versions
of math.h??
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209302309.g8UN9nWh083274>
