From 878dce1fdf5f52ca8957a1b7fd1f29cb5035f233 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Mon, 17 Jan 2022 12:20:44 +0100 Subject: [PATCH] Workaround for "Internal compiler error" in 32-bit MSVC (19.29.30037) compiler after dc00f0bf983902a6cb81503afa78be4a0ccafb71. --- src/libslic3r/GCode/AvoidCrossingPerimeters.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index 9041b4446..a8a0994f7 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -422,7 +422,7 @@ static Direction get_shortest_direction(const AvoidCrossingPerimeters::Boundary } // Straighten the travel path as long as it does not collide with the contours stored in edge_grid. -static std::vector simplify_travel(const AvoidCrossingPerimeters::Boundary &boundary, const std::vector &travel) +static std::vector simplify_travel(const AvoidCrossingPerimeters::Boundary &boundary, std::vector &travel) { FirstIntersectionVisitor visitor(boundary.grid); std::vector simplified_path; @@ -439,7 +439,15 @@ static std::vector simplify_travel(const AvoidCrossingPerimeters::B visitor.pt_current = ¤t_point; if (!next.do_not_remove) - for (size_t point_idx_2 = point_idx + 1; point_idx_2 < travel.size() && !travel[point_idx_2].do_not_remove; ++point_idx_2) { + for (size_t point_idx_2 = point_idx + 1; point_idx_2 < travel.size(); ++point_idx_2) { + // Workaround for some issue in MSVC 19.29.30037 32-bit compiler. +#if defined(_WIN32) && !defined(_WIN64) + if (bool volatile do_not_remove = travel[point_idx_2].do_not_remove; do_not_remove) + break; +#else + if (travel[point_idx_2].do_not_remove) + break; +#endif if (travel[point_idx_2].point == current_point) { next = travel[point_idx_2]; point_idx = point_idx_2;