From 1500914f5b7001017c398af3ecf3f93c34dd1da7 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 18 Sep 2009 11:28:16 +0200 Subject: [PATCH] fix pointer aliasing issue --- share/qtcreator/gdbmacros/gdbmacros.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/share/qtcreator/gdbmacros/gdbmacros.cpp b/share/qtcreator/gdbmacros/gdbmacros.cpp index a1ecaef294..b3a80a5d24 100644 --- a/share/qtcreator/gdbmacros/gdbmacros.cpp +++ b/share/qtcreator/gdbmacros/gdbmacros.cpp @@ -1064,13 +1064,16 @@ static void qDumpInnerValueOrPointer(QDumper &d, #ifndef QT_BOOTSTRAPPED struct ModelIndex { int r; int c; void *p; void *m; }; +static inline void +qDeserializeQModelIndex(const char *input, ModelIndex &mm) +{ + sscanf(input, "%d,%d,%p,%p", &mm.r, &mm.c, &mm.p, &mm.m); +} + static void qDumpQAbstractItem(QDumper &d) { - ModelIndex mm; - mm.r = mm.c = 0; - mm.p = mm.m = 0; - sscanf(d.templateParameters[0], "%d,%d,%p,%p", &mm.r, &mm.c, &mm.p, &mm.m); - const QModelIndex &mi(*reinterpret_cast(&mm)); + QModelIndex mi; + qDeserializeQModelIndex(d.templateParameters[0], *reinterpret_cast(&mi)); const QAbstractItemModel *m = mi.model(); const int rowCount = m->rowCount(mi); if (rowCount < 0) @@ -1080,7 +1083,8 @@ static void qDumpQAbstractItem(QDumper &d) return; d.putItem("type", NS"QAbstractItem"); d.beginItem("addr"); - d.put('$').put(mm.r).put(',').put(mm.c).put(',').put(mm.p).put(',').put(mm.m); + d.put('$').put(mi.row()).put(',').put(mi.column()).put(',') + .put(mi.internalPointer()).put(',').put(mi.model()); d.endItem(); //d.putItem("value", "(").put(rowCount).put(",").put(columnCount).put(")"); d.putItem("value", m->data(mi, Qt::DisplayRole).toString()); -- 2.11.0