[PATCH] D60774: llvm-undname: Tweak arena allocator

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 16 06:52:50 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL358489: llvm-undname: Tweak arena allocator (authored by nico, committed by ).

Changed prior to commit:
  https://reviews.llvm.org/D60774?vs=195368&id=195370#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D60774/new/

https://reviews.llvm.org/D60774

Files:
  llvm/trunk/include/llvm/Demangle/MicrosoftDemangle.h
  llvm/trunk/test/Demangle/ms-nested-scopes.test


Index: llvm/trunk/include/llvm/Demangle/MicrosoftDemangle.h
===================================================================
--- llvm/trunk/include/llvm/Demangle/MicrosoftDemangle.h
+++ llvm/trunk/include/llvm/Demangle/MicrosoftDemangle.h
@@ -55,24 +55,21 @@
     }
   }
 
-  char *allocUnalignedBuffer(size_t Length) {
-    uint8_t *Buf = Head->Buf + Head->Used;
+  char *allocUnalignedBuffer(size_t Size) {
+    assert(Head && Head->Buf);
 
-    Head->Used += Length;
-    if (Head->Used > Head->Capacity) {
-      // It's possible we need a buffer which is larger than our default unit
-      // size, so we need to be careful to add a node with capacity that is at
-      // least as large as what we need.
-      addNode(std::max(AllocUnit, Length));
-      Head->Used = Length;
-      Buf = Head->Buf;
-    }
+    uint8_t *P = Head->Buf + Head->Used;
 
-    return reinterpret_cast<char *>(Buf);
+    Head->Used += Size;
+    if (Head->Used <= Head->Capacity)
+      return reinterpret_cast<char *>(P);
+
+    addNode(std::max(AllocUnit, Size));
+    Head->Used = Size;
+    return reinterpret_cast<char *>(Head->Buf);
   }
 
   template <typename T, typename... Args> T *allocArray(size_t Count) {
-
     size_t Size = Count * sizeof(T);
     assert(Head && Head->Buf);
 
@@ -83,17 +80,16 @@
     size_t Adjustment = AlignedP - P;
 
     Head->Used += Size + Adjustment;
-    if (Head->Used < Head->Capacity)
+    if (Head->Used <= Head->Capacity)
       return new (PP) T[Count]();
 
-    addNode(AllocUnit);
+    addNode(std::max(AllocUnit, Size));
     Head->Used = Size;
     return new (Head->Buf) T[Count]();
   }
 
   template <typename T, typename... Args> T *alloc(Args &&... ConstructorArgs) {
-
-    size_t Size = sizeof(T);
+    constexpr size_t Size = sizeof(T);
     assert(Head && Head->Buf);
 
     size_t P = (size_t)Head->Buf + Head->Used;
@@ -103,9 +99,10 @@
     size_t Adjustment = AlignedP - P;
 
     Head->Used += Size + Adjustment;
-    if (Head->Used < Head->Capacity)
+    if (Head->Used <= Head->Capacity)
       return new (PP) T(std::forward<Args>(ConstructorArgs)...);
 
+    static_assert(Size < AllocUnit, "");
     addNode(AllocUnit);
     Head->Used = Size;
     return new (Head->Buf) T(std::forward<Args>(ConstructorArgs)...);
Index: llvm/trunk/test/Demangle/ms-nested-scopes.test
===================================================================
--- llvm/trunk/test/Demangle/ms-nested-scopes.test
+++ llvm/trunk/test/Demangle/ms-nested-scopes.test
@@ -144,3 +144,6 @@
 
 ?A@?1??B@?$C at H@C at 1310@QEAAHXZ at 4HA
 ; CHECK: int `public: int __cdecl A::B::C::B::C::C<int>::B(void)'::`2'::A
+
+?a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a at a@a@@3HA
+; CHECK: int a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a::a


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60774.195370.patch
Type: text/x-patch
Size: 5217 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190416/72b0e137/attachment.bin>


More information about the llvm-commits mailing list