[PATCH] D154701: [clang] Overridden CXXMethodDecl::isVirtual() assertion failed before fully imported.

Balázs Kéri via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 11 07:34:49 PDT 2023


balazske added a comment.

It is possible to reproduce the same problem with this test added to ASTImporterTest.cpp:

  TEST_P(ASTImporterOptionSpecificTestBase, ImportVirtualOverriddenMethodTest) {
    const char *Code =
        R"(
        void f1();
        class A {
          virtual void f(){}
        };
        class B: public A {
          void f() override {
            f1();
          }
        };
        class C: public B {
          void f() override {}
        };
        void f1() { C c; }
        )";
    Decl *FromTU = getTuDecl(Code, Lang_CXX11);
  
    auto *FromF = FirstDeclMatcher<CXXMethodDecl>().match(
        FromTU, cxxMethodDecl(hasName("B::f")));
  
    auto *ToBF = Import(FromF, Lang_CXX11);
    EXPECT_TRUE(ToBF->isVirtual());
  
    auto *ToCF = FirstDeclMatcher<CXXMethodDecl>().match(
        ToBF->getTranslationUnitDecl(), cxxMethodDecl(hasName("C::f")));
    EXPECT_TRUE(ToCF->isVirtual());
  }

I am not opposed to removal of the assertion as fix because it looks not very important (probably it can be replaced by another assertion for example to not allow constructors here, see this <https://github.com/llvm/llvm-project/commit/913590247898627144f62c0e48d0fe25f9d34e76> commit) but another person in the AST area should check this.



================
Comment at: clang/test/Analysis/ctu-astimport-virtual-assertion/main.cpp:22
+
+#include "Inputs/input.h"
----------------
Such tests are not in the //Analysis// folder but in the //ASTMerge// folder instead. I would say that this test is not necessary if the other test (in my added note) is inserted.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D154701/new/

https://reviews.llvm.org/D154701



More information about the cfe-commits mailing list