https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63813

            Bug ID: 63813
           Summary: [5 Regression][UBSAN] ICE in ubsan_type_descriptor, at
                    ubsan.c:346
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org,
                    mpolacek at gcc dot gnu.org

With yesterdays's GCC, compiling our big code fails with:

$ g++ -S -w -fsanitize=undefined -O1 poly21.ii

poly21.ii: In member function ‘void
sfm::PolygonBuilder::ProcessSingleExternalTopRight(const
sfm::PolygonSingleEvent&)’:
poly21.ii:23:8: internal compiler error: in ubsan_type_descriptor, at
ubsan.c:346
   void PolygonBuilder::ProcessSingleExternalTopRight (
        ^
0xcaaebc ubsan_type_descriptor(tree_node*, ubsan_print_style)
        ../../gcc/ubsan.c:346
0xcac58c ubsan_expand_null_ifn(gimple_stmt_iterator*)
        ../../gcc/ubsan.c:766


It was working on 7 November.

---------<cut>-------------------------------
namespace sfm
{
  class PolygonFragment { };
  typedef long AttributeValue;
  class CrossingEvent {
   public:
    inline AttributeValue GetValue () const;
  };
  class SingleCrossingEvent : public CrossingEvent { };
  class PolygonSingleEvent : public SingleCrossingEvent {
   public:
    inline PolygonFragment &GetFragment () const;
  };
  PolygonFragment &PolygonSingleEvent::GetFragment () const {
    return *reinterpret_cast <PolygonFragment *>(GetValue ());
  }
  class PolygonBuilder {
    void ProcessSingleExternalTopRight (const PolygonSingleEvent &inEvent);
    inline void CloseExternal (PolygonFragment &ioLeft,
                               PolygonFragment &ioRight);
    PolygonFragment *mCarryBelow;
  };
  void PolygonBuilder::ProcessSingleExternalTopRight (
      const PolygonSingleEvent &inEvent)
  {
    CloseExternal (*mCarryBelow, inEvent.GetFragment ());
  }
}

Reply via email to