This is an automated email from the ASF dual-hosted git repository.

janc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-nimble.git


The following commit(s) were added to refs/heads/master by this push:
     new 3fde0852 nimble/phy/nrf: Fix build with GCC 11.1
3fde0852 is described below

commit 3fde0852fc00b7984f3cec139d0dca90ad3d5399
Author: Szymon Janc <szymon.j...@codecoup.pl>
AuthorDate: Mon Apr 25 11:17:31 2022 +0200

    nimble/phy/nrf: Fix build with GCC 11.1
    
    Looks like GCC 11.1 doesn't like current code. The looks OK though...
    
    Error: repos/apache-mynewt-nimble/nimble/drivers/nrf52/src/ble_hw.c: In
        function 'ble_hw_get_static_addr':
    repos/apache-mynewt-nimble/nimble/drivers/nrf52/src/ble_hw.c:118:9: error:
        'memcpy' offset [0, 3] is out of the bounds [0, 0] 
[-Werror=array-bounds]
      118 |         memcpy(addr->val, (void *)&NRF_FICR->DEVICEADDR[0], 4);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    repos/apache-mynewt-nimble/nimble/drivers/nrf52/src/ble_hw.c:119:9: error:
       'memcpy' offset [0, 1] is out of the bounds [0, 0] [-Werror=array-bounds]
      119 |         memcpy(&addr->val[4], (void *)&NRF_FICR->DEVICEADDR[1], 2);
---
 nimble/drivers/nrf51/src/ble_hw.c   | 10 ++++++++--
 nimble/drivers/nrf52/src/ble_hw.c   | 10 ++++++++--
 nimble/drivers/nrf5340/src/ble_hw.c | 10 ++++++++--
 3 files changed, 24 insertions(+), 6 deletions(-)

diff --git a/nimble/drivers/nrf51/src/ble_hw.c 
b/nimble/drivers/nrf51/src/ble_hw.c
index 437efd4f..fb6e844b 100644
--- a/nimble/drivers/nrf51/src/ble_hw.c
+++ b/nimble/drivers/nrf51/src/ble_hw.c
@@ -88,11 +88,17 @@ ble_hw_get_public_addr(ble_addr_t *addr)
 int
 ble_hw_get_static_addr(ble_addr_t *addr)
 {
+    uint32_t addr_high;
+    uint32_t addr_low;
     int rc;
 
     if ((NRF_FICR->DEVICEADDRTYPE & 1) == 1) {
-        memcpy(addr->val, (void *)&NRF_FICR->DEVICEADDR[0], 4);
-        memcpy(&addr->val[4], (void *)&NRF_FICR->DEVICEADDR[1], 2);
+        addr_low = NRF_FICR->DEVICEADDR[0];
+        addr_high = NRF_FICR->DEVICEADDR[1];
+
+        memcpy(addr->val, &addr_low, 4);
+        memcpy(&addr->val[4], &addr_high, 2);
+
         addr->val[5] |= 0xc0;
         addr->type = BLE_ADDR_RANDOM;
         rc = 0;
diff --git a/nimble/drivers/nrf52/src/ble_hw.c 
b/nimble/drivers/nrf52/src/ble_hw.c
index ef4c28b0..0accbbf4 100644
--- a/nimble/drivers/nrf52/src/ble_hw.c
+++ b/nimble/drivers/nrf52/src/ble_hw.c
@@ -112,11 +112,17 @@ ble_hw_get_public_addr(ble_addr_t *addr)
 int
 ble_hw_get_static_addr(ble_addr_t *addr)
 {
+    uint32_t addr_high;
+    uint32_t addr_low;
     int rc;
 
     if ((NRF_FICR->DEVICEADDRTYPE & 1) == 1) {
-        memcpy(addr->val, (void *)&NRF_FICR->DEVICEADDR[0], 4);
-        memcpy(&addr->val[4], (void *)&NRF_FICR->DEVICEADDR[1], 2);
+        addr_low = NRF_FICR->DEVICEADDR[0];
+        addr_high = NRF_FICR->DEVICEADDR[1];
+
+        memcpy(addr->val, &addr_low, 4);
+        memcpy(&addr->val[4], &addr_high, 2);
+
         addr->val[5] |= 0xc0;
         addr->type = BLE_ADDR_RANDOM;
         rc = 0;
diff --git a/nimble/drivers/nrf5340/src/ble_hw.c 
b/nimble/drivers/nrf5340/src/ble_hw.c
index 92bf0249..e578fd05 100644
--- a/nimble/drivers/nrf5340/src/ble_hw.c
+++ b/nimble/drivers/nrf5340/src/ble_hw.c
@@ -83,11 +83,17 @@ ble_hw_get_public_addr(ble_addr_t *addr)
 int
 ble_hw_get_static_addr(ble_addr_t *addr)
 {
+    uint32_t addr_high;
+    uint32_t addr_low;
     int rc;
 
     if ((NRF_FICR_NS->DEVICEADDRTYPE & 1) == 1) {
-        memcpy(addr->val, (void *)&NRF_FICR_NS->DEVICEADDR[0], 4);
-        memcpy(&addr->val[4], (void *)&NRF_FICR_NS->DEVICEADDR[1], 2);
+        addr_low = NRF_FICR_NS->DEVICEADDR[0];
+        addr_high = NRF_FICR_NS->DEVICEADDR[1];
+
+        memcpy(addr->val, &addr_low, 4);
+        memcpy(&addr->val[4], &addr_high, 2);
+
         addr->val[5] |= 0xc0;
         addr->type = BLE_ADDR_RANDOM;
         rc = 0;

Reply via email to