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