On Tue, Sep 10, 2019 at 12:48:24PM +0200, Luc Michel wrote: > Including libfdt.h in a C++ project fails during compilation with recent > version of GCC or Clang. > > This simple example: > > extern "C" { > #include <libfdt.h> > } > > int main(void) { return 0; } > > leads to the following errors with GCC 9.1.0: > > /usr/include/libfdt.h: In function ‘void fdt32_st(void*, uint32_t)’: > /usr/include/libfdt.h:139:16: error: invalid conversion from ‘void*’ to ‘uint8_t*’ {aka ‘unsigned char*’} [-fpermissive] > 139 | uint8_t *bp = property; > | ^~~~~~~~ > | | > | void* > /usr/include/libfdt.h: In function ‘void fdt64_st(void*, uint64_t)’: > /usr/include/libfdt.h:163:16: error: invalid conversion from ‘void*’ to ‘uint8_t*’ {aka ‘unsigned char*’} [-fpermissive] > 163 | uint8_t *bp = property; > | ^~~~~~~~ > | | > | void* > > This commit adds an explicit cast to uint8_t* to fix this issue. > > Signed-off-by: Luc Michel <luc.michel@xxxxxxxxxxxxx> Applied, thanks > --- > libfdt/libfdt.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h > index 8037f39..fc4c496 100644 > --- a/libfdt/libfdt.h > +++ b/libfdt/libfdt.h > @@ -136,7 +136,7 @@ static inline uint32_t fdt32_ld(const fdt32_t *p) > > static inline void fdt32_st(void *property, uint32_t value) > { > - uint8_t *bp = property; > + uint8_t *bp = (uint8_t *)property; > > bp[0] = value >> 24; > bp[1] = (value >> 16) & 0xff; > @@ -160,7 +160,7 @@ static inline uint64_t fdt64_ld(const fdt64_t *p) > > static inline void fdt64_st(void *property, uint64_t value) > { > - uint8_t *bp = property; > + uint8_t *bp = (uint8_t *)property; > > bp[0] = value >> 56; > bp[1] = (value >> 48) & 0xff; -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature