Im Quartus® II Softwareversion 15.0, Nios® II Code kompiliert mit der Nios2-elf-gcc 4.9 Toolchain. Beim Kompilieren von Code bei -O2 (oder höher) mit nios2-elf-gcc 4.9 Toolchain die Optimierung -fie abteurate-fehlerhafte-Pfade-Dereferenz wird standardmäßig eingeschaltet.
Wie beschrieben in
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options,
-fie abteurate-fehlerhafte-Pfade-Dereferenz
Erkennen Sie Pfade, die fehlerhaftes oder undefiniertes Verhalten durch Dereferenzierung eines Nullzeigers auslösen. Isolieren Sie diese Pfade aus dem Hauptsteuerungsfluss und verwandeln Sie die Anweisung mit fehlerhaftem oder undefiniertem Verhalten in eine Falle. Diese Kennzeichnung ist standardmäßig unter -O2 und höher aktiviert.
Diese Optimierung bedeutet, wenn die Toolchain erkennt, dass der Code versucht, über einen möglichen Nullzeiger zu laden oder zu speichern, wird die Load- oder Store-Anweisung in eine Trap-Anweisung geändert. Dies kann dazu führen, dass Embedded-Programm ohne eine Kompilierungszeit-Warnung abstürzt.
Wenn Ihr Design gültige Daten an Adresse Null enthält, kompilieren Sie Ihren Code mit dem folgenden Switch, um Probleme im Zusammenhang mit Null-Pointer-Dereferenzen zu vermeiden:
-fno-delete-null-pointer-checks