[clang] cc1c516 - Use realloc for NestedNameSpecifierLocBuilder

Benjamin Kramer via cfe-commits cfe-commits at lists.llvm.org
Sat May 2 08:12:55 PDT 2020


Author: Benjamin Kramer
Date: 2020-05-02T17:12:44+02:00
New Revision: cc1c51655854627c126daf9ead4c701616564bde

URL: https://github.com/llvm/llvm-project/commit/cc1c51655854627c126daf9ead4c701616564bde
DIFF: https://github.com/llvm/llvm-project/commit/cc1c51655854627c126daf9ead4c701616564bde.diff

LOG: Use realloc for NestedNameSpecifierLocBuilder

These allocations are so tiny that the buffer can be grown in-place most
of the time.

Added: 
    

Modified: 
    clang/lib/AST/NestedNameSpecifier.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/NestedNameSpecifier.cpp b/clang/lib/AST/NestedNameSpecifier.cpp
index e28463516a9f..87bf4e122ec8 100644
--- a/clang/lib/AST/NestedNameSpecifier.cpp
+++ b/clang/lib/AST/NestedNameSpecifier.cpp
@@ -464,13 +464,14 @@ static void Append(char *Start, char *End, char *&Buffer, unsigned &BufferSize,
     unsigned NewCapacity = std::max(
         (unsigned)(BufferCapacity ? BufferCapacity * 2 : sizeof(void *) * 2),
         (unsigned)(BufferSize + (End - Start)));
-    char *NewBuffer = static_cast<char *>(llvm::safe_malloc(NewCapacity));
-    if (Buffer) {
-      memcpy(NewBuffer, Buffer, BufferSize);
-      if (BufferCapacity)
-        free(Buffer);
+    if (!BufferCapacity) {
+      char *NewBuffer = static_cast<char *>(llvm::safe_malloc(NewCapacity));
+      if (Buffer)
+        memcpy(NewBuffer, Buffer, BufferSize);
+      Buffer = NewBuffer;
+    } else {
+      Buffer = static_cast<char *>(llvm::safe_realloc(Buffer, NewCapacity));
     }
-    Buffer = NewBuffer;
     BufferCapacity = NewCapacity;
   }
   assert(Buffer && Start && End && End > Start && "Illegal memory buffer copy");


        


More information about the cfe-commits mailing list