Clang warnings in itemrepository.h: cast from 'char *' to ... increases required alignment

Milian Wolff mail at milianw.de
Sat Aug 3 23:25:19 UTC 2013


Hey all,

I'm nowadays building KDevelop with clang to great success. Highly annoying 
though are warnings like these which get emitted _everywhere_:

/home/milian/projects/compiled/kde4/include/kdevplatform/language/duchain/repositories/itemrepository.h:178:25: 
warning: cast from 'char *' to 'unsigned short *' increases required alignment 
from 1 to 2 [-Wcast-align]
          m_objectMap = (short unsigned int*)current;
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

This comes with ca. 20 additional lines of context information for multiple 
locations in itemrepository.h. Since that is included in many files, we get 
tons of these warnings. If I make a compile error, I actually have to search 
very hard for the error messages now, since they get drowned in all these 
warnings. Bad, that makes me unproductive :(

So, lets do the right thing and fix these issues, right?! But how? Especially 
an issue I see is that we get data from either QFile::map (i.e. uchar*) or 
just read it directly from QIODevice/QFile (i.e. char*).

Afterwards we read all kinds of serialized data there (remember, the speed of 
our serialization is just because we do more or less 1to1 memory dumps!). So 
how can I ever "safely" read something like an int from a char*? It will 
always be a potential alignment increase, right? How can I shut this warning 
up?

Cheers
-- 
Milian Wolff
mail at milianw.de
http://milianw.de


More information about the KDevelop-devel mailing list