From ec4128df29ab903cd0b589dcfacb880a34ab9b92 Mon Sep 17 00:00:00 2001 From: kgv Date: Sat, 24 Oct 2020 21:01:50 +0300 Subject: [PATCH] 0031876: Configuration - Prs3d_Arrow::DrawShaded() crashes in msvc10 win32 Release build Use longer code syntax to workaround compiler bug. --- src/Prs3d/Prs3d_Arrow.cxx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Prs3d/Prs3d_Arrow.cxx b/src/Prs3d/Prs3d_Arrow.cxx index 5294ec340c..9900ff1e89 100644 --- a/src/Prs3d/Prs3d_Arrow.cxx +++ b/src/Prs3d/Prs3d_Arrow.cxx @@ -138,9 +138,18 @@ Handle(Graphic3d_ArrayOfTriangles) Prs3d_Arrow::DrawShaded (const gp_Ax1& return Handle(Graphic3d_ArrayOfTriangles)(); } - Standard_Integer aMaxVertexs = (aNbTrisTube > 0 ? Prs3d_ToolCylinder::VerticesNb (theNbFacettes, 1) : 0) - + (aNbTrisCone > 0 ? Prs3d_ToolDisk ::VerticesNb (theNbFacettes, 1) - + Prs3d_ToolCylinder::VerticesNb (theNbFacettes, 1) : 0); + Standard_Integer aMaxVertexs = 0; + if (aNbTrisTube > 0) + { + aMaxVertexs += Prs3d_ToolCylinder::VerticesNb (theNbFacettes, 1); + } + if (aNbTrisCone > 0) + { + // longer syntax to workaround msvc10 32-bit optimizer bug (#0031876) + aMaxVertexs += Prs3d_ToolDisk::VerticesNb (theNbFacettes, 1); + aMaxVertexs += Prs3d_ToolCylinder::VerticesNb (theNbFacettes, 1); + } + Handle(Graphic3d_ArrayOfTriangles) anArray = new Graphic3d_ArrayOfTriangles (aMaxVertexs, aNbTris * 3, Graphic3d_ArrayFlags_VertexNormal); if (aNbTrisTube != 0) {