[Bug c++/93096] New: detect [class.cdtor]/6 UB in constexpr dynamic_cast

mpolacek at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sun Dec 29 16:49:00 GMT 2019


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

            Bug ID: 93096
           Summary: detect [class.cdtor]/6 UB in constexpr dynamic_cast
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mpolacek at gcc dot gnu.org
  Target Milestone: ---

We should detect the UB here:

struct V {
  virtual void f();
};

struct A : V { };

struct B : V {
  constexpr B(V*, A*);
};

struct D : A, B {
  constexpr D() : B((A*)this, this) { } 
};

constexpr B::B(V* v, A* a)
{
  // undefined behavior, a has type A*, A not a base of B
  dynamic_cast<B*>(a);
}

constexpr D d;

but currently we don't.  This is
<http://eel.is/c++draft/class.cdtor#6.sentence-3>.  See
<https://gcc.gnu.org/ml/gcc-patches/2019-12/msg01521.html> for another testcase
and possible approaches how to handle this.


More information about the Gcc-bugs mailing list