// PR c++/100797
// { dg-do run }

bool ok = false;
struct S1 { virtual ~S1() {} };
struct S2 { virtual void f1() = 0; };
struct S3: S1, S2 {
    void f1() { f2(); }
    virtual void f2() = 0;
};
struct S4: S3 {
  void f2() { ok = true; }
  using S2::f1;
};
int main() {
  S4().f1();
  if (!ok) __builtin_abort ();
}