[cfe-dev] Cortex-M4F Assembly Code Generation Incorrect for float casting, causing HardFaults
David Chisnall via cfe-dev
cfe-dev at lists.llvm.org
Thu Aug 10 07:36:02 PDT 2017
This seems to be as expected. This pair of lines:
> auto valuePtr = reinterpret_cast<T*> (data);
> auto value = *valuePtr;
Is asserting to the compiler that data is correctly aligned for T, which in your case is a float. Dereferencing this pointer is therefore allowed to assume alignment. If you have an underaligned pointer, then C++ provides the alignas keyword that allows you to specify an under-aligned type. If the VLDR instruction is still generated with an alignas(1) type, then this is a bug, otherwise this is the compiler generating code that does what you instructed it to do.
David
More information about the cfe-dev
mailing list