diff --git a/source/symbols/ValueSymbol.cpp b/source/symbols/ValueSymbol.cpp index aa3b0198a..09e7bebe6 100644 --- a/source/symbols/ValueSymbol.cpp +++ b/source/symbols/ValueSymbol.cpp @@ -56,6 +56,7 @@ ValueSymbol::Driver& ValueSymbol::Driver::create(EvalContext& evalContext, Drive switch (expr->kind) { case ExpressionKind::NamedValue: case ExpressionKind::HierarchicalValue: + case ExpressionKind::Call: expr = nullptr; break; case ExpressionKind::Conversion: diff --git a/tests/unittests/ClassTests.cpp b/tests/unittests/ClassTests.cpp index 46b02d46a..8d46f8ba0 100644 --- a/tests/unittests/ClassTests.cpp +++ b/tests/unittests/ClassTests.cpp @@ -2566,3 +2566,23 @@ endfunction REQUIRE(diags.size() == 1); CHECK(diags[0].code == diag::Redefinition); } + +TEST_CASE("Class method driver crash regress GH #552") { + auto tree = SyntaxTree::fromText(R"( +class B; + int v[$]; +endclass + +class C; + virtual function B get(); + endfunction + function f(); + get().v.delete(); + endfunction +endclass +)"); + + Compilation compilation; + compilation.addSyntaxTree(tree); + NO_COMPILATION_ERRORS; +}