Abstract class cannot be instantiated seen during elaboration

During elaboration I am seeing the following errors. Does anyone have a recommendation on how to track down the code causing this error?

Error-[SV-ACCNBI] An abstract class cannot be instantiated
…uvm/uvm_1.1d/src/base/uvm_registry.svh, 66
uvm_pkg, “obj = new(name, parent);”
Instantiation of the object ‘obj’ can not be done because its type
‘uvm_component’ is an abstract base class.
Perhaps there is a derived class that should be used.

Error-[SV-ACCNBI] An abstract class cannot be instantiated
…uvm/uvm_1.1d/src/base/uvm_registry.svh, 199
uvm_pkg, “obj = new();”
Instantiation of the object ‘obj’ can not be done because its type
‘uvm_object’ is an abstract base class.
Perhaps there is a derived class that should be used.

Thanks,
Tim

In reply to sperber:

You’ll have to contact your vendor to get better error messages that could show you the specialization of uvm_object_registry in effect for the error. Or perhaps you could try a different tool.

In reply to dave_59:

Hi sperber, dave_59
I hit the exact issue a couple of weeks ago. After much head scratching, reported it to our tool vendor’s AE who contracts for our project. The problem seems to have been triggered by the scope where the include of the file which contains the abstract class definition is done. In our case we were including the abstract class file in our env code. Temporary work around is to move the include to the scope where your tb top module is defined. In our case it looks like the problem is with the stricter compliance of the simulator(VCS) with SV-LRM. How the scope is tied to the LRM compliance is a mystery. Waiting to hear back from their R&D on it. Expect some fixes in the future release. Hope this helps.

Thanks
Vivek

In reply to viveks:

If you have registered the abstract class with factory(`uvm_component_utils), try removing it. Since abstract classes are not expected to be overriden, it is okay to not register it with factory.

In reply to imajeeth:

In reply to viveks:
If you have registered the abstract class with factory(`uvm_component_utils), try removing it. Since abstract classes are not expected to be overriden, it is okay to not register it with factory.

I was facing the same error and removing the factory registration: (`umm_component_utils) fixed this issue. Thanks imajeeth for this suggestion.