Skip to content

Commit

Permalink
Fix wrong IL being emitted for static iiddata variable
Browse files Browse the repository at this point in the history
  • Loading branch information
manodasanW committed Jan 10, 2024
1 parent 45bbc20 commit cd9e372
Showing 1 changed file with 2 additions and 14 deletions.
16 changes: 2 additions & 14 deletions src/Perf/IIDOptimizer/SignatureEmitter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -163,18 +163,6 @@ private void GenerateGuidFactoryFromComplexSignature(TypeDefinition implementati
getterMethodGensToCacheTypeGens[guidDataGetterMethod.GenericParameters[i]] = cacheType.GenericParameters[i];
}

var instantiatedCacheType = new GenericInstanceType(cacheType);
foreach (var arg in guidDataGetterMethod.GenericParameters)
{
instantiatedCacheType.GenericArguments.Add(arg);
}

var selfInstantiatedCacheType = new GenericInstanceType(cacheType);
foreach (var param in cacheType.GenericParameters)
{
selfInstantiatedCacheType.GenericArguments.Add(param);
}

var cacheField = new FieldDefinition("iidData", FieldAttributes.Static | FieldAttributes.Assembly, new ArrayType(module.ImportReference(module.TypeSystem.Byte)));
cacheType.Fields.Add(cacheField);
implementationDetailsType.NestedTypes.Add(cacheType);
Expand All @@ -185,7 +173,7 @@ private void GenerateGuidFactoryFromComplexSignature(TypeDefinition implementati

// In the body of the getter method, return the cache data
var getterIL = guidDataGetterMethod.Body.GetILProcessor();
getterIL.Emit(OpCodes.Ldsfld, new FieldReference(cacheField.Name, cacheField.FieldType, instantiatedCacheType));
getterIL.Emit(OpCodes.Ldsfld, new FieldReference(cacheField.Name, cacheField.FieldType, cacheType));
getterIL.Emit(OpCodes.Newobj, readOnlySpanOfByteArrayCtor);
getterIL.Emit(OpCodes.Ret);

Expand Down Expand Up @@ -598,7 +586,7 @@ private void GenerateGuidFactoryFromComplexSignature(TypeDefinition implementati
il.Emit(OpCodes.Stloc, spanTemp);
il.Emit(OpCodes.Ldloca, spanTemp);
il.Emit(OpCodes.Call, toArrayMethod);
il.Emit(OpCodes.Stsfld, new FieldReference(cacheField.Name, cacheField.FieldType, selfInstantiatedCacheType));
il.Emit(OpCodes.Stsfld, new FieldReference(cacheField.Name, cacheField.FieldType, cacheType));
il.Emit(OpCodes.Ret);
}
}
Expand Down

0 comments on commit cd9e372

Please sign in to comment.