| Index: src/core/SkTextBlob.cpp | 
| diff --git a/src/core/SkTextBlob.cpp b/src/core/SkTextBlob.cpp | 
| index 68784f48b52c6ac0385c3631b0c6c9035e9adae7..a49ff251016a90768e52b77bf1d5847bc916e096 100644 | 
| --- a/src/core/SkTextBlob.cpp | 
| +++ b/src/core/SkTextBlob.cpp | 
| @@ -157,7 +157,7 @@ public: | 
| + StorageSize(run->glyphCount(), run->positioning())); | 
| } | 
|  | 
| -    void validate(uint8_t* storageTop) const { | 
| +    void validate(const uint8_t* storageTop) const { | 
| SkASSERT(kRunRecordMagic == fMagic); | 
| SkASSERT((uint8_t*)Next(this) <= storageTop); | 
| SkASSERT(glyphBuffer() + fCount <= (uint16_t*)posBuffer()); | 
| @@ -583,21 +583,20 @@ const SkTextBlob* SkTextBlobBuilder::build() { | 
| fStorage.realloc(fStorageUsed); | 
| } | 
|  | 
| +    const SkTextBlob* blob = new (fStorage.detach()) SkTextBlob(fRunCount, fBounds); | 
| +    SkDEBUGCODE(const_cast<SkTextBlob*>(blob)->fStorageSize = fStorageSize;) | 
| + | 
| SkDEBUGCODE( | 
| size_t validateSize = sizeof(SkTextBlob); | 
| -        const SkTextBlob::RunRecord* run = | 
| -            SkTextBlob::RunRecord::First(reinterpret_cast<const SkTextBlob*>(fStorage.get())); | 
| +        const SkTextBlob::RunRecord* run = SkTextBlob::RunRecord::First(blob); | 
| for (int i = 0; i < fRunCount; ++i) { | 
| validateSize += SkTextBlob::RunRecord::StorageSize(run->fCount, run->fPositioning); | 
| -            run->validate(fStorage.get() + fStorageUsed); | 
| +            run->validate(reinterpret_cast<const uint8_t*>(blob) + fStorageUsed); | 
| run = SkTextBlob::RunRecord::Next(run); | 
| } | 
| SkASSERT(validateSize == fStorageUsed); | 
| ) | 
|  | 
| -    const SkTextBlob* blob = new (fStorage.detach()) SkTextBlob(fRunCount, fBounds); | 
| -    SkDEBUGCODE(const_cast<SkTextBlob*>(blob)->fStorageSize = fStorageSize;) | 
| - | 
| fStorageUsed = 0; | 
| fStorageSize = 0; | 
| fRunCount = 0; | 
|  |