Fix preshear transformation.
diff --git a/Eigen/src/Geometry/Transform.h b/Eigen/src/Geometry/Transform.h
index 077441d..fd3fc58 100644
--- a/Eigen/src/Geometry/Transform.h
+++ b/Eigen/src/Geometry/Transform.h
@@ -943,7 +943,8 @@
     const Scalar& sx, const Scalar& sy) {
   EIGEN_STATIC_ASSERT(int(Dim) == 2, YOU_MADE_A_PROGRAMMING_MISTAKE)
   EIGEN_STATIC_ASSERT(Mode != int(Isometry), THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS)
-  m_matrix.template block<Dim, HDim>(0, 0) = LinearMatrixType(1, sx, sy, 1) * m_matrix.template block<Dim, HDim>(0, 0);
+  m_matrix.template block<Dim, HDim>(0, 0) =
+      LinearMatrixType({{1, sy}, {sx, 1}}) * m_matrix.template block<Dim, HDim>(0, 0);
   return *this;
 }
 
diff --git a/test/geo_transformations.cpp b/test/geo_transformations.cpp
index 2fddf55..a9eb87e 100644
--- a/test/geo_transformations.cpp
+++ b/test/geo_transformations.cpp
@@ -273,6 +273,12 @@
              .matrix()
              .isIdentity(test_precision<Scalar>()));
 
+  t20.setIdentity();
+  t20.shear(Scalar(2), Scalar(3));
+  Transform2 t23 = t20 * t21;
+  t21.preshear(Scalar(2), Scalar(3));
+  VERIFY_IS_APPROX(t21, t23);
+
   // Transform - new API
   // 3D
   t0.setIdentity();