Die Compiler-Infrastruktur LLVM ist in Version 11.0 erschienen und unterstützt mit dem Flang-Frontend die in den 50er Jahren hippe Programmiersprache Fortran. Clang verbessert die Fehlerrückmeldungen, bringt neue Warnmeldungen und Compiler-Flags.
Flang ist noch in Arbeit und erstmals bei LLVM 11.0 an Bord. Das LLVM-Frontend unterstützt Fortran 2018, OpenMP 4.5 und OpenAAC 3.0. Flang parst und prüft die Korrektheit für eine Untermenge der Fortran-Sprache. Noch ist das Frontend allerdings nicht in der Lage, Fortran mit LLVM IR in eine Art Zwischensprache zu übersetzen, aus der sich dann funktionierende Binaries erzeugen lassen.
Zu den weiteren erwähnenswerten Veränderungen an LLVM 11.0 gehört der Support für Python 3. Wo es möglich ist, bevorzugt das Buildsystem nun Python 3 über Python 2. Letzteres dient noch als Fallback. Weil aber die Python Software Foundation die Version 2 bereits in Rente geschickt hat, empfehlen auch die LLVM-Macher ihren Nutzern einen baldigen Wechsel auf Python 3.
Neue Warnungen
Auch für die Frontends anderer Sprachen bringt LLVM 11.0 Verbesserungen und Änderungen mit. Clangs AST (Abstract Syntax Tree) repräsentiert nun auch kaputten C++-Code. Das bedeutet, die Fehlermeldungen beim Übersetzen fallen verständlicher und ausführlicher aus. Davon profitieren auch Tools wie “clang-tidy” und “clangd”, die Informationen von AST erhalten.
Eine neue Warngruppe heißt “-Wpointer-to-int-cast” und warnt den Programmierer vor C-artigen Pointer-Umwandlungen in Integer-Typen, die zu klein sind, um alle nötigen Werte zu halten. “-Wuninitialized-const-reference” warnt vor nicht-initialisierten Variablen, die der Entwickler als “const reference”-Argumente einer Funktion übergeben will. Neben Warnungen gibt es auch einige neue Compiler-Flags, darunter “-fstack-clash-protection”, das vor Stack-Clash-Angriffen auf die Architekturen x86, s390x und ppc64 schützt.
Setzt der Entwickler keine “-std=”-Option, verwendet Clang neuerdings nicht mehr “gnu11”, sondern “gnu17”. Außerdem unterstützt das Frontend für C und C++ die GNU-C-Erweiterung “asm inline”. Die tut noch nichts, wird aber geparst. Weitere Details zu den Änderungen an Clang gibt es in den Release Notes. Die allgemeinen Release Notes zu LLVM 11.0 erwähnen zudem die Verbesserungen an den verschiedenen Backends und Targets, darunter RISC-V und Webassembly.



