After some quick and easy tweaks, I’m getting this, and as it’s in C files
probably generated by ATS1, I feel to guess I can’t fix, and it suggest
something would have to be tweaked in the C source generator.
\
make -j4 -C src/CBOOT \
CCOMP=compcert GCFLAG=-D_ATS_NGC \
CFLAGS= LDFLAGS= patsopt
make[1]: entrant dans le répertoire «
/home/yannick/Applications/Third_Parties/ATS/ATS2-Postiats-0.1.8/src/CBOOT »
compcert -I. -I./ccomp/runtime -c -o pats_main_dats.o pats_main_dats.c
compcert -I. -I./ccomp/runtime -c -o pats_utils_sats.o
pats_utils_sats.c
compcert -I. -I./ccomp/runtime -c -o pats_location_sats.o
pats_location_sats.c
compcert -I. -I./ccomp/runtime -c -o pats_jsonize_sats.o
pats_jsonize_sats.c
./ccomp/runtime/ats_types.h:68: Warning: empty struct.
./ccomp/runtime/ats_types.h:68: Warning: empty struct.
./ccomp/runtime/ats_types.h:68: Warning: empty struct.
compcert -I. -I./ccomp/runtime -c -o pats_errmsg_sats.o
pats_errmsg_sats.c
./libc/sys/CATS/types.cats:72: Error: illegal comparison between types
dev_t
and dev_t.
Fatal error; compilation aborted.
1 error detected.
make[1]: *** [pats_utils_sats.o] Erreur 2
make[1]: *** Attente des tâches non terminées…
./ccomp/runtime/ats_types.h:68: Warning: empty struct.
./ccomp/runtime/ats_types.h:68: Warning: empty struct.
prelude/CATS/bool.cats:45: Warning:
redefinition of ‘ats_exit_errmsg’ with incompatible type.
libc/sys/CATS/types.cats:72: Error: illegal comparison between types
dev_t
and dev_t.
Fatal error; compilation aborted.
1 error detected.
make[1]: *** [pats_main_dats.o] Erreur 2
make[1]: quittant le répertoire «
/home/yannick/Applications/Third_Parties/ATS/ATS2-Postiats-0.1.8/src/CBOOT »
make: *** [src2_patsopt] Erreur 2
Note the current directory for these messages, seems to be “src/CBOOT”.
The warning “./ccomp/runtime/ats_types.h:68: Warning: empty struct.”, which
appears five times, is about this:
typedef struct{} ats_empty_type ;
OK, that’s just a warning.
The error “./libc/sys/CATS/types.cats:72: Error: illegal comparison between
types dev_t and dev_t.”, which appears two times, is about this:
typedef dev_t ats_dev_type ; // for device IDs
ATSinline()
ats_bool_type
atslib_eq_dev_dev
(dev_t x1, dev_t x2) {
return (x1 == x2 ? ats_true_bool : ats_false_bool) ;
} // end of [atslib_eq_dev_dev]
Line #72 is the one with “return (x1 == x2 ? ats_true_bool :
ats_false_bool) ;”
I’m surprised with this one: is there a case where C99 disallow a
comparison between two value of the same type? (here, dev_t
).