Front page | perl.perl5.porters |
Postings from January 2014
-std=c89
Thread Next
From:
George Greer
Date:
January 5, 2014 04:09
Subject:
-std=c89
Message ID:
alpine.LFD.2.10.1401042242340.7817@ein.m-l.org
With the persistent problem of gcc/clang being too loose about
declarations after statements (and only caught regularly by the Windows
smoker) I thought I'd add '-std=c89' to the command-line options of my
clang smoker (since it makes no sense under g++).
First problem is that neither clang nor gcc that I have will error on
declarations after statements with '-std=c89'. (See previous email.)
That can be worked around with '-Werror=declaration-after-statement', at
least.
Second problem is that I get a build error:
- - - 8< - - - 8< - - -
In file included from perl.c:33:
./perl.h:750:14: error: conflicting types for 'syscall'
EXTERN_C int syscall(int, ...);
^
/usr/include/unistd.h:1080:17: note: previous declaration is here
extern long int syscall (long int __sysno, ...) __THROW;
^
1 error generated.
make: *** [perlmini.o] Error 1
- - - 8< - - - 8< - - -
According to the 'man' pages, the perl.h prototype is correct. (Ubuntu
libc6-dev version 2.17-0ubuntu5.1)
Probably also problematic, there are Configure differences. The two lines
were:
git clean -dxqf && ./Configure -des -Dusedevel -Dcc=clang -Accflags="-DPERL_POISON -std=c89 -Werror=declaration-after-statement -fsanitize=address" -Aldflags="-fsanitize=address"
vs.
git clean -dxqf && ./Configure -des -Dusedevel -Dcc=clang -Accflags="-DPERL_POISON -Werror=declaration-after-statement -fsanitize=address" -Aldflags="-fsanitize=address"
(+ lines have -std=c89)
- - - 8< - - - 8< - - -
-<sys/file.h> defines the *_OK access constants.
+<unistd.h> defines the *_OK access constants.
...
Checking to see if your libm supports _LIB_VERSION...
-Yes, it does (2)
+No, it does not (probably harmless)
...
sigaction() found.
+try.c:10:22: error: variable has incomplete type 'struct sigaction'
+ struct sigaction act, oact;
+ ^
+try.c:10:12: note: forward declaration of 'struct sigaction'
+ struct sigaction act, oact;
+ ^
+try.c:10:27: error: variable has incomplete type 'struct sigaction'
+ struct sigaction act, oact;
+ ^
+try.c:10:12: note: forward declaration of 'struct sigaction'
+ struct sigaction act, oact;
+ ^
+2 errors generated.
+But you don't seem to have a usable struct sigaction.
<sunmath.h> NOT found.
-Checking to see if you have signbit() available to work on double... Yes.
+Checking to see if you have signbit() available to work on double... Nope.
...
-POSIX sigsetjmp found.
+sigsetjmp not found.
...
Checking Berkeley DB version ...
-Looks OK.
-Checking return type needed for hash for Berkeley DB ...
-Checking return type needed for prefix for Berkeley DB ...
+In file included from try.c:11:
+/usr/include/db.h:1013:2: error: unknown type name 'u_int'
+ u_int port;
+ ^
+/usr/include/db.h:2196:2: error: unknown type name 'u_int'
+ u_int mp_ncache; /* Initial number of cache regions */
+ ^
+/usr/include/db.h:2390:33: error: unknown type name 'u_int'
+ __P((DB_ENV *, const char **, u_int *));
+ ^
+/usr/include/db.h:40:21: note: expanded from macro '__P'
+#define __P(protos) protos
+ ^
+/usr/include/db.h:2395:18: error: unknown type name 'u_int'
+ __P((DB_ENV *, u_int *, DB_REPMGR_SITE **));
+ ^
+/usr/include/db.h:40:21: note: expanded from macro '__P'
+#define __P(protos) protos
+ ^
+/usr/include/db.h:2819:48: error: redefinition of parameter 'u_long'
+int db_env_set_func_yield __P((int (*)(u_long, u_long)));
+ ^
+/usr/include/db.h:40:21: note: expanded from macro '__P'
+#define __P(protos) protos
+ ^
+/usr/include/db.h:2819:40: error: a parameter list without types is only allowed in a function definition
+int db_env_set_func_yield __P((int (*)(u_long, u_long)));
+ ^
+/usr/include/db.h:40:21: note: expanded from macro '__P'
+#define __P(protos) protos
+ ^
+6 errors generated.
+I can't use Berkeley DB with your <db.h>. I'll disable Berkeley DB.
+Removing unusable -ldb from library list
+libs = -lnsl -lgdbm -ldl -lm -lcrypt -lutil -lc -lgdbm_compat
Using our internal random number implementation...
- - - 8< - - - 8< - - -
(without perl poison and address sanitizer doesn't change result)
As such it may not be immediately feasible to use '-std=c89' anyway.
So for now only errors on declarations after statements on my clang
smokers.
--
George Greer
Thread Next