-
Notifications
You must be signed in to change notification settings - Fork 249
Closed
Description
We have the option to automatically download and compile GMP, which is great except that it uses the abomination of autotools. One of the ./configure tests it does compiles this program:
/* The following provokes a segfault in the compiler on powerpc-apple-darwin.
Extracted from tests/mpn/t-iord_u.c. Causes Apple's gcc 3.3 build 1640 and
1666 to segfault with e.g., -O2 -mpowerpc64. */
#if defined (__GNUC__) && ! defined (__cplusplus)
typedef unsigned long long t1;typedef t1*t2;
void g(){}
void h(){}
static __inline__ t1 e(t2 rp,t2 up,int n,t1 v0)
{t1 c,x,r;int i;if(v0){c=1;for(i=1;i<n;i++){x=up[i];r=x+1;rp[i]=r;}}return c;}
void f(){static const struct{t1 n;t1 src[9];t1 want[9];}d[]={{1,{0},{1}},};t1 got[9];int i;
for(i=0;i<1;i++){if(e(got,got,9,d[i].n)==0)h();g(i,d[i].src,d[i].n,got,d[i].want,9);if(d[i].n)h();}}
#else
int dummy;
#endif
int main () { return 0; }
And if it fails it reports that you don't have "a working compiler". The problem is if you have a quite recent version of GCC it defaults to a newer C standard where that program is invalid because they made C a bit less insane:
conftest.c: In function 'f':
conftest.c:12:48: error: too many arguments to function 'g'; expected 0, have 6
12 | for(i=0;i<1;i++){if(e(got,got,9,d[i].n)==0)h();g(i,d[i].src,d[i].n,got,d[i].want,9);if(d[i].n)h();}}
| ^ ~
conftest.c:7:6: note: declared here
7 | void g(){}
| ^
I'm not sure what the best option here is. I guess GMP should fix this but given the latest release is over 2 years old we probably shouldn't hold our breaths. It would be really nice to get rid of GMP!
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels