Fix a problem where summary strings could not use a synthetically generated value...
authorEnrico Granata <egranata@apple.com>
Wed, 22 Oct 2014 20:14:09 +0000 (20:14 +0000)
committerEnrico Granata <egranata@apple.com>
Wed, 22 Oct 2014 20:14:09 +0000 (20:14 +0000)
llvm-svn: 220414

lldb/source/Core/Debugger.cpp
lldb/test/functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py
lldb/test/functionalities/data-formatter/data-formatter-synthval/main.cpp

index cfc7b2c..506afe2 100644 (file)
@@ -1802,6 +1802,7 @@ FormatPromptRecurse
                                             log->Printf("[Debugger::FormatPrompt] ALL RIGHT: unparsed portion = %s, why stopping = %d,"
                                                " final_value_type %d",
                                                first_unparsed, reason_to_stop, final_value_type);
+                                        target = target->GetQualifiedRepresentationIfAvailable(target->GetDynamicValueType(), true).get();
                                     }
                                 }
                                 else
index 1fd0d8b..165a322 100644 (file)
@@ -90,6 +90,11 @@ class DataFormatterSynthValueTestCase(TestBase):
         
         # check that an aptly defined synthetic provider does not affect one-lining
         self.expect("expression struct S { myInt theInt{12}; }; S()", substrs = ['(theInt = 12)'])
+        
+        # check that we can use a synthetic value in a summary
+        self.runCmd("type summary add hasAnInt -s ${var.theInt}")
+        hi = self.frame().FindVariable("hi")
+        self.assertEqual(hi.GetSummary(), "42")
 
 if __name__ == '__main__':
     import atexit
index fef128c..a77d438 100644 (file)
@@ -5,11 +5,18 @@ class myInt {
     int val() { return theValue; }
 };
 
+class hasAnInt {
+    public:
+        myInt theInt;
+        hasAnInt() : theInt(42) {}  
+};
+
 myInt operator + (myInt x, myInt y) { return myInt(x.val() + y.val()); }
 
 int main() {
     myInt x{3};
     myInt y{4};
     myInt z {x+y};
+    hasAnInt hi;
     return z.val(); // break here
 }