[clang] 3203d3e - [clang][Interp][NFC] Add InterpStack::dump()

Timm Bäder via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 20 05:56:59 PDT 2023


Author: Timm Bäder
Date: 2023-07-20T14:56:44+02:00
New Revision: 3203d3eac4d14f44d6e660d8835c10a42a07fee2

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

LOG: [clang][Interp][NFC] Add InterpStack::dump()

Added: 
    

Modified: 
    clang/lib/AST/Interp/InterpStack.cpp
    clang/lib/AST/Interp/InterpStack.h

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/Interp/InterpStack.cpp b/clang/lib/AST/Interp/InterpStack.cpp
index c5d9a459ce8248..5ca530409c8bf9 100644
--- a/clang/lib/AST/Interp/InterpStack.cpp
+++ b/clang/lib/AST/Interp/InterpStack.cpp
@@ -6,9 +6,12 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "InterpStack.h"
+#include "Boolean.h"
+#include "Floating.h"
+#include "Integral.h"
 #include <cassert>
 #include <cstdlib>
-#include "InterpStack.h"
 
 using namespace clang;
 using namespace clang::interp;
@@ -79,3 +82,21 @@ void InterpStack::shrink(size_t Size) {
   Chunk->End -= Size;
   StackSize -= Size;
 }
+
+void InterpStack::dump() const {
+#ifndef NDEBUG
+  llvm::errs() << "Items: " << ItemTypes.size() << ". Size: " << size() << "\n";
+  size_t Index = 0;
+  size_t Offset = align(primSize(ItemTypes[0]));
+  for (PrimType Ty : ItemTypes) {
+    llvm::errs() << Index << "/" << Offset << ": ";
+    TYPE_SWITCH(Ty, {
+      const T &V = peek<T>(Offset);
+      llvm::errs() << V;
+    });
+    llvm::errs() << "\n";
+    Offset += align(primSize(Ty));
+    ++Index;
+  }
+#endif
+}

diff  --git a/clang/lib/AST/Interp/InterpStack.h b/clang/lib/AST/Interp/InterpStack.h
index 14a9b69a557c15..ab4351a6dc679f 100644
--- a/clang/lib/AST/Interp/InterpStack.h
+++ b/clang/lib/AST/Interp/InterpStack.h
@@ -89,6 +89,9 @@ class InterpStack final {
   /// Returns whether the stack is empty.
   bool empty() const { return StackSize == 0; }
 
+  /// dump the stack contents to stderr.
+  void dump() const;
+
 private:
   /// All stack slots are aligned to the native pointer alignment for storage.
   /// The size of an object is rounded up to a pointer alignment multiple.


        


More information about the cfe-commits mailing list