I studied Option Summary for gfortran
but found no compiler option to detect integer overflow. Then I found the GCC (GNU Compiler Collection) flag option -fsanitize=signed-integer-overflow
here and used it when invoking gfortran
. It works--integer overflow can be detected at run time!
So what does -fsanitize=signed-integer-overflow
do here? Just adding to the machine code generated by gfortran
some machine-level pieces that check integer overflow?
What is the relation between GCC (GNU Compiler Collection) flag options and gfortran compiler options ? What gcc compiler options can I use for gfortran, g++
etc ?
There is the GCC - GNU Compiler Collection. It shares the common backend and middleend and has frontends for different languages. For example frontends for C, C++ and Fortran which are usually invoked by commands
gcc
,g++
andgfortran
.It is actually more complicated, you can call
gcc
on a Fortran source andgfortran
on a C source and it will work almost the same with the exceptions of libraries being linked (there are some other fine points). The appropriate frontend will be called based on the file extension or the language requested.You can look almost all GCC (not just
gcc
) flags for all of the mentioned frontends. There are certain flags which are language specific. Normally you will get a warning likebut the file will compile fine, the option is just ignored and you will get a warning about that. Notice it is a C file and it is compiled by the
gfortran
command just fine.The sanitization options are AFAIK not that language specific and work for multiple languages implemented in GCC, maybe with some exceptions for some obviously language specific checks. Especially
-fsanitize=signed-integer-overflow
which you ask about works perfectly fine for both C and C++. Signed integer overwlow is undefined behaviour in C and C++ and it is not allowed by the Fortran standard (which effectively means the same, Fortran just uses different words).