merge
diff --git a/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h b/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h
index 302be1c..6af6407 100644
--- a/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h
+++ b/unsupported/Eigen/src/SparseExtra/SimplicialCholesky.h
@@ -295,7 +295,7 @@
   m_parent.resize(size);
   m_nonZerosPerCol.resize(size);
   
-  Index* tags = ei_aligned_stack_new(Index, size);
+  ei_declare_aligned_stack_constructed_variable(Index, tags, size, 0);
   
   // TODO allows to configure the permutation
   {
@@ -338,9 +338,6 @@
     }
   }
   
-  // release workspace
-  ei_aligned_stack_delete(Index, tags, size);
-  
   /* construct Lp index array from m_nonZerosPerCol column counts */
   Index* Lp = m_matrix._outerIndexPtr();
   Lp[0] = 0;
@@ -369,9 +366,9 @@
   Index* Li = m_matrix._innerIndexPtr();
   Scalar* Lx = m_matrix._valuePtr();
 
-  Scalar* y       = ei_aligned_stack_new(Scalar, size);
-  Index* pattern  = ei_aligned_stack_new(Index, size);
-  Index* tags     = ei_aligned_stack_new(Index, size);
+  ei_declare_aligned_stack_constructed_variable(Scalar, y, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  pattern, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  tags, size, 0);
 
   SparseMatrix<Scalar,ColMajor,Index> ap(size,size);
   ap.template selfadjointView<Upper>() = a.template selfadjointView<UpLo>().twistedBy(m_Pinv);
@@ -443,11 +440,6 @@
     }
   }
 
-  // release workspace
-  ei_aligned_stack_delete(Scalar, y, size);
-  ei_aligned_stack_delete(Index, pattern, size);
-  ei_aligned_stack_delete(Index, tags, size);
-  
   m_info = ok ? Success : NumericalIssue;
   m_factorizationIsOk = true;
 }
diff --git a/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h b/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h
index 14a89dc..14283c1 100644
--- a/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h
+++ b/unsupported/Eigen/src/SparseExtra/SparseLDLTLegacy.h
@@ -245,7 +245,8 @@
   m_matrix.resize(size, size);
   m_parent.resize(size);
   m_nonZerosPerCol.resize(size);
-  Index * tags = ei_aligned_stack_new(Index, size);
+
+  ei_declare_aligned_stack_constructed_variable(Index, tags, size, 0);
 
   const Index* Ap = a._outerIndexPtr();
   const Index* Ai = a._innerIndexPtr();
@@ -298,7 +299,6 @@
     Lp[k+1] = Lp[k] + m_nonZerosPerCol[k];
 
   m_matrix.resizeNonZeros(Lp[size]);
-  ei_aligned_stack_delete(Index, tags, size);
 }
 
 template<typename _MatrixType, typename Backend>
@@ -317,9 +317,9 @@
   Scalar* Lx = m_matrix._valuePtr();
   m_diag.resize(size);
 
-  Scalar * y = ei_aligned_stack_new(Scalar, size);
-  Index * pattern = ei_aligned_stack_new(Index, size);
-  Index * tags = ei_aligned_stack_new(Index, size);
+  ei_declare_aligned_stack_constructed_variable(Scalar, y, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  pattern, size, 0);
+  ei_declare_aligned_stack_constructed_variable(Index,  tags, size, 0);
   
   Index* P = 0;
   Index* Pinv = 0;
@@ -383,10 +383,6 @@
     }
   }
 
-  ei_aligned_stack_delete(Scalar, y, size);
-  ei_aligned_stack_delete(Index, pattern, size);
-  ei_aligned_stack_delete(Index, tags, size);
-
   return ok;  /* success, diagonal of D is all nonzero */
 }