diff --git a/configure.REMOVED.git-id b/configure.REMOVED.git-id index 8167da4c8e..f28700029d 100644 --- a/configure.REMOVED.git-id +++ b/configure.REMOVED.git-id @@ -1 +1 @@ -4983f549ffc7653871992231faccc651ea216755 \ No newline at end of file +dda12b89b57ec43ec7425bee91b759452f9ece18 \ No newline at end of file diff --git a/configure.ac.REMOVED.git-id b/configure.ac.REMOVED.git-id index 64d692c950..c9ca6551af 100644 --- a/configure.ac.REMOVED.git-id +++ b/configure.ac.REMOVED.git-id @@ -1 +1 @@ -db56ea81331da24e34c3ea02e0cc19e0c3330fb4 \ No newline at end of file +62872d5f3cb314c4c4b962ce6f487b4e2941c0de \ No newline at end of file diff --git a/docs/deploy/mono-api-exc.html b/docs/deploy/mono-api-exc.html index 1aeff4837d..ae732178bc 100644 --- a/docs/deploy/mono-api-exc.html +++ b/docs/deploy/mono-api-exc.html @@ -221,7 +221,7 @@
Syntax
void -mono_raise_exception (MonoException *ex) +mono_reraise_exception (MonoException *ex)

diff --git a/external/cecil/Mono.Cecil.Cil/CodeReader.cs b/external/cecil/Mono.Cecil.Cil/CodeReader.cs index 11cc7e9dbc..17376d421a 100644 --- a/external/cecil/Mono.Cecil.Cil/CodeReader.cs +++ b/external/cecil/Mono.Cecil.Cil/CodeReader.cs @@ -160,7 +160,8 @@ namespace Mono.Cecil.Cil { void ReadScope (ScopeDebugInformation scope) { var start_instruction = GetInstruction (scope.Start.Offset); - scope.Start = new InstructionOffset (start_instruction); + if (start_instruction != null) + scope.Start = new InstructionOffset (start_instruction); var end_instruction = GetInstruction (scope.End.Offset); scope.End = end_instruction != null diff --git a/external/cecil/Mono.Cecil/AssemblyReader.cs b/external/cecil/Mono.Cecil/AssemblyReader.cs index 8217bc0ed7..02d7787844 100644 --- a/external/cecil/Mono.Cecil/AssemblyReader.cs +++ b/external/cecil/Mono.Cecil/AssemblyReader.cs @@ -2954,14 +2954,20 @@ namespace Mono.Cecil { if (record.Col2.Length > 0) { scope.variables = new Collection ((int) record.Col2.Length); - for (uint i = 0; i < record.Col2.Length; i++) - scope.variables.Add (ReadLocalVariable (record.Col2.Start + i)); + for (uint i = 0; i < record.Col2.Length; i++) { + var variable = ReadLocalVariable (record.Col2.Start + i); + if (variable != null) + scope.variables.Add (variable); + } } if (record.Col3.Length > 0) { scope.constants = new Collection ((int) record.Col3.Length); - for (uint i = 0; i < record.Col3.Length; i++) - scope.constants.Add (ReadLocalConstant (record.Col3.Start + i)); + for (uint i = 0; i < record.Col3.Length; i++) { + var constant = ReadLocalConstant (record.Col3.Start + i); + if (constant != null) + scope.constants.Add (constant); + } } return scope; diff --git a/external/linker/.gitignore b/external/linker/.gitignore index 21d2002e61..ec0bb250e2 100644 --- a/external/linker/.gitignore +++ b/external/linker/.gitignore @@ -23,4 +23,6 @@ bin/ *.force -*.FileListAbsolute.txt \ No newline at end of file +*.FileListAbsolute.txt + +**/Dependencies/*.dll diff --git a/external/linker/cecil/.editorconfig b/external/linker/cecil/.editorconfig index 7c2b956492..6868a57dab 100644 --- a/external/linker/cecil/.editorconfig +++ b/external/linker/cecil/.editorconfig @@ -3,3 +3,9 @@ root = true [*.cs] indent_style = tab +csharp_space_between_method_declaration_name_and_open_parenthesis = true +csharp_space_between_method_call_name_and_opening_parenthesis = true +csharp_space_before_open_square_brackets = true +csharp_new_line_before_open_brace = methods +csharp_new_line_before_else = false +csharp_indent_switch_labels = false \ No newline at end of file diff --git a/external/linker/cecil/Mono.Cecil.Cil/CodeReader.cs b/external/linker/cecil/Mono.Cecil.Cil/CodeReader.cs index 6f07dda5c0..17376d421a 100644 --- a/external/linker/cecil/Mono.Cecil.Cil/CodeReader.cs +++ b/external/linker/cecil/Mono.Cecil.Cil/CodeReader.cs @@ -161,11 +161,12 @@ namespace Mono.Cecil.Cil { { var start_instruction = GetInstruction (scope.Start.Offset); if (start_instruction != null) - scope.Start = new InstructionOffset (start_instruction); + scope.Start = new InstructionOffset (start_instruction); var end_instruction = GetInstruction (scope.End.Offset); - if (end_instruction != null) - scope.End = new InstructionOffset (end_instruction); + scope.End = end_instruction != null + ? new InstructionOffset (end_instruction) + : new InstructionOffset (); if (!scope.variables.IsNullOrEmpty ()) { for (int i = 0; i < scope.variables.Count; i++) { diff --git a/external/linker/cecil/Mono.Cecil.Cil/PortablePdb.cs b/external/linker/cecil/Mono.Cecil.Cil/PortablePdb.cs index 9542eeab6b..717249e909 100644 --- a/external/linker/cecil/Mono.Cecil.Cil/PortablePdb.cs +++ b/external/linker/cecil/Mono.Cecil.Cil/PortablePdb.cs @@ -60,10 +60,12 @@ namespace Mono.Cecil.Cil { this.debug_reader = new MetadataReader (image, module, this.reader); } +#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new PortablePdbWriterProvider (); } +#endif public bool ProcessDebugHeader (ImageDebugHeader header) { @@ -92,7 +94,11 @@ namespace Mono.Cecil.Cil { var pdb_guid = new Guid (buffer); - return module_guid == pdb_guid; + if (module_guid != pdb_guid) + return false; + + ReadModule (); + return true; } static int ReadInt32 (byte [] bytes, int start) @@ -103,6 +109,11 @@ namespace Mono.Cecil.Cil { | (bytes [start + 3] << 24)); } + void ReadModule () + { + module.custom_infos = debug_reader.GetCustomDebugInformation (module); + } + public MethodDebugInformation Read (MethodDefinition method) { var info = new MethodDebugInformation (method); @@ -190,11 +201,12 @@ namespace Mono.Cecil.Cil { this.reader = reader; } +#if !READ_ONLY public ISymbolWriterProvider GetWriterProvider () { return new EmbeddedPortablePdbWriterProvider (); } - +#endif public bool ProcessDebugHeader (ImageDebugHeader header) { return reader.ProcessDebugHeader (header); @@ -244,6 +256,7 @@ namespace Mono.Cecil.Cil { interface IMetadataSymbolWriter : ISymbolWriter { void SetMetadata (MetadataBuilder metadata); + void WriteModule (); } public sealed class PortablePdbWriter : ISymbolWriter, IMetadataSymbolWriter { @@ -276,6 +289,11 @@ namespace Mono.Cecil.Cil { this.pdb_metadata.metadata_builder = metadata; } + void IMetadataSymbolWriter.WriteModule () + { + pdb_metadata.AddCustomDebugInformations (module); + } + public ISymbolReaderProvider GetReaderProvider () { return new PortablePdbReaderProvider (); @@ -471,6 +489,11 @@ namespace Mono.Cecil.Cil { { ((IMetadataSymbolWriter) writer).SetMetadata (metadata); } + + void IMetadataSymbolWriter.WriteModule () + { + ((IMetadataSymbolWriter) writer).WriteModule (); + } } #endif diff --git a/external/linker/cecil/Mono.Cecil.Cil/Symbols.cs b/external/linker/cecil/Mono.Cecil.Cil/Symbols.cs index b89d4cfeae..6ef5ad2a60 100644 --- a/external/linker/cecil/Mono.Cecil.Cil/Symbols.cs +++ b/external/linker/cecil/Mono.Cecil.Cil/Symbols.cs @@ -433,6 +433,8 @@ namespace Mono.Cecil.Cil { DynamicVariable, DefaultNamespace, AsyncMethodBody, + EmbeddedSource, + SourceLink, } public abstract class CustomDebugInformation : DebugInformation { @@ -558,6 +560,57 @@ namespace Mono.Cecil.Cil { } } + public sealed class EmbeddedSourceDebugInformation : CustomDebugInformation { + + internal byte [] content; + internal bool compress; + + public byte [] Content { + get { return content; } + set { content = value; } + } + + public bool Compress { + get { return compress; } + set { compress = value; } + } + + public override CustomDebugInformationKind Kind { + get { return CustomDebugInformationKind.EmbeddedSource; } + } + + public static Guid KindIdentifier = new Guid ("{0E8A571B-6926-466E-B4AD-8AB04611F5FE}"); + + public EmbeddedSourceDebugInformation (byte [] content, bool compress) + : base (KindIdentifier) + { + this.content = content; + this.compress = compress; + } + } + + public sealed class SourceLinkDebugInformation : CustomDebugInformation { + + internal string content; + + public string Content { + get { return content; } + set { content = value; } + } + + public override CustomDebugInformationKind Kind { + get { return CustomDebugInformationKind.SourceLink; } + } + + public static Guid KindIdentifier = new Guid ("{CC110556-A091-4D38-9FEC-25AB9A351A6A}"); + + public SourceLinkDebugInformation (string content) + : base (KindIdentifier) + { + this.content = content; + } + } + public sealed class MethodDebugInformation : DebugInformation { internal MethodDefinition method; @@ -683,8 +736,9 @@ namespace Mono.Cecil.Cil { } public interface ISymbolReader : IDisposable { - +#if !READ_ONLY ISymbolWriterProvider GetWriterProvider (); +#endif bool ProcessDebugHeader (ImageDebugHeader header); MethodDebugInformation Read (MethodDefinition method); } @@ -722,14 +776,25 @@ namespace Mono.Cecil.Cil { var pdb_file_name = Mixin.GetPdbFileName (fileName); - if (File.Exists (pdb_file_name)) - return Mixin.IsPortablePdb (Mixin.GetPdbFileName (fileName)) - ? new PortablePdbReaderProvider ().GetSymbolReader (module, fileName) - : SymbolProvider.GetReaderProvider (SymbolKind.NativePdb).GetSymbolReader (module, fileName); + if (File.Exists (pdb_file_name)) { + if (Mixin.IsPortablePdb (Mixin.GetPdbFileName (fileName))) + return new PortablePdbReaderProvider ().GetSymbolReader (module, fileName); + + try { + return SymbolProvider.GetReaderProvider (SymbolKind.NativePdb).GetSymbolReader (module, fileName); + } catch (TypeLoadException) { + // We might not include support for native pdbs. + } + } var mdb_file_name = Mixin.GetMdbFileName (fileName); - if (File.Exists (mdb_file_name)) - return SymbolProvider.GetReaderProvider (SymbolKind.Mdb).GetSymbolReader (module, fileName); + if (File.Exists (mdb_file_name)) { + try { + return SymbolProvider.GetReaderProvider (SymbolKind.Mdb).GetSymbolReader (module, fileName); + } catch (TypeLoadException) { + // We might not include support for mdbs. + } + } if (throw_if_no_symbol) throw new FileNotFoundException (string.Format ("No symbol found for file: {0}", fileName)); @@ -930,6 +995,7 @@ namespace Mono.Cecil { { const uint ppdb_signature = 0x424a5342; + if (stream.Length < 4) return false; var position = stream.Position; try { var reader = new BinaryReader (stream); diff --git a/external/linker/cecil/Mono.Cecil.PE/ImageWriter.cs b/external/linker/cecil/Mono.Cecil.PE/ImageWriter.cs index e85bcf64ca..3fc689d2dc 100644 --- a/external/linker/cecil/Mono.Cecil.PE/ImageWriter.cs +++ b/external/linker/cecil/Mono.Cecil.PE/ImageWriter.cs @@ -197,7 +197,7 @@ namespace Mono.Cecil.PE { void WritePEFileHeader () { WriteUInt32 (0x00004550); // Magic - WriteUInt16 (GetMachine ()); // Machine + WriteUInt16 ((ushort) module.Architecture); // Machine WriteUInt16 (sections); // NumberOfSections WriteUInt32 (metadata.timestamp); WriteUInt32 (0); // PointerToSymbolTable @@ -211,22 +211,6 @@ namespace Mono.Cecil.PE { WriteUInt16 (characteristics); // Characteristics } - ushort GetMachine () - { - switch (module.Architecture) { - case TargetArchitecture.I386: - return 0x014c; - case TargetArchitecture.AMD64: - return 0x8664; - case TargetArchitecture.IA64: - return 0x0200; - case TargetArchitecture.ARMv7: - return 0x01c4; - } - - throw new NotSupportedException (); - } - Section LastSection () { if (reloc != null) diff --git a/external/linker/cecil/Mono.Cecil.nuspec b/external/linker/cecil/Mono.Cecil.nuspec index e53dd6aaa6..95ef8b4de7 100644 --- a/external/linker/cecil/Mono.Cecil.nuspec +++ b/external/linker/cecil/Mono.Cecil.nuspec @@ -2,7 +2,7 @@ Mono.Cecil - 0.10.0.0-beta5 + 0.10.0.0-beta6 Mono.Cecil Jb Evain Jb Evain diff --git a/external/linker/cecil/Mono.Cecil.props b/external/linker/cecil/Mono.Cecil.props index 10ceb57c4c..da63a2ffe3 100644 --- a/external/linker/cecil/Mono.Cecil.props +++ b/external/linker/cecil/Mono.Cecil.props @@ -15,7 +15,7 @@ true false - + true full false @@ -23,7 +23,7 @@ prompt 4 - + pdbonly true $(DefineConstants);TRACE; @@ -31,6 +31,9 @@ 4 false + + $(DefineConstants);READ_ONLY; + v3.5 $(DefineConstants); @@ -49,18 +52,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + - ILLink.Tasks.nuspec - id=$(AssemblyName);authors=$(AssemblyName);description=linker tasks;tfm=$(TargetFramework); + ILLink.Tasks.nuspec + id=$(AssemblyName);authors=$(AssemblyName);description=linker tasks; - Publish;SetDynamicNuspecProperties;$(GenerateNuspecDependsOn) + SetDynamicNuspecProperties;$(GenerateNuspecDependsOn) - + - $(NuspecProperties)output=$(PublishDir);version=$(Version); + $(NuspecProperties)version=$(Version); + + + + + TargetFramework=%(TFMsToPublish.Identity);PublishDir=%(TFMsToPublish.Identity) + + + + + @@ -79,6 +91,7 @@ + @@ -125,18 +138,17 @@ --> - - + - + Configuration=illink_$(Configuration) + + + + + + + Configuration=netstandard_$(Configuration) + + + + - - + + + diff --git a/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.nuspec b/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.nuspec index 89112242e0..2ed76e1407 100644 --- a/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.nuspec +++ b/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.nuspec @@ -8,6 +8,7 @@ - + + diff --git a/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets b/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets index e9fcf35869..29f7732d5c 100644 --- a/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets +++ b/external/linker/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets @@ -1,7 +1,11 @@ - $(MSBuildThisFileDirectory)../tools/$(TargetFramework)/ILLink.Tasks.dll + <_LinkTaskDirectoryRoot>$(MSBuildThisFileDirectory)../tools/ + <_LinkTaskTFM Condition=" '$(MSBuildRuntimeType)' == 'Core' ">netcoreapp2.0 + <_LinkTaskTFM Condition=" '$(_LinkTaskTFM)' == '' ">net46 + <_LinkTaskDirectory>$(_LinkTaskDirectoryRoot)$(_LinkTaskTFM)/ + $(_LinkTaskDirectory)ILLink.Tasks.dll @@ -54,10 +58,15 @@ which computes the ItemGroup ResolvedFileToPublish. To extend this target, we insert a target before ComputeFilesToPublish. Our target rewrites the relevant inputs - (@(IntermediateAssembly) and - @(ResolvedAssembliesToPublish)). This lets ComputeFilesToPublish - be ignorant of the linker, but changes the meaning of - IntermediateAssembly and ResolvedAssembliesToPublish. + (@(IntermediateAssembly), @(ResolvedAssembliesToPublish)). This + lets ComputeFilesToPublish be ignorant of the linker, but + changes the meaning of IntermediateAssembly and + ResolvedAssembliesToPublish. + + To include linked pdbs in the publish output, we also rewrite + the ComputeFilesToPublish input + @(_DebugSymbolsIntermediatePath). Note that this is a private + itemgroup, so relying on this is not ideal. --> + + <_DebugSymbolsIntermediatePath Remove="@(_DebugSymbolsIntermediatePath)" Condition=" '$(_DebugSymbolsProduced)' == 'true' " /> + <_DebugSymbolsIntermediatePath Include="@(_LinkedDebugSymbols)" Condition=" '$(_DebugSymbolsProduced)' == 'true' " /> + @@ -100,10 +116,11 @@ - + @@ -115,6 +132,13 @@ <__LinkedIntermediateAssembly Include="@(IntermediateAssembly->'$(IntermediateLinkDir)/%(Filename)%(Extension)')" /> <_LinkedIntermediateAssembly Include="@(__LinkedIntermediateAssembly)" Condition="Exists('%(Identity)')" /> + + + <__LinkedDebugSymbols Include="@(_DebugSymbolsIntermediatePath->'$(IntermediateLinkDir)/%(Filename)%(Extension)')" + Condition=" '$(_DebugSymbolsProduced)' == 'true' " /> + <_LinkedDebugSymbols Include="@(__LinkedDebugSymbols)" + Condition="Exists('%(Identity)') And '$(_DebugSymbolsProduced)' == 'true' " /> + @@ -132,7 +156,7 @@ the future we will want to generate these depending on the scenario in which the linker is invoked. --> - -t -c link -l none + -t -c link -l none -b true <_ManagedResolvedAssembliesToPublish Remove="@(_ManagedResolvedAssembliesToPublish->WithMetadataValue('Filename', 'System.Private.CoreLib.ni'))" /> + + + <_ManagedResolvedAssembliesToPublish Remove="@(_ManagedResolvedAssembliesToPublish->WithMetadataValue('AssetType', 'resources'))" /> + diff --git a/external/linker/corebuild/integration/ILLink.Tasks/Utils.cs b/external/linker/corebuild/integration/ILLink.Tasks/Utils.cs new file mode 100644 index 0000000000..eff2971753 --- /dev/null +++ b/external/linker/corebuild/integration/ILLink.Tasks/Utils.cs @@ -0,0 +1,15 @@ +using System; +using Mono.Cecil; + +public class Utils +{ + public static bool IsManagedAssembly (string fileName) + { + try { + ModuleDefinition module = ModuleDefinition.ReadModule (fileName); + return true; + } catch (BadImageFormatException) { + return false; + } + } +} \ No newline at end of file diff --git a/external/linker/corebuild/linker.sln b/external/linker/corebuild/linker.sln index 11ad040f6a..c93587578f 100644 --- a/external/linker/corebuild/linker.sln +++ b/external/linker/corebuild/linker.sln @@ -22,18 +22,18 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|Any CPU.ActiveCfg = netcore_Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|Any CPU.Build.0 = netcore_Debug|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x64.ActiveCfg = netcore_Debug|x64 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x64.Build.0 = netcore_Debug|x64 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x86.ActiveCfg = netcore_Debug|x86 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x86.Build.0 = netcore_Debug|x86 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|Any CPU.ActiveCfg = netcore_Release|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|Any CPU.Build.0 = netcore_Release|Any CPU - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x64.ActiveCfg = netcore_Release|x64 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x64.Build.0 = netcore_Release|x64 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x86.ActiveCfg = netcore_Release|x86 - {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x86.Build.0 = netcore_Release|x86 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|Any CPU.ActiveCfg = illink_Debug|Any CPU + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|Any CPU.Build.0 = illink_Debug|Any CPU + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x64.ActiveCfg = illink_Debug|x64 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x64.Build.0 = illink_Debug|x64 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x86.ActiveCfg = illink_Debug|x86 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Debug|x86.Build.0 = illink_Debug|x86 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|Any CPU.ActiveCfg = illink_Release|Any CPU + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|Any CPU.Build.0 = illink_Release|Any CPU + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x64.ActiveCfg = illink_Release|x64 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x64.Build.0 = illink_Release|x64 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x86.ActiveCfg = illink_Release|x86 + {DD28E2B1-057B-4B4D-A04D-B2EBD9E76E46}.Release|x86.Build.0 = illink_Release|x86 {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.ActiveCfg = netstandard_Debug|Any CPU {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|Any CPU.Build.0 = netstandard_Debug|Any CPU {D68133BD-1E63-496E-9EDE-4FBDBF77B486}.Debug|x64.ActiveCfg = netstandard_Debug|x64 diff --git a/external/linker/linker/NetCore.props b/external/linker/linker/ILLink.props similarity index 54% rename from external/linker/linker/NetCore.props rename to external/linker/linker/ILLink.props index 3a8c30dba0..db2a8a8f49 100644 --- a/external/linker/linker/NetCore.props +++ b/external/linker/linker/ILLink.props @@ -1,13 +1,14 @@ - netcoreapp2.0 + netcoreapp2.0;net46 + netcoreapp2.0 2.0.0-beta-001509-00 - $(DefineConstants);NET_CORE + $(DefineConstants);FEATURE_ILLINK false false illink - exe + Library diff --git a/external/linker/linker/Mono.Linker.Steps/MarkStep.cs b/external/linker/linker/Mono.Linker.Steps/MarkStep.cs index 2c75bce37d..224f0f0354 100644 --- a/external/linker/linker/Mono.Linker.Steps/MarkStep.cs +++ b/external/linker/linker/Mono.Linker.Steps/MarkStep.cs @@ -77,10 +77,15 @@ namespace Mono.Linker.Steps { protected virtual void InitializeAssembly (AssemblyDefinition assembly) { - MarkAssembly (assembly); + Annotations.Push (assembly); + try { + MarkAssembly (assembly); - foreach (TypeDefinition type in assembly.MainModule.Types) - InitializeType (type); + foreach (TypeDefinition type in assembly.MainModule.Types) + InitializeType (type); + } finally { + Annotations.Pop (); + } } void InitializeType (TypeDefinition type) @@ -152,9 +157,14 @@ namespace Mono.Linker.Steps { } if (!Annotations.IsMarked (type)) continue; - Annotations.Mark (exported); - if (_context.KeepTypeForwarderOnlyAssemblies) { - Annotations.Mark (assembly.MainModule); + Annotations.Push (type); + try { + Annotations.Mark (exported); + if (_context.KeepTypeForwarderOnlyAssemblies) { + Annotations.Mark (assembly.MainModule); + } + } finally { + Annotations.Pop (); } } } @@ -245,8 +255,13 @@ namespace Mono.Linker.Steps { if (!provider.HasCustomAttributes) return; - foreach (CustomAttribute ca in provider.CustomAttributes) - MarkCustomAttribute (ca); + Annotations.Push (provider); + try { + foreach (CustomAttribute ca in provider.CustomAttributes) + MarkCustomAttribute (ca); + } finally { + Annotations.Pop (); + } } void LazyMarkCustomAttributes (ICustomAttributeProvider provider) @@ -508,9 +523,15 @@ namespace Mono.Linker.Steps { while (_topLevelAttributes.Count != 0) { var customAttribute = _topLevelAttributes.Dequeue (); + var resolved = customAttribute.AttributeType.Resolve (); + if (resolved == null) { + HandleUnresolvedType (customAttribute.AttributeType); + continue; + } + // If an attribute's module has not been marked after processing all types in all assemblies and the attribute itself has not been marked, // then surely nothing is using this attribute and there is no need to mark it - if (!Annotations.IsMarked (customAttribute.AttributeType.Resolve ().Module) && !Annotations.IsMarked (customAttribute.AttributeType)) + if (!Annotations.IsMarked (resolved.Module) && !Annotations.IsMarked (customAttribute.AttributeType)) continue; MarkCustomAttribute (customAttribute); @@ -625,8 +646,10 @@ namespace Mono.Linker.Steps { MarkFields (type, type.IsEnum); if (type.HasInterfaces) { - foreach (var iface in type.Interfaces) + foreach (var iface in type.Interfaces) { + MarkCustomAttributes (iface); MarkType (iface.InterfaceType); + } } if (type.HasMethods) { diff --git a/external/linker/linker/Mono.Linker.Steps/ResolveFromAssemblyStep.cs b/external/linker/linker/Mono.Linker.Steps/ResolveFromAssemblyStep.cs index 34645b7a44..6595b826d3 100644 --- a/external/linker/linker/Mono.Linker.Steps/ResolveFromAssemblyStep.cs +++ b/external/linker/linker/Mono.Linker.Steps/ResolveFromAssemblyStep.cs @@ -123,6 +123,26 @@ namespace Mono.Linker.Steps } catch (AssemblyResolutionException) { continue; } + + if (resolvedExportedType == null) { + // + // It's quite common for assemblies to have broken exported types + // + // One source of them is from native csc which added all nested types of + // type-forwarded types automatically including private ones. + // + // Next source of broken type-forwarders is from custom metadata writers which + // simply write bogus information. + // + // Both cases are bugs not on our end but we still want to link all assemblies + // especially when such types cannot be used anyway + // + if (context.LogInternalExceptions) + System.Console.WriteLine ($"Cannot find declaration of exported type '{exported}' from the assembly '{assembly}'"); + + continue; + } + context.Resolve (resolvedExportedType.Scope); MarkType (context, resolvedExportedType, rootVisibility); context.Annotations.Mark (exported); diff --git a/external/linker/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs b/external/linker/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs index bcf300a578..1f4cc89c6e 100644 --- a/external/linker/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs +++ b/external/linker/linker/Mono.Linker.Steps/ResolveFromXmlStep.cs @@ -29,7 +29,7 @@ // using System; -using SR = System.Reflection; +using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Xml.XPath; @@ -51,8 +51,12 @@ namespace Mono.Linker.Steps { static readonly string _fullname = "fullname"; static readonly string _required = "required"; static readonly string _preserve = "preserve"; + static readonly string _accessors = "accessors"; static readonly string _ns = string.Empty; + static readonly string[] _accessorsAll = new string[] { "all" }; + static readonly char[] _accessorsSep = new char[] { ';' }; + XPathDocument _document; string _xmlDocumentLocation; @@ -161,7 +165,7 @@ namespace Mono.Linker.Steps { static Regex CreateRegexFromPattern (string pattern) { - return new Regex (pattern.Replace(".", @"\.").Replace("*", "(.*)")); + return new Regex (pattern.Replace (".", @"\.").Replace ("*", "(.*)")); } void MatchType (TypeDefinition type, Regex regex, XPathNavigator nav) @@ -204,7 +208,7 @@ namespace Mono.Linker.Steps { if (assembly.MainModule.HasExportedTypes) { foreach (var exported in assembly.MainModule.ExportedTypes) { - MatchExportedType(exported, assembly.MainModule, regex, nav); + MatchExportedType (exported, assembly.MainModule, regex, nav); } } } @@ -234,6 +238,8 @@ namespace Mono.Linker.Steps { if (nav.HasChildren) { MarkSelectedFields (nav, type); MarkSelectedMethods (nav, type); + MarkSelectedEvents (nav, type); + MarkSelectedProperties (nav, type); } } @@ -255,6 +261,24 @@ namespace Mono.Linker.Steps { ProcessMethods (type, methods); } + void MarkSelectedEvents (XPathNavigator nav, TypeDefinition type) + { + XPathNodeIterator events = nav.SelectChildren ("event", _ns); + if (events.Count == 0) + return; + + ProcessEvents (type, events); + } + + void MarkSelectedProperties (XPathNavigator nav, TypeDefinition type) + { + XPathNodeIterator properties = nav.SelectChildren ("property", _ns); + if (properties.Count == 0) + return; + + ProcessProperties (type, properties); + } + static TypePreserve GetTypePreserve (XPathNavigator nav) { string attribute = GetAttribute (nav, _preserve); @@ -324,7 +348,7 @@ namespace Mono.Linker.Steps { void ProcessMethods (TypeDefinition type, XPathNodeIterator iterator) { - while (iterator.MoveNext()) { + while (iterator.MoveNext ()) { string value = GetSignature (iterator.Current); if (!String.IsNullOrEmpty (value)) ProcessMethodSignature (type, value); @@ -344,12 +368,25 @@ namespace Mono.Linker.Steps { void MarkMethod (TypeDefinition type, MethodDefinition method, string signature) { if (method != null) { - Annotations.Mark (method); - Annotations.SetAction (method, MethodAction.Parse); + MarkMethod (method); } else AddUnresolveMarker (string.Format ("T: {0}; M: {1}", type, signature)); } + void MarkMethod (MethodDefinition method) + { + Annotations.Mark (method); + Annotations.SetAction (method, MethodAction.Parse); + } + + void MarkMethodIfNotNull (MethodDefinition method) + { + if (method == null) + return; + + MarkMethod (method); + } + void ProcessMethodName (TypeDefinition type, string name) { if (!type.HasMethods) @@ -389,6 +426,141 @@ namespace Mono.Linker.Steps { return sb.ToString (); } + void ProcessEvents (TypeDefinition type, XPathNodeIterator iterator) + { + while (iterator.MoveNext ()) { + string value = GetSignature (iterator.Current); + if (!String.IsNullOrEmpty (value)) + ProcessEventSignature (type, value); + + value = GetAttribute (iterator.Current, "name"); + if (!String.IsNullOrEmpty (value)) + ProcessEventName (type, value); + } + } + + void ProcessEventSignature (TypeDefinition type, string signature) + { + EventDefinition @event = GetEvent (type, signature); + MarkEvent (type, @event, signature); + } + + void MarkEvent (TypeDefinition type, EventDefinition @event, string signature) + { + if (@event != null) { + Annotations.Mark (@event); + + MarkMethod (@event.AddMethod); + MarkMethod (@event.RemoveMethod); + MarkMethodIfNotNull (@event.InvokeMethod); + } else + AddUnresolveMarker (string.Format ("T: {0}; E: {1}", type, signature)); + } + + void ProcessEventName (TypeDefinition type, string name) + { + if (!type.HasEvents) + return; + + foreach (EventDefinition @event in type.Events) + if (@event.Name == name) + MarkEvent (type, @event, name); + } + + static EventDefinition GetEvent (TypeDefinition type, string signature) + { + if (!type.HasEvents) + return null; + + foreach (EventDefinition @event in type.Events) + if (signature == GetEventSignature (@event)) + return @event; + + return null; + } + + static string GetEventSignature (EventDefinition @event) + { + return @event.EventType.FullName + " " + @event.Name; + } + + void ProcessProperties (TypeDefinition type, XPathNodeIterator iterator) + { + while (iterator.MoveNext ()) { + string value = GetSignature (iterator.Current); + if (!String.IsNullOrEmpty (value)) + ProcessPropertySignature (type, value, GetAccessors (iterator.Current)); + + value = GetAttribute (iterator.Current, "name"); + if (!String.IsNullOrEmpty (value)) + ProcessPropertyName (type, value, _accessorsAll); + } + } + + void ProcessPropertySignature (TypeDefinition type, string signature, string[] accessors) + { + PropertyDefinition property = GetProperty (type, signature); + MarkProperty (type, property, signature, accessors); + } + + void MarkProperty (TypeDefinition type, PropertyDefinition property, string signature, string[] accessors) + { + if (property != null) { + Annotations.Mark (property); + + MarkPropertyAccessors (type, property, accessors); + } else + AddUnresolveMarker (string.Format ("T: {0}; P: {1}", type, signature)); + } + + void MarkPropertyAccessors (TypeDefinition type, PropertyDefinition property, string[] accessors) + { + if (Array.IndexOf (accessors, "all") >= 0) { + MarkMethodIfNotNull (property.GetMethod); + MarkMethodIfNotNull (property.SetMethod); + + return; + } + if (property.GetMethod != null + && Array.IndexOf (accessors, "get") >= 0) + MarkMethod (property.GetMethod); + else if (property.GetMethod == null) + AddUnresolveMarker (string.Format ("T: {0}' M: {1} get_{2}", type, property.PropertyType, property.Name)); + + if (property.SetMethod != null + && Array.IndexOf (accessors, "set") >= 0) + MarkMethod (property.SetMethod); + else if (property.SetMethod == null) + AddUnresolveMarker (string.Format ("T: {0}' M: System.Void set_{2} ({1})", type, property.PropertyType, property.Name)); + } + + void ProcessPropertyName (TypeDefinition type, string name, string[] accessors) + { + if (!type.HasProperties) + return; + + foreach (PropertyDefinition property in type.Properties) + if (property.Name == name) + MarkProperty (type, property, name, accessors); + } + + static PropertyDefinition GetProperty (TypeDefinition type, string signature) + { + if (!type.HasProperties) + return null; + + foreach (PropertyDefinition property in type.Properties) + if (signature == GetPropertySignature (property)) + return property; + + return null; + } + + static string GetPropertySignature (PropertyDefinition property) + { + return property.PropertyType.FullName + " " + property.Name; + } + static AssemblyDefinition GetAssembly (LinkContext context, string assemblyName) { AssemblyNameReference reference = AssemblyNameReference.Parse (assemblyName); @@ -433,9 +605,32 @@ namespace Mono.Linker.Steps { return GetAttribute (nav, _fullname); } + static string[] GetAccessors (XPathNavigator nav) + { + string accessorsValue = GetAttribute (nav, _accessors); + + if (accessorsValue != null) { + string[] accessors = accessorsValue.Split ( + _accessorsSep, StringSplitOptions.RemoveEmptyEntries); + + if (accessors.Length > 0) { + for (int i = 0; i < accessors.Length; ++i) + accessors[i] = accessors[i].ToLower (); + + return accessors; + } + } + return _accessorsAll; + } + static string GetAttribute (XPathNavigator nav, string attribute) { return nav.GetAttribute (attribute, _ns); } + + public override string ToString () + { + return "ResolveFromXmlStep: " + _xmlDocumentLocation; + } } } diff --git a/external/linker/linker/Mono.Linker.csproj b/external/linker/linker/Mono.Linker.csproj index 8da37d7d2d..ff826f3a39 100644 --- a/external/linker/linker/Mono.Linker.csproj +++ b/external/linker/linker/Mono.Linker.csproj @@ -10,11 +10,11 @@ targets. --> - true - false + true + false - + Debug AnyCPU @@ -24,8 +24,8 @@ Exe Properties Mono.Linker - monolinker - illink + monolinker + illink v4.6.2 @@ -45,7 +45,7 @@ prompt 4 - + - + @@ -98,14 +98,14 @@ - Configuration=netstandard_Debug - Configuration=netstandard_Release + Configuration=netstandard_Debug + Configuration=netstandard_Release {D68133BD-1E63-496E-9EDE-4FBDBF77B486} Mono.Cecil - Configuration=netstandard_Debug - Configuration=netstandard_Release + Configuration=netstandard_Debug + Configuration=netstandard_Release {63E6915C-7EA4-4D76-AB28-0D7191EEA626} Mono.Cecil.Pdb diff --git a/external/linker/linker/Mono.Linker/Annotations.cs b/external/linker/linker/Mono.Linker/Annotations.cs index bb80fc579d..949128f0bb 100644 --- a/external/linker/linker/Mono.Linker/Annotations.cs +++ b/external/linker/linker/Mono.Linker/Annotations.cs @@ -302,10 +302,13 @@ namespace Mono.Linker { return; KeyValuePair pair = new KeyValuePair (dependency_stack.Count > 0 ? dependency_stack.Peek () : null, o); - writer.WriteStartElement ("edge"); - writer.WriteAttributeString ("b", TokenString (pair.Key)); - writer.WriteAttributeString ("e", TokenString (pair.Value)); - writer.WriteEndElement (); + if (pair.Key != pair.Value) + { + writer.WriteStartElement ("edge"); + writer.WriteAttributeString ("b", TokenString (pair.Key)); + writer.WriteAttributeString ("e", TokenString (pair.Value)); + writer.WriteEndElement (); + } } public void Push (object o) diff --git a/external/linker/linker/Mono.Linker/AssemblyResolver.cs b/external/linker/linker/Mono.Linker/AssemblyResolver.cs index c8351f76fa..b10bb53746 100644 --- a/external/linker/linker/Mono.Linker/AssemblyResolver.cs +++ b/external/linker/linker/Mono.Linker/AssemblyResolver.cs @@ -33,7 +33,7 @@ using Mono.Cecil; namespace Mono.Linker { -#if NET_CORE +#if FEATURE_ILLINK public class AssemblyResolver : DirectoryAssemblyResolver { #else public class AssemblyResolver : BaseAssemblyResolver { diff --git a/external/linker/linker/Mono.Linker/DirectoryAssemblyResolver.cs b/external/linker/linker/Mono.Linker/DirectoryAssemblyResolver.cs index 8ff0b50c2d..416dab71b5 100644 --- a/external/linker/linker/Mono.Linker/DirectoryAssemblyResolver.cs +++ b/external/linker/linker/Mono.Linker/DirectoryAssemblyResolver.cs @@ -5,7 +5,7 @@ using System.IO; using Mono.Collections.Generic; using Mono.Cecil; -#if NET_CORE +#if FEATURE_ILLINK namespace Mono.Linker { public abstract class DirectoryAssemblyResolver : IAssemblyResolver { diff --git a/external/linker/linker/Mono.Linker/Driver.cs b/external/linker/linker/Mono.Linker/Driver.cs index e71436abba..16616b437e 100644 --- a/external/linker/linker/Mono.Linker/Driver.cs +++ b/external/linker/linker/Mono.Linker/Driver.cs @@ -37,7 +37,7 @@ namespace Mono.Linker { public class Driver { -#if NET_CORE +#if FEATURE_ILLINK static readonly string _linker = "IL Linker"; #else static readonly string _linker = "Mono CIL Linker"; @@ -284,7 +284,7 @@ namespace Mono.Linker { Console.WriteLine (_linker); if (msg != null) Console.WriteLine ("Error: " + msg); -#if NET_CORE +#if FEATURE_ILLINK Console.WriteLine ("illink [options] -x|-a|-i file"); #else Console.WriteLine ("monolinker [options] -x|-a|-i file"); diff --git a/external/linker/linker/Mono.Linker/LinkContext.cs b/external/linker/linker/Mono.Linker/LinkContext.cs index 681608a3a6..e61187eb5e 100644 --- a/external/linker/linker/Mono.Linker/LinkContext.cs +++ b/external/linker/linker/Mono.Linker/LinkContext.cs @@ -179,8 +179,8 @@ namespace Mono.Linker { return assembly; } - catch { - throw new AssemblyResolutionException (reference); + catch (Exception e) { + throw new AssemblyResolutionException (reference, e); } } @@ -272,7 +272,7 @@ namespace Mono.Linker { } } - public AssemblyDefinition [] GetAssemblies () + public virtual AssemblyDefinition [] GetAssemblies () { var cache = _resolver.AssemblyCache; AssemblyDefinition [] asms = new AssemblyDefinition [cache.Count]; diff --git a/external/linker/linker/Tests/Extensions/NiceIO.cs b/external/linker/linker/Tests/Extensions/NiceIO.cs index 2bded17f17..69b6f30f4f 100644 --- a/external/linker/linker/Tests/Extensions/NiceIO.cs +++ b/external/linker/linker/Tests/Extensions/NiceIO.cs @@ -1,4 +1,30 @@ -using System; +// The MIT License(MIT) +// ===================== +// +// Copyright © `2015-2017` `Lucas Meijer` +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the “Software”), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. + +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -283,6 +309,11 @@ namespace Mono.Linker.Tests.Extensions return sb.ToString(); } + public static implicit operator string(NPath path) + { + return path.ToString(); + } + static char Slash(SlashMode slashMode) { switch (slashMode) diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/BaseInAssemblyAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/BaseInAssemblyAttribute.cs new file mode 100644 index 0000000000..df1a80a13d --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/BaseInAssemblyAttribute.cs @@ -0,0 +1,5 @@ +namespace Mono.Linker.Tests.Cases.Expectations.Assertions +{ + public abstract class BaseInAssemblyAttribute : BaseExpectedLinkedBehaviorAttribute { + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptBackingFieldAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptBackingFieldAttribute.cs index a4160490a5..b21ce0628d 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptBackingFieldAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptBackingFieldAttribute.cs @@ -1,8 +1,7 @@ using System; -namespace Mono.Linker.Tests.Cases.Expectations.Assertions -{ - [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)] +namespace Mono.Linker.Tests.Cases.Expectations.Assertions { + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Event, AllowMultiple = false, Inherited = false)] public sealed class KeptBackingFieldAttribute : KeptAttribute { } } diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptInterfaceAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptInterfaceAttribute.cs index b6af7dc0f4..9314b47129 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptInterfaceAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptInterfaceAttribute.cs @@ -2,7 +2,7 @@ namespace Mono.Linker.Tests.Cases.Expectations.Assertions { - [AttributeUsage (AttributeTargets.Class, AllowMultiple = true, Inherited = false)] + [AttributeUsage (AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = true, Inherited = false)] public class KeptInterfaceAttribute : KeptAttribute { diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberAttribute.cs index e7b77ef8ba..34cfc5503c 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberAttribute.cs @@ -1,7 +1,7 @@ using System; namespace Mono.Linker.Tests.Cases.Expectations.Assertions { - [AttributeUsage (AttributeTargets.Class | AttributeTargets.Delegate, AllowMultiple = true, Inherited = false)] + [AttributeUsage (AttributeTargets.Class | AttributeTargets.Delegate | AttributeTargets.Struct, AllowMultiple = true, Inherited = false)] public sealed class KeptMemberAttribute : KeptAttribute { public KeptMemberAttribute (string name) diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberInAssemblyAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberInAssemblyAttribute.cs index 3812acb67e..fed2061ea1 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberInAssemblyAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptMemberInAssemblyAttribute.cs @@ -3,7 +3,7 @@ namespace Mono.Linker.Tests.Cases.Expectations.Assertions { [AttributeUsage (AttributeTargets.Class | AttributeTargets.Delegate, AllowMultiple = true, Inherited = false)] - public class KeptMemberInAssemblyAttribute : BaseExpectedLinkedBehaviorAttribute { + public class KeptMemberInAssemblyAttribute : BaseInAssemblyAttribute { public KeptMemberInAssemblyAttribute (string assemblyFileName, Type type, params string [] memberNames) { diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptTypeInAssemblyAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptTypeInAssemblyAttribute.cs index 64b2f9ec91..b5aee13926 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptTypeInAssemblyAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/KeptTypeInAssemblyAttribute.cs @@ -3,8 +3,7 @@ namespace Mono.Linker.Tests.Cases.Expectations.Assertions { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Delegate, AllowMultiple = true, Inherited = false)] - public class KeptTypeInAssemblyAttribute : BaseExpectedLinkedBehaviorAttribute - { + public class KeptTypeInAssemblyAttribute : BaseInAssemblyAttribute { public KeptTypeInAssemblyAttribute (string assemblyFileName, Type type) { if (type == null) diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedForwarderAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedForwarderAttribute.cs new file mode 100644 index 0000000000..645a01bdc9 --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedForwarderAttribute.cs @@ -0,0 +1,15 @@ +using System; +namespace Mono.Linker.Tests.Cases.Expectations.Assertions +{ + [AttributeUsage (AttributeTargets.Class, AllowMultiple = true, Inherited = false)] + public class RemovedForwarderAttribute : BaseInAssemblyAttribute + { + public RemovedForwarderAttribute (string assemblyFileName, string typeName) + { + if (string.IsNullOrEmpty (assemblyFileName)) + throw new ArgumentException ("Value cannot be null or empty.", nameof (assemblyFileName)); + if (string.IsNullOrEmpty (typeName)) + throw new ArgumentException ("Value cannot be null or empty.", nameof (typeName)); + } + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedMemberInAssemblyAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedMemberInAssemblyAttribute.cs index 078c7ac76e..36bc435bfb 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedMemberInAssemblyAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedMemberInAssemblyAttribute.cs @@ -2,7 +2,7 @@ namespace Mono.Linker.Tests.Cases.Expectations.Assertions { [AttributeUsage (AttributeTargets.Class | AttributeTargets.Delegate, AllowMultiple = true, Inherited = false)] - public class RemovedMemberInAssemblyAttribute : BaseExpectedLinkedBehaviorAttribute { + public class RemovedMemberInAssemblyAttribute : BaseInAssemblyAttribute { public RemovedMemberInAssemblyAttribute (string assemblyFileName, Type type, params string [] memberNames) { diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedTypeInAssemblyAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedTypeInAssemblyAttribute.cs index 506e2cdeae..253f5bed20 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedTypeInAssemblyAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/RemovedTypeInAssemblyAttribute.cs @@ -3,7 +3,7 @@ namespace Mono.Linker.Tests.Cases.Expectations.Assertions { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Delegate, AllowMultiple = true, Inherited = false)] - public class RemovedTypeInAssemblyAttribute : BaseExpectedLinkedBehaviorAttribute { + public class RemovedTypeInAssemblyAttribute : BaseInAssemblyAttribute { public RemovedTypeInAssemblyAttribute (string assemblyFileName, Type type) { if (type == null) diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/SkipPeVerifyAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/SkipPeVerifyAttribute.cs new file mode 100644 index 0000000000..eaccabd254 --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Assertions/SkipPeVerifyAttribute.cs @@ -0,0 +1,25 @@ +using System; + +namespace Mono.Linker.Tests.Cases.Expectations.Assertions { + + public enum SkipPeVerifyForToolchian + { + Pedump + } + + [AttributeUsage (AttributeTargets.Class, AllowMultiple = true)] + public class SkipPeVerifyAttribute : BaseExpectedLinkedBehaviorAttribute + { + public SkipPeVerifyAttribute () + { + } + + public SkipPeVerifyAttribute (SkipPeVerifyForToolchian toolchain) + { + } + + public SkipPeVerifyAttribute (string assemblyName) + { + } + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/DefineAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/DefineAttribute.cs new file mode 100644 index 0000000000..14e95fd4d8 --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/DefineAttribute.cs @@ -0,0 +1,12 @@ +using System; + +namespace Mono.Linker.Tests.Cases.Expectations.Metadata { + [AttributeUsage (AttributeTargets.Class, AllowMultiple = true)] + public class DefineAttribute : BaseMetadataAttribute { + public DefineAttribute (string name) + { + if (string.IsNullOrEmpty (name)) + throw new ArgumentException ("Value cannot be null or empty.", nameof (name)); + } + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/IncludeBlacklistStepAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/IncludeBlacklistStepAttribute.cs index 09512704b3..4144abcf65 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/IncludeBlacklistStepAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/IncludeBlacklistStepAttribute.cs @@ -1,8 +1,8 @@ namespace Mono.Linker.Tests.Cases.Expectations.Metadata { public sealed class IncludeBlacklistStepAttribute : BaseMetadataAttribute { - public readonly string Value; + public readonly bool Value; - public IncludeBlacklistStepAttribute (string value) + public IncludeBlacklistStepAttribute (bool value) { Value = value; } diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/CoreLinkAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/KeepTypeForwarderOnlyAssembliesAttribute.cs similarity index 62% rename from external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/CoreLinkAttribute.cs rename to external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/KeepTypeForwarderOnlyAssembliesAttribute.cs index e287d5a565..ef00ca5f5e 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/CoreLinkAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/KeepTypeForwarderOnlyAssembliesAttribute.cs @@ -2,12 +2,11 @@ namespace Mono.Linker.Tests.Cases.Expectations.Metadata { [AttributeUsage (AttributeTargets.Class)] - public class CoreLinkAttribute : BaseMetadataAttribute { - - public CoreLinkAttribute (string value) + public sealed class KeepTypeForwarderOnlyAssembliesAttribute : BaseMetadataAttribute { + public KeepTypeForwarderOnlyAssembliesAttribute (string value) { if (string.IsNullOrEmpty (value)) throw new ArgumentException ("Value cannot be null or empty.", nameof (value)); } } -} \ No newline at end of file +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/NotATestCaseAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/NotATestCaseAttribute.cs index 11cd069c32..1fabca3319 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/NotATestCaseAttribute.cs +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/NotATestCaseAttribute.cs @@ -1,7 +1,7 @@ using System; namespace Mono.Linker.Tests.Cases.Expectations.Metadata { - [AttributeUsage (AttributeTargets.Class)] + [AttributeUsage (AttributeTargets.Class | AttributeTargets.Struct)] public class NotATestCaseAttribute : BaseMetadataAttribute { } } \ No newline at end of file diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupCompileAfterAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupCompileAfterAttribute.cs new file mode 100644 index 0000000000..fa580a2f8d --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupCompileAfterAttribute.cs @@ -0,0 +1,18 @@ +using System; + +namespace Mono.Linker.Tests.Cases.Expectations.Metadata { + ///

+ /// Use to compile an assembly after compiling the main test case executabe + /// + [AttributeUsage (AttributeTargets.Class, AllowMultiple = true)] + public class SetupCompileAfterAttribute : BaseMetadataAttribute { + public SetupCompileAfterAttribute (string outputName, string[] sourceFiles, string[] references = null, string[] defines = null) + { + if (sourceFiles == null) + throw new ArgumentNullException (nameof (sourceFiles)); + + if (string.IsNullOrEmpty (outputName)) + throw new ArgumentException ("Value cannot be null or empty.", nameof (outputName)); + } + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupCompileBeforeAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupCompileBeforeAttribute.cs new file mode 100644 index 0000000000..d9a3bd6589 --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupCompileBeforeAttribute.cs @@ -0,0 +1,18 @@ +using System; + +namespace Mono.Linker.Tests.Cases.Expectations.Metadata { + /// + /// Use to compile an assembly before compiling the main test case executabe + /// + [AttributeUsage (AttributeTargets.Class, AllowMultiple = true)] + public class SetupCompileBeforeAttribute : BaseMetadataAttribute { + public SetupCompileBeforeAttribute (string outputName, string[] sourceFiles, string[] references = null, string[] defines = null, bool addAsReference = true) + { + if (sourceFiles == null) + throw new ArgumentNullException (nameof (sourceFiles)); + + if (string.IsNullOrEmpty (outputName)) + throw new ArgumentException ("Value cannot be null or empty.", nameof (outputName)); + } + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupLinkerActionAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupLinkerActionAttribute.cs new file mode 100644 index 0000000000..d0d68193e8 --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupLinkerActionAttribute.cs @@ -0,0 +1,18 @@ +using System; + +namespace Mono.Linker.Tests.Cases.Expectations.Metadata +{ + [AttributeUsage (AttributeTargets.Class, AllowMultiple = true)] + public class SetupLinkerActionAttribute : BaseMetadataAttribute + { + public SetupLinkerActionAttribute (string action, string assembly) + { + switch (action) { + case "link": case "copy": case "skip": + break; + default: + throw new ArgumentOutOfRangeException (nameof (action)); + } + } + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupLinkerCoreActionAttribute.cs b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupLinkerCoreActionAttribute.cs new file mode 100644 index 0000000000..c60bc59b20 --- /dev/null +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Metadata/SetupLinkerCoreActionAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace Mono.Linker.Tests.Cases.Expectations.Metadata +{ + [AttributeUsage (AttributeTargets.Class, AllowMultiple = false)] + public class SetupLinkerCoreActionAttribute : BaseMetadataAttribute + { + public SetupLinkerCoreActionAttribute (string action) + { + switch (action) { + case "link": + case "copy": + case "skip": + break; + default: + throw new ArgumentOutOfRangeException (nameof (action)); + } + } + } +} diff --git a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Mono.Linker.Tests.Cases.Expectations.csproj b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Mono.Linker.Tests.Cases.Expectations.csproj index 2ae41786a8..5c063734c8 100644 --- a/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Mono.Linker.Tests.Cases.Expectations.csproj +++ b/external/linker/linker/Tests/Mono.Linker.Tests.Cases.Expectations/Mono.Linker.Tests.Cases.Expectations.csproj @@ -37,6 +37,7 @@ + @@ -48,16 +49,23 @@ + - + + + + + + + + $(BaseNuGetRuntimeIdentifier) + win10 win diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/build/Microsoft.Net.Compilers.props b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/build/Microsoft.Net.Compilers.props new file mode 100644 index 0000000000..757d21a4eb --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/build/Microsoft.Net.Compilers.props @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + false + $(MSBuildThisFileDirectory)..\tools\Microsoft.CSharp.Core.targets + $(MSBuildThisFileDirectory)..\tools\Microsoft.VisualBasic.Core.targets + + + + + $(MSBuildThisFileDirectory)..\tools + csc.exe + $(MSBuildThisFileDirectory)..\tools + vbc.exe + + \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id new file mode 100644 index 0000000000..16405b7b6d --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.Build.Tasks.CodeAnalysis.dll.REMOVED.git-id @@ -0,0 +1 @@ +220bd22af6de84fc52d5db71f03c990520d823c4 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CSharp.Core.targets b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CSharp.Core.targets new file mode 100644 index 0000000000..f103eaaeda --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CSharp.Core.targets @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + $(NoWarn);1701;1702 + + + + + $(NoWarn);2008 + + + + + + + + + + + $(AppConfig) + + + $(IntermediateOutputPath)$(TargetName).compile.pdb + + + + + false + + + + + + + + + + true + + + + + + + + + <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> + + + + + \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.CSharp.Scripting.dll b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.CSharp.Scripting.dll new file mode 100644 index 0000000000..26c8511134 Binary files /dev/null and b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.CSharp.Scripting.dll differ diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id new file mode 100644 index 0000000000..a4b3a4b0f7 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.CSharp.dll.REMOVED.git-id @@ -0,0 +1 @@ +f95ba4f8326c450bf58668c9c9c20d3b34a310a0 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id new file mode 100644 index 0000000000..32c1ac233c --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.Scripting.dll.REMOVED.git-id @@ -0,0 +1 @@ +f6a40109489fdfdca476ff07294ff816e80defad \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id new file mode 100644 index 0000000000..b65c2943fa --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.VisualBasic.dll.REMOVED.git-id @@ -0,0 +1 @@ +bc12eda56350e1d2bd2e13340707556a29342980 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.dll.REMOVED.git-id new file mode 100644 index 0000000000..3b14481dd3 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.CodeAnalysis.dll.REMOVED.git-id @@ -0,0 +1 @@ +860ad63f05df210b2711ea4397ffc2cb716da0e6 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.VisualBasic.Core.targets b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.VisualBasic.Core.targets new file mode 100644 index 0000000000..c72c6c1a69 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/Microsoft.VisualBasic.Core.targets @@ -0,0 +1,162 @@ + + + + + + + + + + + + + <_NoWarnings Condition="'$(WarningLevel)' == '0'">true + <_NoWarnings Condition="'$(WarningLevel)' == '1'">false + + + + + $(IntermediateOutputPath)$(TargetName).compile.pdb + + + + + + + + + + + false + + + + + + + + + + true + + + + + + + + <_CoreCompileResourceInputs Remove="@(_CoreCompileResourceInputs)" /> + + + + + \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/System.Collections.Immutable.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/System.Collections.Immutable.dll.REMOVED.git-id new file mode 100644 index 0000000000..f621878df3 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/System.Collections.Immutable.dll.REMOVED.git-id @@ -0,0 +1 @@ +ce6fc0e8d0d43a3e824b4a844fe5eae4667dd428 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/System.Reflection.Metadata.dll.REMOVED.git-id b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/System.Reflection.Metadata.dll.REMOVED.git-id new file mode 100644 index 0000000000..469c933c5d --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/System.Reflection.Metadata.dll.REMOVED.git-id @@ -0,0 +1 @@ +ee68731c052c101cd85d9f4ec976628cf1e224b4 \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/VBCSCompiler.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/VBCSCompiler.exe new file mode 100644 index 0000000000..e225aae63b Binary files /dev/null and b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/VBCSCompiler.exe differ diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/VBCSCompiler.exe.config b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/VBCSCompiler.exe.config new file mode 100644 index 0000000000..b722a3a2a9 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/VBCSCompiler.exe.config @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.exe new file mode 100644 index 0000000000..5278855e69 Binary files /dev/null and b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.exe differ diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.exe.config b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.exe.config new file mode 100644 index 0000000000..4fa345fb5c --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.exe.config @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.rsp b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.rsp new file mode 100644 index 0000000000..be7661d074 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csc.rsp @@ -0,0 +1,46 @@ +# Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +# This file contains command-line options that the C# +# command line compiler (CSC) will process as part +# of every compilation, unless the "/noconfig" option +# is specified. + +# Reference the common Framework libraries +/r:Accessibility.dll +/r:Microsoft.CSharp.dll +/r:System.Configuration.dll +/r:System.Configuration.Install.dll +/r:System.Core.dll +/r:System.Data.dll +/r:System.Data.DataSetExtensions.dll +/r:System.Data.Linq.dll +/r:System.Data.OracleClient.dll +/r:System.Deployment.dll +/r:System.Design.dll +/r:System.DirectoryServices.dll +/r:System.dll +/r:System.Drawing.Design.dll +/r:System.Drawing.dll +/r:System.EnterpriseServices.dll +/r:System.Management.dll +/r:System.Messaging.dll +/r:System.Runtime.Remoting.dll +/r:System.Runtime.Serialization.dll +/r:System.Runtime.Serialization.Formatters.Soap.dll +/r:System.Security.dll +/r:System.ServiceModel.dll +/r:System.ServiceModel.Web.dll +/r:System.ServiceProcess.dll +/r:System.Transactions.dll +/r:System.Web.dll +/r:System.Web.Extensions.Design.dll +/r:System.Web.Extensions.dll +/r:System.Web.Mobile.dll +/r:System.Web.RegularExpressions.dll +/r:System.Web.Services.dll +/r:System.Windows.Forms.dll +/r:System.Workflow.Activities.dll +/r:System.Workflow.ComponentModel.dll +/r:System.Workflow.Runtime.dll +/r:System.Xml.dll +/r:System.Xml.Linq.dll diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.exe b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.exe new file mode 100644 index 0000000000..93b234ebe5 Binary files /dev/null and b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.exe differ diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.exe.config b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.exe.config new file mode 100644 index 0000000000..414e80d3d5 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.exe.config @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.rsp b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.rsp new file mode 100644 index 0000000000..6089f39f42 --- /dev/null +++ b/external/roslyn-binaries/Microsoft.Net.Compilers/Microsoft.Net.Compilers.2.3.2/tools/csi.rsp @@ -0,0 +1,14 @@ +/r:System +/r:System.Core +/r:Microsoft.CSharp +/r:System.ValueTuple.dll +/u:System +/u:System.IO +/u:System.Collections.Generic +/u:System.Console +/u:System.Diagnostics +/u:System.Dynamic +/u:System.Linq +/u:System.Linq.Expressions +/u:System.Text +/u:System.Threading.Tasks \ No newline at end of file diff --git a/mcs/build/common/Consts.cs b/mcs/build/common/Consts.cs index 6d271afd8d..3672b2634e 100644 --- a/mcs/build/common/Consts.cs +++ b/mcs/build/common/Consts.cs @@ -34,7 +34,7 @@ static class Consts // Use these assembly version constants to make code more maintainable. // - public const string MonoVersion = "5.4.0.167"; + public const string MonoVersion = "5.4.0.199"; public const string MonoCompany = "Mono development team"; public const string MonoProduct = "Mono Common Language Infrastructure"; public const string MonoCopyright = "(c) Various Mono authors"; diff --git a/mcs/class/System/Mono.AppleTls/AppleCertificateHelper.cs b/mcs/class/System/Mono.AppleTls/AppleCertificateHelper.cs index d3b29fa272..710433ef07 100644 --- a/mcs/class/System/Mono.AppleTls/AppleCertificateHelper.cs +++ b/mcs/class/System/Mono.AppleTls/AppleCertificateHelper.cs @@ -133,28 +133,28 @@ namespace Mono.AppleTls targetHost = targetHost.Substring (0, pos); } - var policy = SecPolicy.CreateSslPolicy (!serverMode, targetHost); - var trust = new SecTrust (certificates, policy); + using (var policy = SecPolicy.CreateSslPolicy (!serverMode, targetHost)) + using (var trust = new SecTrust (certificates, policy)) { + if (validator.Settings.TrustAnchors != null) { + var status = trust.SetAnchorCertificates (validator.Settings.TrustAnchors); + if (status != SecStatusCode.Success) + throw new InvalidOperationException (status.ToString ()); + trust.SetAnchorCertificatesOnly (false); + } - if (validator.Settings.TrustAnchors != null) { - var status = trust.SetAnchorCertificates (validator.Settings.TrustAnchors); - if (status != SecStatusCode.Success) - throw new InvalidOperationException (status.ToString ()); - trust.SetAnchorCertificatesOnly (false); + if (validator.Settings.CertificateValidationTime != null) { + var status = trust.SetVerifyDate (validator.Settings.CertificateValidationTime.Value); + if (status != SecStatusCode.Success) + throw new InvalidOperationException (status.ToString ()); + } + + var result = trust.Evaluate (); + if (result == SecTrustResult.Unspecified) + return true; + + errors |= MonoSslPolicyErrors.RemoteCertificateChainErrors; + return false; } - - if (validator.Settings.CertificateValidationTime != null) { - var status = trust.SetVerifyDate (validator.Settings.CertificateValidationTime.Value); - if (status != SecStatusCode.Success) - throw new InvalidOperationException (status.ToString ()); - } - - var result = trust.Evaluate (); - if (result == SecTrustResult.Unspecified) - return true; - - errors |= MonoSslPolicyErrors.RemoteCertificateChainErrors; - return false; } } } diff --git a/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs b/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs index 4fa1730df2..2897a7d14a 100644 --- a/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs +++ b/mcs/class/System/Mono.AppleTls/AppleTlsContext.cs @@ -235,32 +235,41 @@ namespace Mono.AppleTls * */ - var trust = GetPeerTrust (!IsServer); - X509CertificateCollection certificates; - - if (trust == null || trust.Count == 0) { - remoteCertificate = null; - if (!IsServer) - throw new TlsException (AlertDescription.CertificateUnknown); - certificates = null; - } else { - if (trust.Count > 1) - Debug ("WARNING: Got multiple certificates in SecTrust!"); - - certificates = new X509CertificateCollection (); - for (int i = 0; i < trust.Count; i++) - certificates.Add (trust [(IntPtr)i].ToX509Certificate ()); - - remoteCertificate = certificates [0]; - Debug ("Got peer trust: {0}", remoteCertificate); - } - bool ok; + SecTrust trust = null; + X509CertificateCollection certificates = null; + try { + trust = GetPeerTrust (!IsServer); + + if (trust == null || trust.Count == 0) { + remoteCertificate = null; + if (!IsServer) + throw new TlsException (AlertDescription.CertificateUnknown); + certificates = null; + } else { + if (trust.Count > 1) + Debug ("WARNING: Got multiple certificates in SecTrust!"); + + certificates = new X509CertificateCollection (); + for (int i = 0; i < trust.Count; i++) + certificates.Add (trust.GetCertificate (i)); + + remoteCertificate = new X509Certificate (certificates [0]); + Debug ("Got peer trust: {0}", remoteCertificate); + } + ok = ValidateCertificate (certificates); } catch (Exception ex) { Debug ("Certificate validation failed: {0}", ex); throw new TlsException (AlertDescription.CertificateUnknown, "Certificate validation threw exception."); + } finally { + if (trust != null) + trust.Dispose (); + if (certificates != null) { + for (int i = 0; i < certificates.Count; i++) + certificates [i].Dispose (); + } } if (!ok) @@ -665,7 +674,7 @@ namespace Mono.AppleTls if (value == IntPtr.Zero) throw new TlsException (AlertDescription.CertificateUnknown); } - return (value == IntPtr.Zero) ? null : new SecTrust (value); + return (value == IntPtr.Zero) ? null : new SecTrust (value, true); } #endregion diff --git a/mcs/class/System/Mono.AppleTls/Trust.cs b/mcs/class/System/Mono.AppleTls/Trust.cs index 33a505043e..3ec3c4dd60 100644 --- a/mcs/class/System/Mono.AppleTls/Trust.cs +++ b/mcs/class/System/Mono.AppleTls/Trust.cs @@ -66,6 +66,8 @@ namespace Mono.AppleTls { foreach (var certificate in certificates) array [i++] = new SecCertificate (certificate); Initialize (array, policy); + for (i = 0; i < array.Length; i++) + array [i].Dispose (); } void Initialize (SecCertificate[] array, SecPolicy policy) @@ -122,6 +124,17 @@ namespace Mono.AppleTls { } } + internal X509Certificate GetCertificate (int index) + { + if (handle == IntPtr.Zero) + throw new ObjectDisposedException ("SecTrust"); + if (index < 0 || index >= Count) + throw new ArgumentOutOfRangeException ("index"); + + var ptr = SecTrustGetCertificateAtIndex (handle, (IntPtr)index); + return new X509Certificate (ptr); + } + [DllImport (AppleTlsContext.SecurityLibrary)] extern static SecStatusCode /* OSStatus */ SecTrustSetAnchorCertificates (IntPtr /* SecTrustRef */ trust, IntPtr /* CFArrayRef */ anchorCertificates); diff --git a/mcs/class/System/ReferenceSources/Win32Exception.cs.REMOVED.git-id b/mcs/class/System/ReferenceSources/Win32Exception.cs.REMOVED.git-id index 2fb7f3e673..35cc287145 100644 --- a/mcs/class/System/ReferenceSources/Win32Exception.cs.REMOVED.git-id +++ b/mcs/class/System/ReferenceSources/Win32Exception.cs.REMOVED.git-id @@ -1 +1 @@ -fe514b868d2ddd7479dee6238a5848350be33611 \ No newline at end of file +83404914b3bd686a8fb10da985249e69631c4de7 \ No newline at end of file diff --git a/mcs/class/System/System.Net/WebConnection.cs b/mcs/class/System/System.Net/WebConnection.cs index e1435f84b6..68c480fa86 100644 --- a/mcs/class/System/System.Net/WebConnection.cs +++ b/mcs/class/System/System.Net/WebConnection.cs @@ -56,7 +56,6 @@ namespace System.Net object socketLock = new object (); IWebConnectionState state; WebExceptionStatus status; - WaitCallback initConn; bool keepAlive; byte [] buffer; EventHandler abortHandler; diff --git a/mcs/class/corlib/System/Delegate.cs b/mcs/class/corlib/System/Delegate.cs index 120991b2f7..48d7860514 100644 --- a/mcs/class/corlib/System/Delegate.cs +++ b/mcs/class/corlib/System/Delegate.cs @@ -499,7 +499,7 @@ namespace System m = Method; - return (m != null ? m.GetHashCode () : GetType ().GetHashCode ()) ^ (m_target != null ? m_target.GetHashCode () : 0); + return (m != null ? m.GetHashCode () : GetType ().GetHashCode ()) ^ RuntimeHelpers.GetHashCode (m_target); } protected virtual MethodInfo GetMethodImpl () diff --git a/mcs/class/corlib/Test/System.Globalization/NumberFormatInfoTest.cs b/mcs/class/corlib/Test/System.Globalization/NumberFormatInfoTest.cs index a195c28f72..dc8bbdd27e 100644 --- a/mcs/class/corlib/Test/System.Globalization/NumberFormatInfoTest.cs +++ b/mcs/class/corlib/Test/System.Globalization/NumberFormatInfoTest.cs @@ -49,9 +49,15 @@ namespace MonoTests.System.Globalization c = CultureInfo.InvariantCulture; Assert.AreEqual (2, c.NumberFormat.CurrencyDecimalDigits, "#3"); + } + [Test] + public void AllCulturesCanParseNegativeNumber () + { + foreach (var c in CultureInfo.GetCultures (CultureTypes.AllCultures)) + { + int.Parse ("-1", c); + } } } } - - diff --git a/mcs/class/corlib/Test/System.Threading.Tasks/TaskTest.cs b/mcs/class/corlib/Test/System.Threading.Tasks/TaskTest.cs index 1cf78170bc..2bc45681ce 100644 --- a/mcs/class/corlib/Test/System.Threading.Tasks/TaskTest.cs +++ b/mcs/class/corlib/Test/System.Threading.Tasks/TaskTest.cs @@ -1258,7 +1258,7 @@ namespace MonoTests.System.Threading.Tasks { var t = Task.Delay (300); Assert.IsTrue (TaskStatus.WaitingForActivation == t.Status || TaskStatus.Running == t.Status, "#1"); - Assert.IsTrue (t.Wait (400), "#2"); + Assert.IsTrue (t.Wait (1200), "#2"); } [Test] diff --git a/mcs/class/lib/monolite-darwin/1050400003/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/Mono.Security.dll.REMOVED.git-id index 32fca8f0b0..1b921cfddd 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/Mono.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/Mono.Security.dll.REMOVED.git-id @@ -1 +1 @@ -10372fbbaaa3df30ee1692ed4ba9d556aa985307 \ No newline at end of file +be9aa05dcf77e3a678e866b6356372647c1cc13c \ No newline at end of file diff --git a/mcs/class/lib/monolite-darwin/1050400003/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/System.Configuration.dll.REMOVED.git-id index 78f69dee6d..3f65b53824 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/System.Configuration.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/System.Configuration.dll.REMOVED.git-id @@ -1 +1 @@ -2572908bbda7335a1fe58da5ee20de4af2f4a08d \ No newline at end of file +3af123b023a664cae8e867980a3fac5e1f10be4d \ No newline at end of file diff --git a/mcs/class/lib/monolite-darwin/1050400003/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/System.Numerics.dll.REMOVED.git-id index fb9502fed5..9c2a97a1a5 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/System.Numerics.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/System.Numerics.dll.REMOVED.git-id @@ -1 +1 @@ -80b380eeedebaad80b103098ccab73e8b25db610 \ No newline at end of file +91b45d039180bf17f0320233e15df3127ca1fcd6 \ No newline at end of file diff --git a/mcs/class/lib/monolite-darwin/1050400003/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/System.Security.dll.REMOVED.git-id index 4044e01bf9..87d953065d 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/System.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/System.Security.dll.REMOVED.git-id @@ -1 +1 @@ -60e047ccaeb1b41abb41b09e6379da97e0f1cfbc \ No newline at end of file +1c2d90a445f904d7931338651b4eb30c2f90556c \ No newline at end of file diff --git a/mcs/class/lib/monolite-darwin/1050400003/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/System.Xml.dll.REMOVED.git-id index e60eeacf14..97a11c76af 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/System.Xml.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/System.Xml.dll.REMOVED.git-id @@ -1 +1 @@ -8fbf87281f9d4c4e6c8ae070ad256bc3900957af \ No newline at end of file +4561c1a91655dbff891faed14271cf5326d69171 \ No newline at end of file diff --git a/mcs/class/lib/monolite-darwin/1050400003/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/System.dll.REMOVED.git-id index 6f25a8969d..0911ab55b0 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/System.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/System.dll.REMOVED.git-id @@ -1 +1 @@ -5191dd468774f918ff5181ff7f4565f7c29a7ab5 \ No newline at end of file +909321fcb81b10103586630bae2a388b74894f4e \ No newline at end of file diff --git a/mcs/class/lib/monolite-darwin/1050400003/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/mcs.exe.REMOVED.git-id index c46470a345..0da109c102 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/mcs.exe.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/mcs.exe.REMOVED.git-id @@ -1 +1 @@ -c44e32c353bd140e9905c9cd07830909994a8023 \ No newline at end of file +8ef5fe00834d2790dd279a4e3152ed7d3b2cf042 \ No newline at end of file diff --git a/mcs/class/lib/monolite-darwin/1050400003/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-darwin/1050400003/mscorlib.dll.REMOVED.git-id index ad048f8e54..827e8423ed 100644 --- a/mcs/class/lib/monolite-darwin/1050400003/mscorlib.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-darwin/1050400003/mscorlib.dll.REMOVED.git-id @@ -1 +1 @@ -001965b608d44cc7b030fa2a7b4b87e867b310d7 \ No newline at end of file +1c9b11fa10eb41cba446db688ad5f32157c7c936 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/1050400003/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/1050400003/Mono.Security.dll.REMOVED.git-id index a0d84d0646..f998cdbaf9 100644 --- a/mcs/class/lib/monolite-linux/1050400003/Mono.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-linux/1050400003/Mono.Security.dll.REMOVED.git-id @@ -1 +1 @@ -ac6b645d3c086ee485afb35b3b38824a74af56a4 \ No newline at end of file +949647d93cf97e4425af624028fe259adf0cadc7 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/1050400003/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/1050400003/System.Configuration.dll.REMOVED.git-id index df5def4cff..e460fb6a70 100644 --- a/mcs/class/lib/monolite-linux/1050400003/System.Configuration.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-linux/1050400003/System.Configuration.dll.REMOVED.git-id @@ -1 +1 @@ -eeb0917fef6a5f871e589bd7ae4562e91ff2da4a \ No newline at end of file +c68056663022971dfea97db6fbb1305193515e0f \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/1050400003/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/1050400003/System.Numerics.dll.REMOVED.git-id index 151db27319..3399966ee1 100644 --- a/mcs/class/lib/monolite-linux/1050400003/System.Numerics.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-linux/1050400003/System.Numerics.dll.REMOVED.git-id @@ -1 +1 @@ -ac0bb14072cc31e58b92cf367da7804001237629 \ No newline at end of file +5b606e131c5591dc6a772f44ffb045ffb6bf72a9 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/1050400003/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/1050400003/System.Security.dll.REMOVED.git-id index 01957eb1ee..d980fa270e 100644 --- a/mcs/class/lib/monolite-linux/1050400003/System.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-linux/1050400003/System.Security.dll.REMOVED.git-id @@ -1 +1 @@ -702d60cc4781b6d8d40f245cebbf725f4d7a4ba7 \ No newline at end of file +3085670584ff3c0cb27fc441778ac7203a549369 \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/1050400003/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/1050400003/System.Xml.dll.REMOVED.git-id index f35b43b789..3523845bd1 100644 --- a/mcs/class/lib/monolite-linux/1050400003/System.Xml.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-linux/1050400003/System.Xml.dll.REMOVED.git-id @@ -1 +1 @@ -b78b085d0b09ab83c4d7692d1a7f10a4344f9360 \ No newline at end of file +7e596014ea1f6802c2a3c1e42158d1b67dd9639c \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/1050400003/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/1050400003/System.dll.REMOVED.git-id index 0d60fb4a20..1630cc4b50 100644 --- a/mcs/class/lib/monolite-linux/1050400003/System.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-linux/1050400003/System.dll.REMOVED.git-id @@ -1 +1 @@ -324abc41aeef6a99c189e20e9ee3a5211accb9c3 \ No newline at end of file +b9708b84891d7783816a2c8e0948b1e0d760299b \ No newline at end of file diff --git a/mcs/class/lib/monolite-linux/1050400003/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-linux/1050400003/mscorlib.dll.REMOVED.git-id index 9dd59efb3c..b53221059b 100644 --- a/mcs/class/lib/monolite-linux/1050400003/mscorlib.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-linux/1050400003/mscorlib.dll.REMOVED.git-id @@ -1 +1 @@ -ab7b940ff32a4decf4e0bdab71d4e4bb8406493c \ No newline at end of file +f0a5cf9baa7a06afaf0c41a2578d0767a386332b \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/Mono.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/Mono.Security.dll.REMOVED.git-id index 4dad22eed5..e5c4ddf4a1 100644 --- a/mcs/class/lib/monolite-win32/1050400003/Mono.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/Mono.Security.dll.REMOVED.git-id @@ -1 +1 @@ -d19b0a3a5185282ab9c854c4f2728f0ca8b9194e \ No newline at end of file +7b26d518a6ed18bf35d5efbfd6ba91a9a961cb60 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/System.Configuration.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/System.Configuration.dll.REMOVED.git-id index e3aeb11d30..b1eb5de477 100644 --- a/mcs/class/lib/monolite-win32/1050400003/System.Configuration.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/System.Configuration.dll.REMOVED.git-id @@ -1 +1 @@ -25ba8e25830502a22c3c2941afc44102aa22ea2e \ No newline at end of file +25c0a41aa61e73c95d26f94ade64cc0fb31402b5 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/System.Numerics.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/System.Numerics.dll.REMOVED.git-id index 49ed54707c..8b4f9f0ad9 100644 --- a/mcs/class/lib/monolite-win32/1050400003/System.Numerics.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/System.Numerics.dll.REMOVED.git-id @@ -1 +1 @@ -713e1de2e8fdf233ebe32af8b9df167604004786 \ No newline at end of file +0511e6c8fd04f83753543eb2f97e7ed6a55f156b \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/System.Security.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/System.Security.dll.REMOVED.git-id index 7a0d95006a..94c70ada89 100644 --- a/mcs/class/lib/monolite-win32/1050400003/System.Security.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/System.Security.dll.REMOVED.git-id @@ -1 +1 @@ -180aee3304c58b9dea2cf4d1818e7f354578391b \ No newline at end of file +80f4d35af487244016901a92c9ea9335b44a0cde \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/System.Xml.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/System.Xml.dll.REMOVED.git-id index 90a577b036..53528c2db8 100644 --- a/mcs/class/lib/monolite-win32/1050400003/System.Xml.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/System.Xml.dll.REMOVED.git-id @@ -1 +1 @@ -ea83a4108e1288d3a21593afa17fca126fb4c96b \ No newline at end of file +e25627ab12f30575004c4a2ee0c8a3aa0df8664f \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/System.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/System.dll.REMOVED.git-id index 6ee4a36bf7..768c3269d8 100644 --- a/mcs/class/lib/monolite-win32/1050400003/System.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/System.dll.REMOVED.git-id @@ -1 +1 @@ -2f774c0a9e9d4b8cbc243a766405a029d910c156 \ No newline at end of file +485153514f4d6e3e0a7f6f79208f9991491d1568 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/mcs.exe.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/mcs.exe.REMOVED.git-id index 3fbca7fb84..65227d7aa8 100644 --- a/mcs/class/lib/monolite-win32/1050400003/mcs.exe.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/mcs.exe.REMOVED.git-id @@ -1 +1 @@ -0553766d12c7709207981b4b76fe6a1e603fb117 \ No newline at end of file +db405ecae016a720f714aa2b160253add697d737 \ No newline at end of file diff --git a/mcs/class/lib/monolite-win32/1050400003/mscorlib.dll.REMOVED.git-id b/mcs/class/lib/monolite-win32/1050400003/mscorlib.dll.REMOVED.git-id index 163a89d724..cb40c87eab 100644 --- a/mcs/class/lib/monolite-win32/1050400003/mscorlib.dll.REMOVED.git-id +++ b/mcs/class/lib/monolite-win32/1050400003/mscorlib.dll.REMOVED.git-id @@ -1 +1 @@ -cf922eb520445873324239eb54282a8e37b0f456 \ No newline at end of file +da5d03672b0a421a04a4c880c1f50ea24f5d6035 \ No newline at end of file diff --git a/mcs/tools/mono-api-html/ClassComparer.cs b/mcs/tools/mono-api-html/ClassComparer.cs index f6cf940c9e..721baf1194 100644 --- a/mcs/tools/mono-api-html/ClassComparer.cs +++ b/mcs/tools/mono-api-html/ClassComparer.cs @@ -252,7 +252,12 @@ namespace Xamarin.ApiDiff { public override void Removed (XElement source) { - Output.Write ("

Removed Type {0}.{1}

", State.Namespace, GetTypeName (source)); + string name = State.Namespace + "." + GetTypeName (source); + + if (State.IgnoreRemoved.Any (re => re.IsMatch (name))) + return; + + Output.Write ("

Removed Type {0}

", name); } public virtual string GetTypeName (XElement type) diff --git a/mcs/tools/mono-api-html/NamespaceComparer.cs b/mcs/tools/mono-api-html/NamespaceComparer.cs index 063e34ecbf..bc369d1906 100644 --- a/mcs/tools/mono-api-html/NamespaceComparer.cs +++ b/mcs/tools/mono-api-html/NamespaceComparer.cs @@ -91,6 +91,10 @@ namespace Xamarin.ApiDiff { public override void Removed (XElement source) { var name = source.Attribute ("name").Value; + + if (State.IgnoreRemoved.Any (re => re.IsMatch (name))) + return; + Output.WriteLine ("
", name); Output.WriteLine ("

Removed Namespace {0}

", name); Output.WriteLine (); diff --git a/mono/metadata/culture-info-tables.h.REMOVED.git-id b/mono/metadata/culture-info-tables.h.REMOVED.git-id index 7cad45118e..4ec27ff69b 100644 --- a/mono/metadata/culture-info-tables.h.REMOVED.git-id +++ b/mono/metadata/culture-info-tables.h.REMOVED.git-id @@ -1 +1 @@ -4d8cab37139d108d86dc723fcd8c0eb72b798b86 \ No newline at end of file +15ee88d5ccbf6f966af4f5bb8825d3f2b2d0f2d3 \ No newline at end of file diff --git a/mono/metadata/marshal.c.REMOVED.git-id b/mono/metadata/marshal.c.REMOVED.git-id index 23e0d8e06e..a92b8267fb 100644 --- a/mono/metadata/marshal.c.REMOVED.git-id +++ b/mono/metadata/marshal.c.REMOVED.git-id @@ -1 +1 @@ -bfa88495d01485424d3d37ffbecf95e065015f69 \ No newline at end of file +3454e9c554e9c6e4c46290d11adfb765d1b6ca06 \ No newline at end of file diff --git a/mono/metadata/object-internals.h b/mono/metadata/object-internals.h index 45dd875817..18a491ac0b 100644 --- a/mono/metadata/object-internals.h +++ b/mono/metadata/object-internals.h @@ -620,6 +620,7 @@ typedef struct { gboolean (*mono_current_thread_has_handle_block_guard) (void); gboolean (*mono_above_abort_threshold) (void); void (*mono_clear_abort_threshold) (void); + void (*mono_reraise_exception) (MonoException *ex); } MonoRuntimeExceptionHandlingCallbacks; MONO_COLD void mono_set_pending_exception (MonoException *exc); diff --git a/mono/metadata/object.c.REMOVED.git-id b/mono/metadata/object.c.REMOVED.git-id index 21454da551..317cc10fa5 100644 --- a/mono/metadata/object.c.REMOVED.git-id +++ b/mono/metadata/object.c.REMOVED.git-id @@ -1 +1 @@ -3f7aff0aa74fee6492b3cc732d3844f2387dc8fc \ No newline at end of file +d76bdb5dd624c08405fa3638cf11bdafb1ec5ef8 \ No newline at end of file diff --git a/mono/metadata/object.h b/mono/metadata/object.h index c439fda2e8..0454f86d45 100644 --- a/mono/metadata/object.h +++ b/mono/metadata/object.h @@ -243,6 +243,9 @@ mono_monitor_exit (MonoObject *obj); MONO_API void mono_raise_exception (MonoException *ex); +MONO_API void +mono_reraise_exception (MonoException *ex); + MONO_RT_EXTERNAL_ONLY MONO_API void mono_runtime_object_init (MonoObject *this_obj); diff --git a/mono/metadata/profiler.c b/mono/metadata/profiler.c index 4b81e2ebd9..c8484f9fac 100644 --- a/mono/metadata/profiler.c +++ b/mono/metadata/profiler.c @@ -897,7 +897,10 @@ mono_profiler_shutdown (void) prof->shutdown_callback (prof->profiler); } - mono_profiler_set_events ((MonoProfileFlags)0); + /* Clear all events */ + for (prof = prof_list; prof; prof = prof->next) + prof->events = (MonoProfileFlags)0; + mono_profiler_events = (MonoProfileFlags)0; } /** diff --git a/mono/metadata/threadpool-worker-default.c b/mono/metadata/threadpool-worker-default.c index 6c851db737..ad14450c15 100644 --- a/mono/metadata/threadpool-worker-default.c +++ b/mono/metadata/threadpool-worker-default.c @@ -387,7 +387,7 @@ worker_park (void) gboolean timeout = FALSE; gboolean interrupted = FALSE; - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker parking", mono_native_thread_id_get ()); + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] worker parking", mono_native_thread_id_get ()); mono_coop_mutex_lock (&worker.parked_threads_lock); @@ -430,7 +430,7 @@ done: mono_coop_mutex_unlock (&worker.parked_threads_lock); - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker unparking, timeout? %s interrupted? %s", + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] worker unparking, timeout? %s interrupted? %s", mono_native_thread_id_get (), timeout ? "yes" : "no", interrupted ? "yes" : "no"); return timeout; @@ -461,7 +461,7 @@ worker_thread (gpointer unused) MonoInternalThread *thread; ThreadPoolWorkerCounter counter; - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker starting", mono_native_thread_id_get ()); + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] worker starting", mono_native_thread_id_get ()); if (!mono_refcount_tryinc (&worker)) return 0; @@ -498,7 +498,7 @@ worker_thread (gpointer unused) counter._.working --; }); - mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_THREADPOOL, "[%p] worker finishing", mono_native_thread_id_get ()); + mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_THREADPOOL, "[%p] worker finishing", mono_native_thread_id_get ()); mono_refcount_dec (&worker); diff --git a/mono/metadata/threads.c.REMOVED.git-id b/mono/metadata/threads.c.REMOVED.git-id index 75116ca851..3dd95d6b45 100644 --- a/mono/metadata/threads.c.REMOVED.git-id +++ b/mono/metadata/threads.c.REMOVED.git-id @@ -1 +1 @@ -6f1a34e2dfc46b18eea5a8d7131ff418a934bcba \ No newline at end of file +a1727456be14eabc478207fe64c45ccc6d2f3ece \ No newline at end of file diff --git a/mono/metadata/w32error-unix.c b/mono/metadata/w32error-unix.c index df41473dfe..d25681126a 100644 --- a/mono/metadata/w32error-unix.c +++ b/mono/metadata/w32error-unix.c @@ -66,6 +66,9 @@ mono_w32error_unix_to_win32 (guint32 error) case EINTR: return ERROR_IO_PENDING; /* best match I could find */ case EPIPE: return ERROR_WRITE_FAULT; case ELOOP: return ERROR_CANT_RESOLVE_FILENAME; +#ifdef ENODEV + case ENODEV: return ERROR_DEV_NOT_EXIST; +#endif default: g_error ("%s: unknown error (%d) \"%s\"", __FILE__, error, g_strerror (error)); diff --git a/mono/metadata/w32error.h b/mono/metadata/w32error.h index 439bdd81a2..328b6731b3 100644 --- a/mono/metadata/w32error.h +++ b/mono/metadata/w32error.h @@ -31,6 +31,7 @@ #define ERROR_LOCK_VIOLATION 33 #define ERROR_HANDLE_DISK_FULL 39 #define ERROR_NOT_SUPPORTED 50 +#define ERROR_DEV_NOT_EXIST 55 #define ERROR_FILE_EXISTS 80 #define ERROR_CANNOT_MAKE 82 #define ERROR_INVALID_PARAMETER 87 diff --git a/mono/mini/aot-runtime.c.REMOVED.git-id b/mono/mini/aot-runtime.c.REMOVED.git-id index 55f0eda40c..a95f585bda 100644 --- a/mono/mini/aot-runtime.c.REMOVED.git-id +++ b/mono/mini/aot-runtime.c.REMOVED.git-id @@ -1 +1 @@ -a93776da15a6b4f6a3a024ab68856eb9cfdb8044 \ No newline at end of file +4038955ec47eec0c44ded4c9d1ed24aae851715a \ No newline at end of file diff --git a/mono/mini/cpu-amd64.md b/mono/mini/cpu-amd64.md index f1dfac557b..c8fc3a8307 100755 --- a/mono/mini/cpu-amd64.md +++ b/mono/mini/cpu-amd64.md @@ -99,8 +99,8 @@ long_min_un: dest:i src1:i src2:i len:16 clob:1 long_max: dest:i src1:i src2:i len:16 clob:1 long_max_un: dest:i src1:i src2:i len:16 clob:1 -throw: src1:i len:18 -rethrow: src1:i len:18 +throw: src1:i len:24 +rethrow: src1:i len:24 start_handler: len:16 endfinally: len:9 endfilter: src1:a len:9 diff --git a/mono/mini/mini-amd64.c.REMOVED.git-id b/mono/mini/mini-amd64.c.REMOVED.git-id index fac9ff5f97..a805280378 100644 --- a/mono/mini/mini-amd64.c.REMOVED.git-id +++ b/mono/mini/mini-amd64.c.REMOVED.git-id @@ -1 +1 @@ -2978af64ecb07220ee87c0e7a8af7afb8f30c7f7 \ No newline at end of file +3b21e414e96f273200213bd72eebbd0ff16b511c \ No newline at end of file diff --git a/mono/mini/mini-exceptions.c b/mono/mini/mini-exceptions.c index 0172baecd5..573e8ef7b6 100644 --- a/mono/mini/mini-exceptions.c +++ b/mono/mini/mini-exceptions.c @@ -236,10 +236,13 @@ mono_exceptions_init (void) cbs.mono_walk_stack_with_state = mono_walk_stack_with_state; - if (mono_llvm_only) + if (mono_llvm_only) { cbs.mono_raise_exception = mono_llvm_raise_exception; - else + cbs.mono_reraise_exception = mono_llvm_reraise_exception; + } else { cbs.mono_raise_exception = (void (*)(MonoException *))mono_get_throw_exception (); + cbs.mono_reraise_exception = (void (*)(MonoException *))mono_get_rethrow_exception (); + } cbs.mono_raise_exception_with_ctx = mono_raise_exception_with_ctx; cbs.mono_exception_walk_trace = mono_exception_walk_trace; cbs.mono_install_handler_block_guard = mono_install_handler_block_guard; @@ -3243,6 +3246,12 @@ mono_llvm_raise_exception (MonoException *e) mono_llvm_throw_exception ((MonoObject*)e); } +void +mono_llvm_reraise_exception (MonoException *e) +{ + mono_llvm_rethrow_exception ((MonoObject*)e); +} + void mono_llvm_throw_corlib_exception (guint32 ex_token_index) { diff --git a/mono/mini/mini-trampolines.c b/mono/mini/mini-trampolines.c index 3ef30208cf..31b1d69f4c 100644 --- a/mono/mini/mini-trampolines.c +++ b/mono/mini/mini-trampolines.c @@ -567,6 +567,10 @@ common_call_trampoline (mgreg_t *regs, guint8 *code, MonoMethod *m, MonoVTable * vtable_slot = mini_resolve_imt_method (vt, vtable_slot, imt_method, &impl_method, &addr, &need_rgctx_tramp, &variant_iface, error); return_val_if_nok (error, NULL); + /* We must handle magic interfaces on rank 1 arrays of ref types as if they were variant */ + if (!variant_iface && vt->klass->rank == 1 && !vt->klass->element_class->valuetype && imt_method->klass->is_array_special_interface) + variant_iface = imt_method; + /* This is the vcall slot which gets called through the IMT trampoline */ vtable_slot_to_patch = vtable_slot; diff --git a/mono/mini/mini.h.REMOVED.git-id b/mono/mini/mini.h.REMOVED.git-id index 429be70c4c..125a0ddd9c 100644 --- a/mono/mini/mini.h.REMOVED.git-id +++ b/mono/mini/mini.h.REMOVED.git-id @@ -1 +1 @@ -1fcb2f1d892789f35101633f0ec5c7a9f9498535 \ No newline at end of file +b1cb8790d0d87c75869590dec3c70536c9f81e43 \ No newline at end of file diff --git a/mono/mini/tramp-amd64.c b/mono/mini/tramp-amd64.c index 634203bc2e..d3f3fc3419 100644 --- a/mono/mini/tramp-amd64.c +++ b/mono/mini/tramp-amd64.c @@ -144,6 +144,7 @@ mono_arch_patch_callsite (guint8 *method_start, guint8 *orig_code, guint8 *addr) if (((code [-13] == 0x49) && (code [-12] == 0xbb)) || (code [-5] == 0xe8)) { if (code [-5] != 0xe8) { if (can_write) { + g_assert ((guint64)(orig_code - 11) % 8 == 0); InterlockedExchangePointer ((gpointer*)(orig_code - 11), addr); VALGRIND_DISCARD_TRANSLATIONS (orig_code - 11, sizeof (gpointer)); } diff --git a/mono/mini/version.h b/mono/mini/version.h index d5e2b1ca06..3e68d6b940 100644 --- a/mono/mini/version.h +++ b/mono/mini/version.h @@ -1 +1 @@ -#define FULL_VERSION "explicit/6b8abfe" +#define FULL_VERSION "explicit/7d78877" diff --git a/mono/tests/Makefile.am b/mono/tests/Makefile.am index 0480225a0f..a4bdf54274 100755 --- a/mono/tests/Makefile.am +++ b/mono/tests/Makefile.am @@ -303,6 +303,7 @@ TESTS_CS_SRC= \ delegate-async-exit.cs \ delegate-delegate-exit.cs \ delegate-exit.cs \ + delegate-disposed-hashcode.cs \ finalizer-abort.cs \ finalizer-exception.cs \ finalizer-exit.cs \ @@ -512,7 +513,9 @@ TESTS_CS_SRC= \ bug-46661.cs \ w32message.cs \ runtime-invoke.gen.cs \ - imt_big_iface_test.cs + imt_big_iface_test.cs \ + bug-58782-plain-throw.cs \ + bug-58782-capture-and-throw.cs if AMD64 TESTS_CS_SRC += async-exc-compilation.cs finally_guard.cs finally_block_ending_in_dead_bb.cs @@ -648,9 +651,15 @@ TESTS_GSHARED_SRC = \ bug-1147.cs \ generic-type-builder.2.cs +PLATFORM_DISABLED_TESTS= + +if HOST_WIN32 +PLATFORM_DISABLED_TESTS += bug-58782-plain-throw.exe bug-58782-capture-and-throw.exe +endif + if AMD64 # #651684 -PLATFORM_DISABLED_TESTS = finally_guard.exe +PLATFORM_DISABLED_TESTS += finally_guard.exe if HOST_WIN32 PLATFORM_DISABLED_TESTS += w32message.exe @@ -661,7 +670,7 @@ endif if X86 if HOST_WIN32 -PLATFORM_DISABLED_TESTS=async-exc-compilation.exe finally_guard.exe finally_block_ending_in_dead_bb.exe \ +PLATFORM_DISABLED_TESTS += async-exc-compilation.exe finally_guard.exe finally_block_ending_in_dead_bb.exe \ bug-18026.exe monitor.exe threadpool-exceptions5.exe process-unref-race.exe w32message.exe \ unhandled-exception-1.exe unhandled-exception-2.exe unhandled-exception-3.exe unhandled-exception-4.exe \ unhandled-exception-5.exe unhandled-exception-6.exe unhandled-exception-7.exe unhandled-exception-8.exe @@ -671,12 +680,12 @@ endif if POWERPC # bug #71274 -PLATFORM_DISABLED_TESTS=finalizer-abort.exe finalizer-exception.exe finalizer-exit.exe +PLATFORM_DISABLED_TESTS += finalizer-abort.exe finalizer-exception.exe finalizer-exit.exe endif if POWERPC64 # FIXME: These tests hang/fail for unknown reasons -PLATFORM_DISABLED_TESTS=monitor.exe threadpool-exceptions5.exe appdomain-thread-abort.exe appdomain-unload.exe \ +PLATFORM_DISABLED_TESTS += monitor.exe threadpool-exceptions5.exe appdomain-thread-abort.exe appdomain-unload.exe \ pinvoke2.exe pinvoke3.exe pinvoke11.exe threadpool-exceptions7.exe winx64structs.exe bug-10127.exe pinvoke_ppcc.exe \ pinvoke_ppcs.exe pinvoke_ppci.exe pinvoke_ppcf.exe pinvoke_ppcd.exe abort-cctor.exe load-exceptions.exe \ sgen-domain-unload-2.exe sgen-weakref-stress.exe sgen-cementing-stress.exe sgen-new-threads-dont-join-stw.exe \ @@ -684,7 +693,7 @@ PLATFORM_DISABLED_TESTS=monitor.exe threadpool-exceptions5.exe appdomain-thread- endif if ARM -PLATFORM_DISABLED_TESTS=filter-stack.exe +PLATFORM_DISABLED_TESTS += filter-stack.exe INTERP_DISABLED_TESTS_PLATFORM=finalizer-exception.exe main-returns-abort-resetabort.exe block_guard_restore_aligment_on_exit.exe \ delegate-exit.exe delegate-exit.exe delegate-delegate-exit.exe delegate-async-exit.exe delegate3.exe delegate1.exe endif @@ -695,11 +704,11 @@ endif if MIPS # monitor.exe is racy -PLATFORM_DISABLED_TESTS=filter-stack.exe monitor.exe +PLATFORM_DISABLED_TESTS += filter-stack.exe monitor.exe endif if S390X -PLATFORM_DISABLED_TESTS=dynamic-method-resurrection.exe +PLATFORM_DISABLED_TESTS += dynamic-method-resurrection.exe #PLATFORM_DISABLED_TESTS=dynamic-method-resurrection.exe exception17.exe PLATFORM_DISABLED_TESTS += \ @@ -758,7 +767,9 @@ PROFILE_DISABLED_TESTS += \ marshal8.exe \ pinvoke-2.2.exe \ pinvoke3.exe \ - thunks.exe + thunks.exe \ + bug-58782-plain-throw.exe \ + bug-58782-capture-and-throw.exe # Tests which load assemblies which are not # in the testing_aot_full profile @@ -959,6 +970,8 @@ INTERP_DISABLED_TESTS = \ bug-46661.exe \ bug-47295.exe \ bug-48015.exe \ + bug-58782-plain-throw.exe \ + bug-58782-capture-and-throw.exe \ bug-544446.exe \ bug-685908.exe \ bug-80307.exe \ @@ -1692,7 +1705,8 @@ test-unhandled-exception: unhandled-exception-test-runner.2.exe safehandle.2.exe winx64structs.exe thunks.exe pinvoke3.exe pinvoke2.exe pinvoke-2.2.exe pinvoke17.exe pinvoke13.exe \ pinvoke11.exe pinvoke_ppcs.exe pinvoke_ppci.exe pinvoke_ppcf.exe pinvoke_ppcd.exe pinvoke_ppcc.exe pinvoke.exe \ - marshalbool.exe marshal9.exe marshal5.exe marshal.exe handleref.exe cominterop.exe bug-Xamarin-5278.exe: libtest.la + marshalbool.exe marshal9.exe marshal5.exe marshal.exe handleref.exe cominterop.exe bug-Xamarin-5278.exe \ + bug-58782-plain-throw.exe bug-58782-capture-and-throw.exe: libtest.la event-get.2.exe$(PLATFORM_AOT_SUFFIX): event-il.exe$(PLATFORM_AOT_SUFFIX) event-get.2.exe: event-il.exe diff --git a/mono/tests/Makefile.in.REMOVED.git-id b/mono/tests/Makefile.in.REMOVED.git-id index 6b54baee44..aa283b9bed 100644 --- a/mono/tests/Makefile.in.REMOVED.git-id +++ b/mono/tests/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -8abfd927aa0f5c3b75b05ef90786aa160b932e5e \ No newline at end of file +44390123db5c08fc0a14507c0e98641dd1f51915 \ No newline at end of file diff --git a/mono/tests/bug-58782-capture-and-throw.cs b/mono/tests/bug-58782-capture-and-throw.cs new file mode 100644 index 0000000000..9a917eea49 --- /dev/null +++ b/mono/tests/bug-58782-capture-and-throw.cs @@ -0,0 +1,55 @@ +using System; +using System.Runtime.InteropServices; + +class Driver +{ + [DllImport ("libtest")] + static extern void mono_test_native_to_managed_exception_rethrow (Action action); + + [DllImport ("libc")] + static extern void _exit (int exitCode); + + static int Main (string[] args) + { + AppDomain.CurrentDomain.UnhandledException += (sender, exception_args) => + { + CustomException exc = exception_args.ExceptionObject as CustomException; + if (exc == null) { + Console.WriteLine ($"FAILED - Unknown exception: {exception_args.ExceptionObject}"); + _exit (1); + } + + Console.WriteLine (exc.StackTrace); + if (string.IsNullOrEmpty (exc.StackTrace)) { + Console.WriteLine ("FAILED - StackTrace is null for unhandled exception."); + _exit (2); + } else { + Console.WriteLine ("SUCCESS - StackTrace is not null for unhandled exception."); + _exit (0); + } + }; + + mono_test_native_to_managed_exception_rethrow (CaptureAndThrow); + Console.WriteLine ("Should have exited in the UnhandledException event handler."); + return 2; + } + + static void CaptureAndThrow () + { + try { + Throw (); + } catch (Exception e) { + System.Runtime.ExceptionServices.ExceptionDispatchInfo.Capture (e).Throw (); + } + } + + static void Throw () + { + throw new CustomException ("C"); + } + + class CustomException : Exception + { + public CustomException(string s) : base(s) {} + } +} \ No newline at end of file diff --git a/mono/tests/bug-58782-plain-throw.cs b/mono/tests/bug-58782-plain-throw.cs new file mode 100644 index 0000000000..72ce01cb16 --- /dev/null +++ b/mono/tests/bug-58782-plain-throw.cs @@ -0,0 +1,51 @@ +using System; +using System.Runtime.InteropServices; + +class Driver +{ + [DllImport ("libtest")] + static extern void mono_test_native_to_managed_exception_rethrow (Action action); + + [DllImport ("libc")] + static extern void _exit (int exitCode); + + static int Main (string[] args) + { + AppDomain.CurrentDomain.UnhandledException += (sender, exception_args) => + { + CustomException exc = exception_args.ExceptionObject as CustomException; + if (exc == null) { + Console.WriteLine ($"FAILED - Unknown exception: {exception_args.ExceptionObject}"); + _exit (1); + } + + Console.WriteLine (exc.StackTrace); + if (string.IsNullOrEmpty (exc.StackTrace)) { + Console.WriteLine ("FAILED - StackTrace is null for unhandled exception."); + _exit (2); + } else { + Console.WriteLine ("SUCCESS - StackTrace is not null for unhandled exception."); + _exit (0); + } + }; + + mono_test_native_to_managed_exception_rethrow (PlainThrow); + Console.WriteLine ("Should have exited in the UnhandledException event handler."); + return 3; + } + + static void PlainThrow () + { + Throw (); + } + + static void Throw () + { + throw new CustomException ("C"); + } + + class CustomException : Exception + { + public CustomException(string s) : base(s) {} + } +} \ No newline at end of file diff --git a/mono/tests/delegate-disposed-hashcode.cs b/mono/tests/delegate-disposed-hashcode.cs new file mode 100644 index 0000000000..f90118a54d --- /dev/null +++ b/mono/tests/delegate-disposed-hashcode.cs @@ -0,0 +1,38 @@ +using System; + +// Regression test for bug #59235 + +public static class Program { + delegate void MyDel (int i, int j); + + public static void Main (string[] args) { + var o = new MyTarget (); + Console.WriteLine ("Hashcode1: " + o.GetHashCode ()); + + MyDel d = o.DoStuff; + Console.WriteLine ("Hashcode2: " + d.GetHashCode ()); + Console.WriteLine ("Hashcode3: " + o.GetHashCode ()); + + o.Dispose (); + Console.WriteLine ("Hashcode4: " + d.GetHashCode ()); + } + + class MyTarget : IDisposable { + public int counter = 0; + bool avail = true; + + public void DoStuff (int i, int j) { + counter += i + j; + } + + public void Dispose () { + avail = false; + } + + public override int GetHashCode () { + if (!avail) + throw new ObjectDisposedException ("MyTarget is dead"); + return counter.GetHashCode (); + } + } +} diff --git a/mono/tests/libtest.c.REMOVED.git-id b/mono/tests/libtest.c.REMOVED.git-id index be580518c4..8b780807e7 100644 --- a/mono/tests/libtest.c.REMOVED.git-id +++ b/mono/tests/libtest.c.REMOVED.git-id @@ -1 +1 @@ -b94b29d52fd8eae95c11e0877adcc1269a91093d \ No newline at end of file +9540e015385f0aff8fad7c16d40021a9a7bb5496 \ No newline at end of file diff --git a/po/mcs/de.gmo b/po/mcs/de.gmo index e8a4d068f2..c3fa7e4ef6 100644 Binary files a/po/mcs/de.gmo and b/po/mcs/de.gmo differ diff --git a/po/mcs/de.po.REMOVED.git-id b/po/mcs/de.po.REMOVED.git-id index 618d95037f..d14c45f78e 100644 --- a/po/mcs/de.po.REMOVED.git-id +++ b/po/mcs/de.po.REMOVED.git-id @@ -1 +1 @@ -8471cecba3e712a69942b464c4fdf677bb40795d \ No newline at end of file +fda9d7a830a207581b4d7af95c0ba266742dc674 \ No newline at end of file diff --git a/po/mcs/es.gmo b/po/mcs/es.gmo index f662b6bdcb..f398bbced3 100644 Binary files a/po/mcs/es.gmo and b/po/mcs/es.gmo differ diff --git a/po/mcs/es.po.REMOVED.git-id b/po/mcs/es.po.REMOVED.git-id index 531f7f8982..6d013568e8 100644 --- a/po/mcs/es.po.REMOVED.git-id +++ b/po/mcs/es.po.REMOVED.git-id @@ -1 +1 @@ -c1bd3dfa865c7895a24029f3316bd042494b3373 \ No newline at end of file +12a53a10dc14dec78b4abc4815bd7afd92e0e764 \ No newline at end of file diff --git a/po/mcs/ja.gmo b/po/mcs/ja.gmo index 8a29ae84fc..6e76920064 100644 Binary files a/po/mcs/ja.gmo and b/po/mcs/ja.gmo differ diff --git a/po/mcs/ja.po.REMOVED.git-id b/po/mcs/ja.po.REMOVED.git-id index 151ff32cc2..e856bac082 100644 --- a/po/mcs/ja.po.REMOVED.git-id +++ b/po/mcs/ja.po.REMOVED.git-id @@ -1 +1 @@ -debea7109f95296effb23798bab9d3e04658cef9 \ No newline at end of file +3f52fb4b6afb28f6a5f2cccc0d41bfa11e9c6994 \ No newline at end of file diff --git a/po/mcs/mcs.pot b/po/mcs/mcs.pot index 711a83cfc5..ad209bfb74 100644 --- a/po/mcs/mcs.pot +++ b/po/mcs/mcs.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: mono 5.4.0.167\n" +"Project-Id-Version: mono 5.4.0.199\n" "Report-Msgid-Bugs-To: http://www.mono-project.com/Bugs\n" -"POT-Creation-Date: 2017-08-21 15:15+0000\n" +"POT-Creation-Date: 2017-09-25 16:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/po/mcs/pt_BR.gmo b/po/mcs/pt_BR.gmo index 9ff1219893..0375d7b58d 100644 Binary files a/po/mcs/pt_BR.gmo and b/po/mcs/pt_BR.gmo differ diff --git a/po/mcs/pt_BR.po.REMOVED.git-id b/po/mcs/pt_BR.po.REMOVED.git-id index 01722afb97..e58cb791af 100644 --- a/po/mcs/pt_BR.po.REMOVED.git-id +++ b/po/mcs/pt_BR.po.REMOVED.git-id @@ -1 +1 @@ -133cc99896d67269ecedf7d798971f7dc4d0c23a \ No newline at end of file +c8e7f072ee5743808fb9ac5987dce39f4980c80c \ No newline at end of file diff --git a/tools/locale-builder/Driver.cs b/tools/locale-builder/Driver.cs index b197c84e16..635cef72d1 100644 --- a/tools/locale-builder/Driver.cs +++ b/tools/locale-builder/Driver.cs @@ -1177,10 +1177,13 @@ namespace Mono.Tools.LocaleBuilder if (el != null) ni.PositiveSign = el.InnerText; + // CLDR uses unicode negative sign for some culture (e.g sv, is, lt, don't kwnow why) but .NET always + // uses simple "-" sign and what is worse the parsing code cannot deal with non-ASCII values + ni.NegativeSign = "-"; + + /* el = node.SelectSingleNode ("minusSign"); if (el != null) { - // CLDR uses unicode negative sign for some culture (e.g sv, is, lt, don't kwnow why) but .net always - // uses simple - sign switch (el.InnerText) { case "\u2212": case "\u200F\u002D": // Remove any right-to-left mark characters @@ -1194,7 +1197,7 @@ namespace Mono.Tools.LocaleBuilder break; } } - + */ el = node.SelectSingleNode ("infinity"); // We cannot use the value from CLDR because many broken diff --git a/tools/locale-builder/Makefile.am b/tools/locale-builder/Makefile.am index 14186f1238..909fbc1d42 100644 --- a/tools/locale-builder/Makefile.am +++ b/tools/locale-builder/Makefile.am @@ -41,7 +41,7 @@ minimal: locale-builder.exe locale-data $(RUNTIME) locale-builder.exe --locales '$(MINIMAL_LOCALES)' locale-data: - if ! test -d CLDR/common ; then \ + if ! test -e CLDR/common/supplemental/supplementalData.xml ; then \ curl http://www.unicode.org/Public/cldr/30.0.2/core.zip -o core.zip ; \ unzip core.zip -d CLDR ; \ fi diff --git a/tools/locale-builder/Makefile.in b/tools/locale-builder/Makefile.in index 8f6411f29f..2c7696c4b3 100644 --- a/tools/locale-builder/Makefile.in +++ b/tools/locale-builder/Makefile.in @@ -559,7 +559,7 @@ minimal: locale-builder.exe locale-data $(RUNTIME) locale-builder.exe --locales '$(MINIMAL_LOCALES)' locale-data: - if ! test -d CLDR/common ; then \ + if ! test -e CLDR/common/supplemental/supplementalData.xml ; then \ curl http://www.unicode.org/Public/cldr/30.0.2/core.zip -o core.zip ; \ unzip core.zip -d CLDR ; \ fi