Může gcc programu rozpoznat, kdy je povoleno optimalizace odkaz čas (-flto)?

hlasů
1

Mám nějaký kód, který musí mít optimalizaci odkaz čase umožnilo pracovat správně. Musím konstantní zhodnocení exprese:

  extern const char[] PROGMEM constantTable = {1,2,3,4,5};
    :
   char x = constantTable[4];

(PROGMEM je avr-gcc konstrukt, který dává konstantní v odděleném paměťovém úseku, který je následně vložen do flash paměti RAM a nikoli, a při provádění čas bude potřebovat zvláštní péči přístup. Ale ne v době kompilace ...)

Existuje nějaký způsob, že mohu odhalit v době kompilace (nebo okamžiku propojení), které -flto nebyl určen, takže mohu vydat chybové hlášení?

Už jsem porovnání předdefinované symboly s a bez -flto pomocí „-dm -E“ trik, a tam nezdá se, že by případné rozdíly. Jakýkoliv nápad pro jiné triky?

(Měl by __builtin_constant_p () se „hodnocen“ v okamžiku propojení pro -flto? Není to tak gcc 5.4.0 (nejnovější „prodejcem podporován“ avr kompilátorem.))

Položena 08/11/2018 v 00:01
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Jednou z možností je, aby se pokusila otestovat externí globální proměnné za nemožný hodnoty:

// foo.c
const int LTO_in_use = 1;

a

// bar.c
#include <stdio.h>
extern int LTO_in_use;
void LTO_Not_Enabled(void) __attribute__ (( error("") ));

int main() {
    if (LTO_in_use == 99) {
        LTO_Not_Enabled();
    }
}

Jakékoli globální proměnné bude fungovat tak dlouho, jak víte, je chybný. Pokud tak učiníte vytvořit specifc novou proměnnou, to by mělo nikdy skončit odkazované v běhu, takže se dostane GC'ed by LTO stejně.

Odpovězeno 09/11/2018 v 02:51
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more