2017-07-12 5 views
2

Ich mache eine GCC-Kompilierung mit -Wlto-type-mismatch und -Werror Set (für den Rest des Projekts). Ich habe eine externstruct 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.)

Antwort

Verwandte Themen