| 524 | return (ti->flags | gcAlways) & gcFlags; |
| 525 | } |
| 526 | virtual void String ( char * & st ) override { |
| 527 | if ( !reportStringHeap ) return; |
| 528 | if ( !st ) return; |
| 529 | if ( context->constStringHeap->isOwnPtr(st) ) return; |
| 530 | bool show = !errorsOnly; |
| 531 | char buf[32]; |
| 532 | uint32_t ulen = uint32_t(strlen(st)) + 1; |
| 533 | uint32_t len = (ulen + 15) & ~15; |
| 534 | if ( context->stringHeap->isOwnPtr(st,len) ) { |
| 535 | if ( context->stringHeap->isValidPtr(st,len) ) { |
| 536 | if ( show ) tp << "\t\tSTRING "; |
| 537 | } else { |
| 538 | tp << "\t\tSTRING FREE!!! "; |
| 539 | show = true; |
| 540 | } |
| 541 | } else { |
| 542 | if ( show ) tp << "\t\tSTRING#!!! "; |
| 543 | } |
| 544 | if ( show ) { |
| 545 | ReportHistory(); |
| 546 | tp << presentStr(buf, st, 32) << ", len=" << ulen << "(" << len << ") at 0x" << HEX << uint64_t(st) << DEC << "\n"; |
| 547 | } |
| 548 | } |
| 549 | void ReportHistory ( void ) { |
| 550 | tp << "\t"; |
| 551 | for (size_t i=0, is=history.size(); i!=is; ++i ) { |
nothing calls this directly
no test coverage detected