Verifier adds GroovyObject to most classes near the start of the classgen compile phase. However, classgen proceeds per class node and there are a number of places that check for GroovyObject and can be subject to order-of-operations issues.
Consider the following (excerpt of
GROOVY-5517 test case):
The script class can be processed before MyHashMap and the checks in AsmClassGenerator can produce different bytecode depending on detection of GroovyObject on MyHashMap. Under static compilation this means the difference between StaticTypesCallSiteWriter#makeGetPropertySite and StaticTypesCallSiteWriter#makeGroovyObjectGetPropertySite for "map.foo".