Ich mache eine GCC-Kompilierung mit -Wlto-type-mismatch
und -Werror
Set (für den Rest des Projekts). Ich habe eine extern
struct
mit einem flexiblen Array, das eine lto-type-mismatch
Warnung/Fehler provoziert.Unterdrücken -Wlto-Typ-Mismatch Warnung für Struktur mit flexiblen Array
Hier ist der Code auf ein Beispiel destilliert unten:
h.h:
typedef struct {
int i;
int ints[];
} struct_t;
A. C:
#include "h.h"
extern struct_t my_struct;
int main() { // just here to avoid optimizing away the decls
return my_struct.ints[0];
}
b.c:
#include "h.h"
struct_t my_struct = {
20,
{
1,
2,
},
};
Kompilieren (mit Arm gcc hier, aber es funktioniert nicht auch mit nativer gcc)
$ arm-none-eabi-gcc -flto -Wlto-type-mismatch -Werror a.c b.c -o foo
a.c:3:17: error: size of 'my_struct' differ from the size of original declaration [-Werror=lto-type-mismatch]
extern struct_t my_struct;
^
b.c:3:10: note: 'my_struct' was previously declared here
struct_t my_struct = {
^
lto1: all warnings being treated as errors
Ich habe versucht, eine oder beide der Erklärungen Einwickeln in
#pragma gcc diagnostic push
#pragma gcc diagnostic ignore "-Wlto-type-mismatch"
<decl>
#pragma gcc diagnostic pop
aber ich kann die Warnung nicht unterdrücken, möglicherweise weil es eine Link-Zeit-Optimierung ist und die #pragma
Zeilen an diesem Punkt schon lange vorbei sind.
Frage
Können vorschlagen, dass Sie eine Möglichkeit, dies an anderer Stelle um die Warnung zu kompilieren zu erhalten und zu bewahren noch? (Oder sollte -Wlto-type-mismatch
sich nicht über die flexible Anordnung beschweren? Wenn ja, kann ich einen Fehlerbericht einreichen.)