When a program unit creates a generic based on one defined in a module, the
function CopyFrom() is called to create the GenericDetails. This function
copied the specificProcs_ but failed to copy the bindingNames_. If the
function CheckGeneric() then gets called, it tries to index into the empty
binding names and causes the crash.
I fixed this by adding code to CopyFrom() to copy the binding names.
I also added a test that causes the crash.
I think that specificProcs_ and bindingNames_ are supposed to be parallel vectors; at least that is the assumption in CheckHelper::CheckGeneric. So this should be written as a single loop that pushes onto the two lists at the same time. As it's written it looks like the two loops might push different numbers of elements on the two lists.
One thing that suggests that the above assumption is wrong is the existence of this constructor: GenericDetails(const SymbolVector &specificProcs);. But I'm not sure it is ever used, so it would be good if you can delete it as part of this change.