summaryrefslogtreecommitdiff
path: root/source/slang/slang-ast-builder.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/slang/slang-ast-builder.h')
-rw-r--r--source/slang/slang-ast-builder.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/source/slang/slang-ast-builder.h b/source/slang/slang-ast-builder.h
index 3023e274d..91fe63c88 100644
--- a/source/slang/slang-ast-builder.h
+++ b/source/slang/slang-ast-builder.h
@@ -155,9 +155,20 @@ public:
/// Create AST types
template <typename T>
- T* create() { return _initAndAdd(new (m_arena.allocate(sizeof(T))) T); }
+ T* create()
+ {
+ auto alloced = m_arena.allocate(sizeof(T));
+ memset(alloced, 0, sizeof(T));
+ return _initAndAdd(new (alloced) T);
+ }
+
template<typename T, typename... TArgs>
- T* create(TArgs... args) { return _initAndAdd(new (m_arena.allocate(sizeof(T))) T(args...)); }
+ T* create(TArgs... args)
+ {
+ auto alloced = m_arena.allocate(sizeof(T));
+ memset(alloced, 0, sizeof(T));
+ return _initAndAdd(new (alloced) T(args...));
+ }
template<typename T, typename ... TArgs>
SLANG_FORCE_INLINE T* getOrCreate(TArgs ... args)