stickbreaker / arduino-esp32

Arduino core for the ESP32
38 stars 23 forks source link

Compiling on Arduino IDE 1.8.5 with maximum compiler warnings causes compilation to fail #32

Closed PicoEmma closed 6 years ago

PicoEmma commented 6 years ago

Compiling on Arduino IDE 1.8.5 with maximum compiler warnings causes compilation to fail. (warnings treated as errors).

example console output:

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'int8_t EEPROMClass::readChar(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:188:46: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

   return EEPROMClass::readAll (address, value);

                                              ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'uint8_t EEPROMClass::readUChar(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:194:46: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

   return EEPROMClass::readAll (address, value);

                                              ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'int16_t EEPROMClass::readShort(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:199:11: note: 'value' was declared here

   int16_t value;

           ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'uint16_t EEPROMClass::readUShort(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:205:12: note: 'value' was declared here

   uint16_t value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'int32_t EEPROMClass::readLong(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:223:11: note: 'value' was declared here

   int32_t value;

           ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'uint32_t EEPROMClass::readULong(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:229:12: note: 'value' was declared here

   uint32_t value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'int64_t EEPROMClass::readLong64(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:235:11: note: 'value' was declared here

   int64_t value;

           ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'uint64_t EEPROMClass::readULong64(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:241:12: note: 'value' was declared here

   uint64_t value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'float_t EEPROMClass::readFloat(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:247:11: note: 'value' was declared here

   float_t value;

           ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'double_t EEPROMClass::readDouble(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:317:12: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

     return value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:253:12: note: 'value' was declared here

   double_t value;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: In member function 'bool EEPROMClass::readBool(int)':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:260:54: error: 'value' may be used uninitialized in this function [-Werror=maybe-uninitialized]

   return EEPROMClass::readAll (address, value) ? 1 : 0;

                                                      ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp: At global scope:

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\libraries\EEPROM\EEPROM.cpp:32:20: warning: 'TAG' defined but not used [-Wunused-variable]

 static const char* TAG = "eeprom";

                    ^

cc1plus.exe: some warnings being treated as errors
stickbreaker commented 6 years ago

@PicoEmma you'll want to post this issue on espressif/arduino. I am only using this fork to improve i2c communications. There are only five files that I am modifiying:

../libraries/Wire/Wire.h ../libraries/Wire/Wire.cpp ../cores/esp32/esp32-hal-i2c.h ../cores/esp32/esp32-hal-i2c.c ../cores/esp32/esp32-hal-log.h

All of the errors you posted refer to:

../libraries/EEPROM/EEPROM.cpp

So, any changes would be lost when my fork is merged back into espressif/arduino.

Chuck.

PicoEmma commented 6 years ago

My apologies. I will bring EEPROM up with them.

After fixing the EEPROM issues the compiler errors out in the i2c file ../cores/esp32/esp32-hal-i2c.c

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:75:5: warning: missing initializer for field 'exitCode' of 'i2c_t {aka struct i2c_struct_t}' [-Wmissing-field-initializers]

     {(volatile i2c_dev_t *)(DR_REG_I2C_EXT_BASE_FIXED), NULL, 0,I2C_NONE,I2C_NONE,I2C_ERROR_OK,NULL,NULL,NULL,0,0,0},

     ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:51:14: note: 'exitCode' declared here

     uint32_t exitCode;

              ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:76:5: warning: missing initializer for field 'exitCode' of 'i2c_t {aka struct i2c_struct_t}' [-Wmissing-field-initializers]

     {(volatile i2c_dev_t *)(DR_REG_I2C1_EXT_BASE_FIXED), NULL, 1,I2C_NONE,I2C_NONE,I2C_ERROR_OK,NULL,NULL,NULL,0,0,0}

     ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:51:14: note: 'exitCode' declared here

     uint32_t exitCode;

              ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c: In function 'dumpCmdQueue':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:399:17: warning: variable 'c' set but not used [-Wunused-but-set-variable]

   I2C_COMMAND_t c;

                 ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c: In function 'i2c_isr_handler_default':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:836:12: warning: unused variable 'oldInt' [-Wunused-variable]

   uint32_t oldInt =activeInt;

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:813:38: warning: unused variable 'xResult' [-Wunused-variable]

 portBASE_TYPE HPTaskAwoken = pdFALSE,xResult; 

                                      ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:813:15: warning: unused variable 'HPTaskAwoken' [-Wunused-variable]

 portBASE_TYPE HPTaskAwoken = pdFALSE,xResult; 

               ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c: In function 'i2cProcQueue':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:997:12: warning: unused variable 'ret' [-Wunused-variable]

   uint32_t ret=xEventGroupClearBits(i2c->i2c_event, 0xFF);

            ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:1111:14: warning: unused variable 'tAfter' [-Wunused-variable]

 portTickType tAfter=xTaskGetTickCount();

              ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:1101:14: warning: unused variable 'tBefore' [-Wunused-variable]

 portTickType tBefore=xTaskGetTickCount();  

              ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c: In function 'i2cReleaseISR':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:1223:13: warning: unused variable 'error' [-Wunused-variable]

   esp_err_t error =esp_intr_free(i2c->intr_handle);

             ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c: In function 'i2cProcQueue':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:1088:5: error: 'ret' may be used uninitialized in this function [-Werror=maybe-uninitialized]

   if(ret!=ESP_OK){

     ^

cc1.exe: some warnings being treated as errors

After initializing ret to 0 everything compiles just fine with warnings but no errors

stickbreaker commented 6 years ago

@PicoEmma Don't apologize for my mistakes. I fixed most of those errors, but, three still exist. I initialize a variable but only use it in a print statement, the compiler complains even though I am using the value:

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c: In function 'dumpCmdQueue':

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:399:17: warning: variable 'c' set but not used [-Wunused-but-set-variable]

   I2C_COMMAND_t c;

                 ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:1111:14: warning: unused variable 'tAfter' [-Wunused-variable]

 portTickType tAfter=xTaskGetTickCount();

              ^

C:\Users\e\Documents\Arduino\hardware\espressif\esp32\cores\esp32\esp32-hal-i2c.c:1101:14: warning: unused variable 'tBefore' [-Wunused-variable]

 portTickType tBefore=xTaskGetTickCount();  

              ^

Do you know how to work around these warnings?

Chuck.

PicoEmma commented 6 years ago

For that first one I see that there is a possibility that the print statement does not get mapped to a method:

#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_ERROR
#define log_e(format, ...) log_printf(ARDUHAL_LOG_FORMAT(E, format), ##__VA_ARGS__)
#else
#define log_e(format, ...)  // no mapping
#endif

I'm not sure I have the same files and branch as you have so I don't trust what I'm getting in compilation. But I believe that ensuring that all code paths use the variable will fix the "not used" warning? If you know it isn't going to print in all cases and that is desirable behavior you can probably just ignore the warning