Skip to content

cs::cartesian>::m_values[0]’ may be used uninitialized #1436

@jschueller

Description

@jschueller

since boost 1.89 the following source

#include <boost/geometry/algorithms/intersection.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>

#include <deque>

typedef boost::geometry::model::d2::point_xy<double> point_t;
typedef boost::geometry::model::polygon<point_t, false> polygon_t;

int main()
{
  polygon_t tri1, tri2;
  std::deque<polygon_t> output;
  boost::geometry::intersection(tri1, tri2, output);
  return 0;
}

raises a -Wmaybe-uninitialized warning with -O3 -DNDEBUG (archlinux, gcc 15.2.1, boost 1.89.0):

Step 5/5 : RUN cd /tmp && g++ -Wall -Werror -O3 -DNDEBUG main4.cxx
 ---> Running in 510ed788c17f
In file included from /usr/include/boost/geometry/formulas/andoyer_inverse.hpp:21,
                 from /usr/include/boost/geometry/strategies/geographic/parameters.hpp:16,
                 from /usr/include/boost/geometry/strategies/detail.hpp:15,
                 from /usr/include/boost/geometry/algorithms/detail/equals/point_point.hpp:27,
                 from /usr/include/boost/geometry/algorithms/detail/point_on_border.hpp:30,
                 from /usr/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp:29,
                 from /usr/include/boost/geometry/algorithms/detail/intersection/interface.hpp:18,
                 from /usr/include/boost/geometry/algorithms/intersection.hpp:18,
                 from main4.cxx:1:
In static member function ‘static T boost::geometry::math::detail::abs<T, true>::apply(const T&) [with T = double]’,
    inlined from ‘boost::geometry::math::detail::equals_factor_policy<T, IsFloatingPoint>::equals_factor_policy(const T&, const T&, const T&, const T&) [with T = double; bool IsFloatingPoint = true]’ at /usr/include/boost/geometry/util/math.hpp:133:40,
    inlined from ‘bool boost::geometry::detail::overlay::approximately_equals(const Point1&, const Point2&, const E&) [with Point1 = boost::geometry::model::d2::point_xy<double>; Point2 = boost::geometry::model::d2::point_xy<double>; E = double]’ at /usr/include/boost/geometry/algorithms/detail/overlay/approximately_equals.hpp:61:48,
    inlined from ‘boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::point_type boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::walk_to_point_after_turn(const Operation&, const point_type&) const [with Operation = boost::geometry::detail::overlay::traversal_turn_operation<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >; bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’ at /usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:81:38,
    inlined from ‘boost::geometry::detail::overlay::turn_operation_id boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::select_by_side(edges_type&, const point_type&, const point_type&) const [with bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’ at /usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:153:50,
    inlined from ‘boost::geometry::detail::overlay::turn_operation_id boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::select_target_edge(const boost::geometry::detail::overlay::set_of_tois&, const point_type&, const point_type&) const [with bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’ at /usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:299:30:
/usr/include/boost/geometry/util/math.hpp:107:26: error: ‘point.boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>::<unnamed>.boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>::m_values[1]’ may be used uninitialized [-Werror=maybe-uninitialized]
  107 |         return fabs(value);
      |                          ^
In file included from /usr/include/boost/geometry/algorithms/detail/overlay/graph/traverse_graph.hpp:19,
                 from /usr/include/boost/geometry/algorithms/detail/overlay/traverse.hpp:22,
                 from /usr/include/boost/geometry/algorithms/detail/overlay/overlay.hpp:37,
                 from /usr/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp:34:
/usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp: In member function ‘boost::geometry::detail::overlay::turn_operation_id boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::select_target_edge(const boost::geometry::detail::overlay::set_of_tois&, const point_type&, const point_type&) const [with bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’:
/usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:75:20: note: ‘point.boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>::<unnamed>.boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>::m_values[1]’ was declared here
   75 |         point_type point;
      |                    ^~~~~
In static member function ‘static T boost::geometry::math::detail::abs<T, true>::apply(const T&) [with T = double]’,
    inlined from ‘boost::geometry::math::detail::equals_factor_policy<T, IsFloatingPoint>::equals_factor_policy(const T&, const T&, const T&, const T&) [with T = double; bool IsFloatingPoint = true]’ at /usr/include/boost/geometry/util/math.hpp:132:40,
    inlined from ‘bool boost::geometry::detail::overlay::approximately_equals(const Point1&, const Point2&, const E&) [with Point1 = boost::geometry::model::d2::point_xy<double>; Point2 = boost::geometry::model::d2::point_xy<double>; E = double]’ at /usr/include/boost/geometry/algorithms/detail/overlay/approximately_equals.hpp:61:48,
    inlined from ‘boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::point_type boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::walk_to_point_after_turn(const Operation&, const point_type&) const [with Operation = boost::geometry::detail::overlay::traversal_turn_operation<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >; bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’ at /usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:81:38,
    inlined from ‘boost::geometry::detail::overlay::turn_operation_id boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::select_by_side(edges_type&, const point_type&, const point_type&) const [with bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’ at /usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:153:50,
    inlined from ‘boost::geometry::detail::overlay::turn_operation_id boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::select_target_edge(const boost::geometry::detail::overlay::set_of_tois&, const point_type&, const point_type&) const [with bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’ at /usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:299:30:
/usr/include/boost/geometry/util/math.hpp:107:26: error: ‘point.boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>::<unnamed>.boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>::m_values[0]’ may be used uninitialized [-Werror=maybe-uninitialized]
  107 |         return fabs(value);
      |                          ^
/usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp: In member function ‘boost::geometry::detail::overlay::turn_operation_id boost::geometry::detail::overlay::edge_selector<Reverse1, Reverse2, OverlayType, Geometry1, Geometry2, Turns, Clusters, Strategy>::select_target_edge(const boost::geometry::detail::overlay::set_of_tois&, const point_type&, const point_type&) const [with bool Reverse1 = true; bool Reverse2 = true; boost::geometry::overlay_type OverlayType = boost::geometry::overlay_intersection; Geometry1 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Geometry2 = boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double>, false>; Turns = std::deque<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> >, std::allocator<boost::geometry::detail::overlay::traversal_turn_info<boost::geometry::model::d2::point_xy<double>, boost::geometry::segment_ratio<double> > > >; Clusters = std::map<long int, boost::geometry::detail::overlay::cluster_info>; Strategy = boost::geometry::strategies::relate::cartesian<>]’:
/usr/include/boost/geometry/algorithms/detail/overlay/graph/select_edge.hpp:75:20: note: ‘point.boost::geometry::model::d2::point_xy<double, boost::geometry::cs::cartesian>::<unnamed>.boost::geometry::model::point<double, 2, boost::geometry::cs::cartesian>::m_values[0]’ was declared here
   75 |         point_type point;
      |                    ^~~~~
cc1plus: all warnings being treated as errors

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions