nRF5_SDK_16 : NRF_SECTION_DEF() / NRF_SECTION_START_ADDR() : unnecessary ‘&’ in the definition

From "nrf_section.h" (__GNUC__):

#define NRF_SECTION_DEF(section_name, data_type)                \
    extern data_type * CONCAT_2(__start_, section_name);        \
    extern void      * CONCAT_2(__stop_,  section_name)
...
#define NRF_SECTION_START_ADDR(section_name)       &CONCAT_2(__start_, section_name)

Example for the section name "log_const_data":

NRF_SECTION_DEF(log_const_data, nrf_log_module_const_data_t)
//: extern nrf_log_module_const_data_t *__start_log_const_data;

NRF_SECTION_START_ADDR(log_const_data)
//: (nrf_log_module_const_data_t *) &(__start_log_const_data)
// _________________________________^
// "&" is not needed here! ("__start_log_const_data" is a pointer!)

As a result, a warning occurs when compiling "nrf_log_frontend.c" : "nrf_log_module_name_get()" :
 

 ...
   nrf_log_module_const_data_t * p_module_data = NRF_LOG_CONST_SECTION_VARS_GET(module_id);
   return p_module_data->p_module_name;
   //WARNING: array subscript 'nrf_log_module_const_data_t[0]' is partly outside array bounds of 'nrf_log_module_const_data_t[0]' [-Warray-bounds=]
   ...

Workaround:
     

...
   nrf_log_module_const_data_t * p_module_data = __start_log_const_data + module_id;
   return p_module_data->p_module_name;
   ...

Related