Fix a problem where summary strings could not use a synthetically generated value as part of themselves

llvm-svn: 220414
This commit is contained in:
Enrico Granata 2014-10-22 20:14:09 +00:00
parent ea1e86e80d
commit 50bed5e86f
3 changed files with 13 additions and 0 deletions

View File

@ -1802,6 +1802,7 @@ FormatPromptRecurse
log->Printf("[Debugger::FormatPrompt] ALL RIGHT: unparsed portion = %s, why stopping = %d," log->Printf("[Debugger::FormatPrompt] ALL RIGHT: unparsed portion = %s, why stopping = %d,"
" final_value_type %d", " final_value_type %d",
first_unparsed, reason_to_stop, final_value_type); first_unparsed, reason_to_stop, final_value_type);
target = target->GetQualifiedRepresentationIfAvailable(target->GetDynamicValueType(), true).get();
} }
} }
else else

View File

@ -90,6 +90,11 @@ class DataFormatterSynthValueTestCase(TestBase):
# check that an aptly defined synthetic provider does not affect one-lining # check that an aptly defined synthetic provider does not affect one-lining
self.expect("expression struct S { myInt theInt{12}; }; S()", substrs = ['(theInt = 12)']) 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__': if __name__ == '__main__':
import atexit import atexit

View File

@ -5,11 +5,18 @@ class myInt {
int val() { return theValue; } int val() { return theValue; }
}; };
class hasAnInt {
public:
myInt theInt;
hasAnInt() : theInt(42) {}
};
myInt operator + (myInt x, myInt y) { return myInt(x.val() + y.val()); } myInt operator + (myInt x, myInt y) { return myInt(x.val() + y.val()); }
int main() { int main() {
myInt x{3}; myInt x{3};
myInt y{4}; myInt y{4};
myInt z {x+y}; myInt z {x+y};
hasAnInt hi;
return z.val(); // break here return z.val(); // break here
} }