Describe the problem
Version 3.1.0 of the "esp32" boards platform was recently released:
https://github.com/espressif/arduino-esp32/releases/tag/3.1.0
Although the library compiled without errors for boards from the previous version 3.0.7 of the platform, it fails to compile after updating to version 3.1.0 of the platform.
To reproduce
- Install the latest version of the "esp32" boards platform:
https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html#installing-using-arduino-ide
- Create a sketch with the following content:
#include <ArduinoHttpClient.h>
#include <WiFi.h>
WiFiClient wifi;
HttpClient client = HttpClient(wifi, "192.168.0.3", 42);
void setup() {}
void loop() {}
- Select Tools > Board > esp32 > ESP32 Dev Module from the Arduino IDE menus.
ⓘ This board was chosen arbitrarily for the sake of the demo. The fault also occurs with other boards of the platform.
- Select Sketch > Verify/Compile from the Arduino IDE menus.
🐛 Compilation fails:
C:\Users\per\AppData\Local\Temp\.arduinoIDE-unsaved20241116-15248-zm3y3w.s57w\sketch_dec16a\sketch_dec16a.ino:4:55: error: invalid cast to abstract class type 'HttpClient'
4 | HttpClient client = HttpClient(wifi, "192.168.0.3", 42);
| ^
In file included from c:\Users\per\Documents\Arduino\libraries\ArduinoHttpClient\src/ArduinoHttpClient.h:8,
from C:\Users\per\AppData\Local\Temp\.arduinoIDE-unsaved20241116-15248-zm3y3w.s57w\sketch_dec16a\sketch_dec16a.ino:1:
c:\Users\per\Documents\Arduino\libraries\ArduinoHttpClient\src/HttpClient.h:41:7: note: because the following virtual functions are pure within 'HttpClient':
41 | class HttpClient : public Client
| ^~~~~~~~~~
In file included from C:\Users\per\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Arduino.h:197,
from C:\Users\per\AppData\Local\arduino\sketches\6312FDE06C3278D1531C362779D83BA5\sketch\sketch_dec16a.ino.cpp:1:
C:\Users\per\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Client.h:29:15: note: 'virtual int Client::connect(IPAddress, uint16_t, int32_t)'
29 | virtual int connect(IPAddress ip, uint16_t port, int32_t timeout) = 0;
| ^~~~~~~
C:\Users\per\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Client.h:31:15: note: 'virtual int Client::connect(const char*, uint16_t, int32_t)'
31 | virtual int connect(const char *host, uint16_t port, int32_t timeout) = 0;
| ^~~~~~~
C:\Users\per\AppData\Local\Temp\.arduinoIDE-unsaved20241116-15248-zm3y3w.s57w\sketch_dec16a\sketch_dec16a.ino:4:12: error: cannot declare variable 'client' to be of abstract type 'HttpClient'
4 | HttpClient client = HttpClient(wifi, "192.168.0.3", 42);
| ^~~~~~
Expected behavior
Library compiles with the latest version of the supported boards platforms.
ArduinoHttpClient version
Original report
0.3.1
Last verified with
7b509784ce4dd988b5213b14babec2f8338f6619
Additional context
The regression was introduced by espressif/arduino-esp32@e1673e4
Of course this also breaks the use of libraries which introduce a transitory dependency on the "ArduinoHttpClient" library. For example, the "Arduino_ESP32_OTA" library:
#include <Arduino_ESP32_OTA.h>
void setup() {}
void loop() {}
c:\Users\per\Documents\Arduino\libraries\Arduino_ESP32_OTA\src\Arduino_ESP32_OTA.cpp: In member function 'int Arduino_ESP32_OTA::startDownload(const char*)':
c:\Users\per\Documents\Arduino\libraries\Arduino_ESP32_OTA\src\Arduino_ESP32_OTA.cpp:144:99: error: invalid new-expression of abstract class type 'HttpClient'
144 | _http_client = new HttpClient(*_client, _context->parsed_url.host(), _context->parsed_url.port());
| ^
In file included from c:\Users\per\Documents\Arduino\libraries\ArduinoHttpClient\src/ArduinoHttpClient.h:8,
from c:\Users\per\Documents\Arduino\libraries\Arduino_ESP32_OTA\src\Arduino_ESP32_OTA.h:30,
from c:\Users\per\Documents\Arduino\libraries\Arduino_ESP32_OTA\src\Arduino_ESP32_OTA.cpp:23:
c:\Users\per\Documents\Arduino\libraries\ArduinoHttpClient\src/HttpClient.h:41:7: note: because the following virtual functions are pure within 'HttpClient':
41 | class HttpClient : public Client
| ^~~~~~~~~~
In file included from C:\Users\per\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Arduino.h:197,
from C:\Users\per\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\libraries\Update\src/Update.h:10,
from c:\Users\per\Documents\Arduino\libraries\Arduino_ESP32_OTA\src\Arduino_ESP32_OTA.cpp:22:
C:\Users\per\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Client.h:29:15: note: 'virtual int Client::connect(IPAddress, uint16_t, int32_t)'
29 | virtual int connect(IPAddress ip, uint16_t port, int32_t timeout) = 0;
| ^~~~~~~
C:\Users\per\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.0\cores\esp32/Client.h:31:15: note: 'virtual int Client::connect(const char*, uint16_t, int32_t)'
31 | virtual int connect(const char *host, uint16_t port, int32_t timeout) = 0;
| ^~~~~~~
Describe the problem
Version 3.1.0 of the "esp32" boards platform was recently released:
https://github.com/espressif/arduino-esp32/releases/tag/3.1.0
Although the library compiled without errors for boards from the previous version 3.0.7 of the platform, it fails to compile after updating to version 3.1.0 of the platform.
To reproduce
https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html#installing-using-arduino-ide
ⓘ This board was chosen arbitrarily for the sake of the demo. The fault also occurs with other boards of the platform.
🐛 Compilation fails:
Expected behavior
Library compiles with the latest version of the supported boards platforms.
ArduinoHttpClient version
Original report
0.3.1
Last verified with
7b509784ce4dd988b5213b14babec2f8338f6619
Additional context
The regression was introduced by espressif/arduino-esp32@e1673e4
Of course this also breaks the use of libraries which introduce a transitory dependency on the "ArduinoHttpClient" library. For example, the "Arduino_ESP32_OTA" library: