We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
how to know exactly which parameters are enabled/disabled by default for arm-none-eabi-gcc?
I have the doubt thinking about the parameter `-fshort-enum`.
Try to compile this example (main.c):
#include <stdio.h> typedef enum { A, B, C, max_e, } e_t; /* static assert for detect size of e_t @compile time using DIM symbol */ _Static_assert(DIM == sizeof(e_t), "sizeof do not match"); void f(e_t p) { if(p<0 || p>=max_e){ printf("out of range %d\n", p); return; } printf("p %d\n", p); } int main(void) { f(0); f(1); f(5); f(-1); return 0; }
First I used gcc on my ubuntu 18.04 (with '-DDIM=x -std=gnu11 -Wall -Wextra' parameters):
max@resfw04:~/progs/test_enum_signed$ gcc --version gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. max@resfw04:~/progs/test_enum_signed$ gcc -DDIM=1 -std=gnu11 -Wall -Wextra main.c -c -o main.o main.c:12:1: error: static assertion failed: "sizeof do not match" max@resfw04:~/progs/test_enum_signed$ gcc -DDIM=2 -std=gnu11 -Wall -Wextra main.c -c -o main.o main.c:12:1: error: static assertion failed: "sizeof do not match" max@resfw04:~/progs/test_enum_signed$ gcc -DDIM=4 -std=gnu11 -Wall -Wextra main.c -c -o main.o max@resfw04:~/progs/test_enum_signed$
As you can see I have gcc 7.4.0 on my machine, and it seems that the default is '-fno-short-enum', in fact the build fails with DIM other than 4.
The I tried to compile with arm toolchain (same parameters):
max@resfw04:~/progs/test_enum_signed$ arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907] Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. max@resfw04:~/progs/test_enum_signed$ arm-none-eabi-gcc -DDIM=1 -std=gnu11 -Wall -Wextra main.c -c -o main.o main.c: In function 'f': main.c:16:6: warning: comparison is always false due to limited range of data type [-Wtype-limits] if(p<0 || p>=max_e){ ^ max@resfw04:~/progs/test_enum_signed$ arm-none-eabi-gcc -DDIM=2 -std=gnu11 -Wall -Wextra main.c -c -o main.o main.c:12:1: error: static assertion failed: "sizeof do not match" _Static_assert(DIM == sizeof(e_t), "sizeof do not match"); ^~~~~~~~~~~~~~ main.c: In function 'f': main.c:16:6: warning: comparison is always false due to limited range of data type [-Wtype-limits] if(p<0 || p>=max_e){ ^ max@resfw04:~/progs/test_enum_signed$ arm-none-eabi-gcc -DDIM=4 -std=gnu11 -Wall -Wextra main.c -c -o main.o main.c:12:1: error: static assertion failed: "sizeof do not match" _Static_assert(DIM == sizeof(e_t), "sizeof do not match"); ^~~~~~~~~~~~~~ main.c: In function 'f': main.c:16:6: warning: comparison is always false due to limited range of data type [-Wtype-limits] if(p<0 || p>=max_e){ ^ max@resfw04:~/progs/test_enum_signed$
In this case it seems that is enabled '-fshort-enum' by default, in fact the build fails with DIM other than 1, and I have also a warning.
So I must deduce that the default of the two gcc's is different, I guess for other parameters, maybe even many.
Where can I find the default parameters for arm-none-eabi-gcc? Is it a document distributed with the toolchain or online? Or should I look at the sources? And in the latter case exactly where?
best regards
Max