Skip to content

Commit 8a02ea6

Browse files
Workaround for strict aliasing warnings with -O2
1 parent 1074e64 commit 8a02ea6

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

teensy3/avr/pgmspace.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,25 @@ typedef uint64_t prog_uint64_t;
7777
#define fprintf_P(fp, ...) fprintf((fp), __VA_ARGS__)
7878

7979
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
80+
#if 0
8081
#define pgm_read_word(addr) (*(const unsigned short *)(addr))
8182
#define pgm_read_dword(addr) (*(const unsigned long *)(addr))
8283
#define pgm_read_float(addr) (*(const float *)(addr))
84+
#else
85+
#define pgm_read_word(addr) ({ \
86+
typeof(addr) _addr = (addr); \
87+
*(const unsigned short *)(_addr); \
88+
})
89+
#define pgm_read_dword(addr) ({ \
90+
typeof(addr) _addr = (addr); \
91+
*(const unsigned long *)(_addr); \
92+
})
93+
#define pgm_read_float(addr) ({ \
94+
typeof(addr) _addr = (addr); \
95+
*(const float *)(_addr); \
96+
})
97+
#endif
98+
8399

84100
#define pgm_read_byte_near(addr) pgm_read_byte(addr)
85101
#define pgm_read_word_near(addr) pgm_read_word(addr)

0 commit comments

Comments
 (0)