diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py
index 373fd8e4ec83c3cd1efa804ce902a863ae590eb5..6521aa1f6dd5fc729f571de9d01055047a8858ad 100644
--- a/share/qtcreator/dumper/dumper.py
+++ b/share/qtcreator/dumper/dumper.py
@@ -1333,16 +1333,19 @@ class Dumper:
 
         value = item.value
         realtype = value.type
-        type = realtype;
+        type = value.type.unqualified()
         format = self.itemFormat(item)
 
-        if type.code == gdb.TYPE_CODE_REF:
+        typedefStrippedType = stripTypedefs(type)
+
+        if typedefStrippedType.code == gdb.TYPE_CODE_REF:
             try:
                 # This throws "RuntimeError: Attempt to dereference a
                 # generic pointer." with MinGW's gcc 4.5 when it "identifies"
                 # a "QWidget &" as "void &".
                 type = type.target()
-                value = value.cast(type)
+                typedefStrippedType = typedefStrippedType.target()
+                value = value.cast(typedefStrippedType)
                 item.value = value
             except RuntimeError:
                 value = item.value
@@ -1372,8 +1375,6 @@ class Dumper:
             except:
                 pass
 
-        typedefStrippedType = stripTypedefs(type)
-
         if typedefStrippedType.code == gdb.TYPE_CODE_INT:
             if self.alienSource and str(type) == "unsigned long long":
                 strlen = value % (1L<<32)
@@ -1404,7 +1405,7 @@ class Dumper:
             self.putNumChild(0)
             return
 
-        if value.type.code == gdb.TYPE_CODE_ARRAY:
+        if typedefStrippedType.code == gdb.TYPE_CODE_ARRAY:
             targettype = realtype.target()
             self.putAddress(value.address)
             self.putType(realtype)
@@ -1603,9 +1604,9 @@ class Dumper:
         #warn("INAME: %s " % item.iname)
         #warn("INAMES: %s " % self.expandedINames)
         #warn("EXPANDED: %s " % (item.iname in self.expandedINames))
-        fields = extractFields(type)
+        fields = extractFields(typedefStrippedType)
 
-        self.putType(type)
+        self.putType(realtype)
         try:
             self.putAddress(item.value.address)
         except:
diff --git a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp
index b31f1627f5bbf9fbedabaca6cacf12989ccf20b0..e013b8512b4cb38bd5f95c8d9ed9669431e51973 100644
--- a/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp
+++ b/tests/manual/gdbdebugger/simple/simple_gdbtest_app.cpp
@@ -2418,14 +2418,6 @@ QString fooxx()
     return "bababa";
 }
 
-int testReference()
-{
-    QString a = "hello";
-    const QString &b = fooxx();
-    const QString c = "world";
-    return a.size() + b.size() + c.size();
-}
-
 
 namespace basic {
 
@@ -2645,6 +2637,30 @@ namespace basic {
         dummyStatement(&i, &d, &s);
     }
 
+    void testReference1()
+    {
+        int a = 43;
+        const int &b = a;
+        typedef int &Ref;
+        const int c = 44;
+        const Ref d = a;
+        // <=== Break here.
+        dummyStatement(&a, &b);
+        dummyStatement(&c, &d);
+    }
+
+    void testReference2()
+    {
+        QString a = "hello";
+        const QString &b = fooxx();
+        typedef QString &Ref;
+        const QString c = "world";
+        const Ref d = a;
+        // <=== Break here.
+        dummyStatement(&a, &b);
+        dummyStatement(&c, &d);
+    }
+
     void testBasic()
     {
         testChar();
@@ -2658,6 +2674,8 @@ namespace basic {
         testStringWithNewline();
         testMemoryView();
         testColoredMemoryView();
+        testReference1();
+        testReference2();
     }
 
 } // namespace basic
@@ -3290,11 +3308,14 @@ namespace bug5799 {
         s2.m1 = 5;
         S4 s4;
         s4.m1 = 5;
-        S1 arr[10];
+        S1 a1[10];
+        typedef S1 Array[10];
+        Array a2;
         // <=== Break here.
         // Expand s2 and s4.
         // Check there is no <unavailable synchronous data>
-        dummyStatement(&s2, &s4, &arr);
+        dummyStatement(&s2, &s4);
+        dummyStatement(&a1, &a2);
     }
 
 } // namespace bug5799
@@ -3406,7 +3427,6 @@ int main(int argc, char *argv[])
     testPeekAndPoke3();
     testFunctionPointer();
     testAnonymous();
-    testReference();
     //testEndlessLoop();
     //testEndlessRecursion();
     testQStack();