From bd6709248295deefa1956da3aeb9b0e086fbaca5 Mon Sep 17 00:00:00 2001 From: Andrii Kurdiumov Date: Mon, 26 Dec 2022 05:45:49 +0600 Subject: [PATCH] Fix type name parsing in NativeAOT (#79963) Simplified type name parsing was breaking if full name or assembly name has underscode ('_') in it. That breaks referencing `SQLitePCL.Batteries_V2, SQLitePCLRaw.batteries_v2` type inside `Microsoft.Data.Sqlite` Fixes https://github.com/dotnet/efcore/issues/29725 --- .../DependencyAnalysis/ReflectionMethodBodyScanner.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionMethodBodyScanner.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionMethodBodyScanner.cs index 22ca17d449a239..44277568a5fec8 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionMethodBodyScanner.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/DependencyAnalysis/ReflectionMethodBodyScanner.cs @@ -23,7 +23,7 @@ public static bool ResolveType(string name, ModuleDesc callingModule, TypeSystem StringBuilder typeName = new StringBuilder(); StringBuilder typeNamespace = new StringBuilder(); string containingTypeName = null; - while (i < name.Length && (char.IsLetterOrDigit(name[i]) || name[i] == '.' || name[i] == '`' || name[i] == '+')) + while (i < name.Length && (char.IsLetterOrDigit(name[i]) || name[i] == '.' || name[i] == '_' || name[i] == '`' || name[i] == '+')) { if (name[i] == '.') { @@ -59,7 +59,7 @@ public static bool ResolveType(string name, ModuleDesc callingModule, TypeSystem // Consume assembly name StringBuilder assemblyName = new StringBuilder(); - while (i < name.Length && (char.IsLetterOrDigit(name[i]) || name[i] == '.')) + while (i < name.Length && (char.IsLetterOrDigit(name[i]) || name[i] == '.' || name[i] == '_')) { assemblyName.Append(name[i]); i++;