Remove Q_PACKED from structures that do not need to be packed

These structures do not need to be packed. With some compilers, Q_PACKED
was defined to be empty, which means that the code was working fine
without packing. Or there were some lingering problems on those
platforms (MSVC) and we're now exposing them in all platforms.

Actually, it shouldn't be a problem anywhere. QCharAttributes, quint24
and QFontEngineQPA::Glyph have only char/uchar members, so they're
packed already (they have alignof == 1). The only platform where that
wasn't true was ARM OABI, which we don't support anymore.

QFontEngineQPA::Header seems to always come from a QByteArray, so it
doesn't neeed to be packed either. However, just to be sure, I'm
inserting a check for alignment.

And QFontEngineQPA::Block isn't used anywhere.

Change-Id: Iacfa25edf336ef2a03aeb6e40ae90937a21661ae
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
This commit is contained in:
Thiago Macieira 2013-09-12 14:32:52 -07:00 committed by The Qt Project
parent be8a76cffe
commit f4ebb06189
5 changed files with 7 additions and 6 deletions

View File

@ -57,7 +57,7 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
struct Q_PACKED QCharAttributes struct QCharAttributes
{ {
uchar graphemeBoundary : 1; uchar graphemeBoundary : 1;
uchar wordBreak : 1; uchar wordBreak : 1;

View File

@ -702,7 +702,7 @@ struct quint24 {
quint24(uint value); quint24(uint value);
operator uint() const; operator uint() const;
uchar data[3]; uchar data[3];
} Q_PACKED; };
inline quint24::quint24(uint value) inline quint24::quint24(uint value)
{ {

View File

@ -169,6 +169,7 @@ const QFontEngineQPA::Glyph *QFontEngineQPA::findGlyph(glyph_t g) const
bool QFontEngineQPA::verifyHeader(const uchar *data, int size) bool QFontEngineQPA::verifyHeader(const uchar *data, int size)
{ {
VERIFY(quintptr(data) % Q_ALIGNOF(Header) == 0);
VERIFY(size >= int(sizeof(Header))); VERIFY(size >= int(sizeof(Header)));
const Header *header = reinterpret_cast<const Header *>(data); const Header *header = reinterpret_cast<const Header *>(data);
if (header->magic[0] != 'Q' if (header->magic[0] != 'Q'

View File

@ -131,7 +131,7 @@ public:
GlyphBlock GlyphBlock
}; };
struct Q_PACKED Header struct Header
{ {
char magic[4]; // 'QPF2' char magic[4]; // 'QPF2'
quint32 lock; // values: 0 = unlocked, 0xffffffff = read-only, otherwise qws client id of locking process quint32 lock; // values: 0 = unlocked, 0xffffffff = read-only, otherwise qws client id of locking process
@ -140,14 +140,14 @@ public:
quint16 dataSize; quint16 dataSize;
}; };
struct Q_PACKED Block struct Block
{ {
quint16 tag; quint16 tag;
quint16 pad; quint16 pad;
quint32 dataSize; quint32 dataSize;
}; };
struct Q_PACKED Glyph struct Glyph
{ {
quint8 width; quint8 width;
quint8 height; quint8 height;

View File

@ -2561,7 +2561,7 @@ public:
} }
uchar data[3]; uchar data[3];
} Q_PACKED; };
void tst_QPainter::drawhelper_blend_color() void tst_QPainter::drawhelper_blend_color()
{ {