There is a way to defeat the GCC string alignments by putting the strings in
a dynamically sized structure if anyone cares. A bonus side effect of this
scheme is that kernel/driver NLS translations would become almost trivial
because all the string texts are collected in one place.
The basic idea looks like this:
#define MSG1 "Message text blah"
#define MSG2 "Message text blah, blah"
#define MSG3 "Message text blah, blah, blah"
#ifndef __GCC_FORMAT_STRING_CHECKS__
static const struct
{
char m1[sizeof(MSG1)+1];
char m2[sizeof(MSG2)+1];
char m3[sizeof(MSG3)+1];
} msg = {
{MSG1},
{MSG2},
{MSG3}
};
#undef MSG1
#undef MSG2
#undef MSG3
#define MSG1 msg.m1
#define MSG2 msg.m2
#define MSG3 msg.m3
#endif