From 41582b19110450cf48388dfe0a0a7c8aa989b73e Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Thu, 10 Apr 2014 17:32:51 +0200
Subject: [PATCH] Debugger: Work around mis-reading of integral template types

Clang/LLDB toolchain issue: -1 gets recorded and read
as 'int' with value '0xffffffff'.

Change-Id: I070a83c282bc8a46efa011efb73f32cdbf46398c
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Reviewed-by: hjk <hjk121@nokiamail.com>
---
 share/qtcreator/debugger/lldbbridge.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index b5c737dda76..fcb4a2ada85 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -417,8 +417,16 @@ class Dumper(DumperBase):
         return self.lookupType(inner)
 
     def numericTemplateArgument(self, typeobj, index):
+        # There seems no API to extract the numeric value.
         inner = self.extractTemplateArgument(typeobj.GetName(), index)
-        return int(inner)
+        innerType = typeobj.GetTemplateArgumentType(index)
+        basicType = innerType.GetBasicType()
+        value = toInteger(inner)
+        # Clang writes 'int' and '0xfffffff' into the debug info
+        # LLDB manages to read a value of 0xfffffff...
+        if basicType == lldb.eBasicTypeInt and value >= 0x8000000:
+            value -= 0x100000000
+        return value
 
     def isReferenceType(self, typeobj):
         return typeobj.IsReferenceType()
-- 
GitLab