Skip to content

Commit 7dd1ecc

Browse files
committed
core: pgmspace: fix warning: dereferencing type-punned pointer
1 parent 8dc41e0 commit 7dd1ecc

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

cores/arduino/deprecated-avr-comp/avr/pgmspace.h

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,23 @@ typedef const void* uint_farptr_t;
100100
#define snprintf_P(s, f, ...) snprintf((s), (f), __VA_ARGS__)
101101
#define vsnprintf_P(o, s, f, a) vsnprintf((o), (s), (f), (a))
102102

103-
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
104-
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
105-
#define pgm_read_dword(addr) (*(const unsigned long *)(addr))
106-
#define pgm_read_float(addr) (*(const float *)(addr))
107-
#define pgm_read_ptr(addr) (*(const void *)(addr))
103+
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
104+
#define pgm_read_word(addr) ({ \
105+
typeof(addr) _addr = (addr); \
106+
*(const unsigned short *)(_addr); \
107+
})
108+
#define pgm_read_dword(addr) ({ \
109+
typeof(addr) _addr = (addr); \
110+
*(const unsigned long *)(_addr); \
111+
})
112+
#define pgm_read_float(addr) ({ \
113+
typeof(addr) _addr = (addr); \
114+
*(const float *)(_addr); \
115+
})
116+
#define pgm_read_ptr(addr) ({ \
117+
typeof(addr) _addr = (addr); \
118+
*(void * const *)(_addr); \
119+
})
108120

109121
#define pgm_read_byte_near(addr) pgm_read_byte(addr)
110122
#define pgm_read_word_near(addr) pgm_read_word(addr)

0 commit comments

Comments
 (0)