diff --git a/src/ILVerification/README.md b/src/ILVerification/README.md new file mode 100644 index 00000000000..6056ba59aee --- /dev/null +++ b/src/ILVerification/README.md @@ -0,0 +1,3 @@ +# ILVerification + +The ILVerification library is part of the ILVerify project. See details under [src/ILVerify/](https://github.com/dotnet/corert/tree/master/src/ILVerify). \ No newline at end of file diff --git a/src/ILVerify/src/AccessVerificationHelpers.cs b/src/ILVerification/src/AccessVerificationHelpers.cs similarity index 100% rename from src/ILVerify/src/AccessVerificationHelpers.cs rename to src/ILVerification/src/AccessVerificationHelpers.cs diff --git a/src/ILVerification/src/AssemblyInfo.cs b/src/ILVerification/src/AssemblyInfo.cs new file mode 100644 index 00000000000..722ae42996f --- /dev/null +++ b/src/ILVerification/src/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("ILVerification.Tests")] +[assembly: InternalsVisibleTo("ILVerify")] diff --git a/src/ILVerify/src/ILImporter.StackValue.cs b/src/ILVerification/src/ILImporter.StackValue.cs similarity index 100% rename from src/ILVerify/src/ILImporter.StackValue.cs rename to src/ILVerification/src/ILImporter.StackValue.cs diff --git a/src/ILVerify/src/ILImporter.Verify.cs b/src/ILVerification/src/ILImporter.Verify.cs similarity index 100% rename from src/ILVerify/src/ILImporter.Verify.cs rename to src/ILVerification/src/ILImporter.Verify.cs diff --git a/src/ILVerification/src/ILVerification.csproj b/src/ILVerification/src/ILVerification.csproj new file mode 100644 index 00000000000..1035652440f --- /dev/null +++ b/src/ILVerification/src/ILVerification.csproj @@ -0,0 +1,304 @@ + + + + Library + netcoreapp2.0;net46 + AnyCPU + false + true + false + + + + + + + + + + + + + + + + + + + + TypeSystem\CodeGen\MethodDesc.CodeGen.cs + + + Utilities\AlignmentHelper.cs + + + TypeSystem\Common\CastingHelper.cs + + + TypeSystem\Common\FunctionPointerType.cs + + + TypeSystem\Common\IAssemblyDesc.cs + + + TypeSystem\Common\Instantiation.cs + + + TypeSystem\Common\ModuleDesc.cs + + + TypeSystem\Common\TypeSystemEntity.cs + + + TypeSystem\Common\TypeSystemException.cs + + + Utilities\CustomAttributeTypeNameParser.cs + + + Utilities\LockFreeReaderHashtable.cs + + + TypeSystem\Common\ArrayType.cs + + + TypeSystem\Common\ArrayOfTRuntimeInterfacesAlgorithm.cs + + + TypeSystem\Common\BaseTypeRuntimeInterfacesAlgorithm.cs + + + TypeSystem\Common\ByRefType.cs + + + TypeSystem\Common\GenericParameterDesc.cs + + + TypeSystem\Common\ExceptionStringID.cs + + + TypeSystem\Common\FieldForInstantiatedType.cs + + + TypeSystem\Common\FieldDesc.cs + + + TypeSystem\Common\FieldDesc.FieldLayout.cs + + + TypeSystem\Common\FieldLayoutAlgorithm.cs + + + TypeSystem\Common\InstantiatedMethod.cs + + + TypeSystem\Common\InstantiatedType.cs + + + TypeSystem\Common\InstantiatedType.Interfaces.cs + + + TypeSystem\Common\InstantiatedType.MethodImpls.cs + + + TypeSystem\Common\LayoutInt.cs + + + TypeSystem\Common\MetadataType.cs + + + TypeSystem\Common\MetadataType.Interfaces.cs + + + TypeSystem\Common\MetadataType.MethodImpls.cs + + + TypeSystem\Common\MetadataFieldLayoutAlgorithm.cs + + + TypeSystem\Common\MetadataRuntimeInterfacesAlgorithm.cs + + + TypeSystem\Common\MetadataTypeSystemContext.cs + + + TypeSystem\Common\MethodForInstantiatedType.cs + + + TypeSystem\Common\ParameterizedType.cs + + + TypeSystem\Common\PointerType.cs + + + TypeSystem\Common\PropertySignature.cs + + + TypeSystem\Common\SignatureVariable.cs + + + TypeSystem\Common\TargetDetails.cs + + + TypeSystem\Common\ThreadSafeFlags.cs + + + TypeSystem\Common\TypeFlags.cs + + + TypeSystem\Common\TypeHashingAlgorithms.cs + + + TypeSystem\Common\TypeSystemContext.cs + + + TypeSystem\Common\TypeSystemHelpers.cs + + + Utilities\TypeNameFormatter.cs + + + TypeSystem\Common\WellKnownType.cs + + + TypeSystem\Common\VirtualMethodAlgorithm.cs + + + TypeSystem\Common\MethodDesc.cs + + + TypeSystem\Common\StandardVirtualMethodAlgorithm.cs + + + TypeSystem\Common\TypeDesc.cs + + + TypeSystem\Common\TypeDesc.Interfaces.cs + + + TypeSystem\Common\DefType.cs + + + TypeSystem\Common\DefType.FieldLayout.cs + + + TypeSystem\Common\RuntimeInterfacesAlgorithm.cs + + + TypeSystem\Common\ThrowHelper.Common.cs + + + TypeSystem\Common\ThrowHelper.cs + + + TypeSystem\Common\Utilities\ExceptionTypeNameFormatter.cs + + + TypeSystem\Common\Utilities\ExceptionTypeNameFormatter.Metadata.cs + + + Ecma\CustomAttributeTypeProvider.cs + + + Ecma\EcmaAssembly.cs + + + Ecma\EcmaField.cs + + + Ecma\EcmaGenericParameter.cs + + + Ecma\EcmaMethod.cs + + + Ecma\EcmaModule.cs + + + Ecma\EcmaSignatureParser.cs + + + Ecma\EcmaType.cs + + + Ecma\EcmaType.MethodImpls.cs + + + Ecma\EcmaType.Interfaces.cs + + + Ecma\MetadataExtensions.cs + + + Ecma\IMetadataStringDecoderProvider.cs + + + Ecma\CachingMetadataStringDecoder.cs + + + Ecma\PrimitiveTypeProvider.cs + + + IL\EcmaMethodIL.cs + + + IL\MethodIL.cs + + + IL\MethodILDebugView.cs + + + IL\ILDisassembler.cs + + + IL\InstantiatedMethodIL.cs + + + IL\ILOpcode.cs + + + IL\ILImporter.cs + + + Interop\InstantiatedType.Interop.cs + + + Interop\MetadataType.Interop.cs + + + Interop\MethodDesc.Interop.cs + + + TypeSystem\Interop\MarshalAsDescriptor.cs + + + Utilities\ArrayBuilder.cs + + + TypeSystem\Common\LocalVariableDefinition.cs + + + Common\System\FormattingHelpers.cs + + + TypeSystem\Common\TypeSystemConstraintsHelpers.cs + + + + + CommandLine\CommandLineException.cs + + + CommandLine\CommandLineHelpers.cs + + + System\NotImplemented.cs + + + + + + + + + diff --git a/src/ILVerify/src/ILVerifyTypeSystemContext.cs b/src/ILVerification/src/ILVerifyTypeSystemContext.cs similarity index 100% rename from src/ILVerify/src/ILVerifyTypeSystemContext.cs rename to src/ILVerification/src/ILVerifyTypeSystemContext.cs diff --git a/src/ILVerify/src/IResolver.cs b/src/ILVerification/src/IResolver.cs similarity index 100% rename from src/ILVerify/src/IResolver.cs rename to src/ILVerification/src/IResolver.cs diff --git a/src/ILVerify/src/InstantiatedGenericParameter.cs b/src/ILVerification/src/InstantiatedGenericParameter.cs similarity index 100% rename from src/ILVerify/src/InstantiatedGenericParameter.cs rename to src/ILVerification/src/InstantiatedGenericParameter.cs diff --git a/src/ILVerify/src/Resources/Strings.resx b/src/ILVerification/src/Resources/Strings.resx similarity index 100% rename from src/ILVerify/src/Resources/Strings.resx rename to src/ILVerification/src/Resources/Strings.resx diff --git a/src/ILVerify/src/SimpleArrayOfTRuntimeInterfacesAlgorithm.cs b/src/ILVerification/src/SimpleArrayOfTRuntimeInterfacesAlgorithm.cs similarity index 100% rename from src/ILVerify/src/SimpleArrayOfTRuntimeInterfacesAlgorithm.cs rename to src/ILVerification/src/SimpleArrayOfTRuntimeInterfacesAlgorithm.cs diff --git a/src/ILVerify/src/TypeSystemHelpers.cs b/src/ILVerification/src/TypeSystemHelpers.cs similarity index 100% rename from src/ILVerify/src/TypeSystemHelpers.cs rename to src/ILVerification/src/TypeSystemHelpers.cs diff --git a/src/ILVerify/src/VerificationResult.cs b/src/ILVerification/src/VerificationResult.cs similarity index 100% rename from src/ILVerify/src/VerificationResult.cs rename to src/ILVerification/src/VerificationResult.cs diff --git a/src/ILVerify/src/Verifier.cs b/src/ILVerification/src/Verifier.cs similarity index 99% rename from src/ILVerify/src/Verifier.cs rename to src/ILVerification/src/Verifier.cs index 8e10ec212da..aa17d13b967 100644 --- a/src/ILVerify/src/Verifier.cs +++ b/src/ILVerification/src/Verifier.cs @@ -18,7 +18,7 @@ namespace ILVerify public class Verifier { private Lazy _stringResourceManager = - new Lazy(() => new ResourceManager("ILVerify.Resources.Strings", Assembly.GetExecutingAssembly())); + new Lazy(() => new ResourceManager("ILVerification.Resources.Strings", Assembly.GetExecutingAssembly())); private ILVerifyTypeSystemContext _typeSystemContext; diff --git a/src/ILVerify/src/VerifierError.cs b/src/ILVerification/src/VerifierError.cs similarity index 100% rename from src/ILVerify/src/VerifierError.cs rename to src/ILVerification/src/VerifierError.cs diff --git a/src/ILVerify/tests/ILMethodTester.cs b/src/ILVerification/tests/ILMethodTester.cs similarity index 100% rename from src/ILVerify/tests/ILMethodTester.cs rename to src/ILVerification/tests/ILMethodTester.cs diff --git a/src/ILVerify/tests/ILTests/AccessTests.il b/src/ILVerification/tests/ILTests/AccessTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/AccessTests.il rename to src/ILVerification/tests/ILTests/AccessTests.il diff --git a/src/ILVerify/tests/ILTests/AccessTestsExtern.il b/src/ILVerification/tests/ILTests/AccessTestsExtern.il similarity index 100% rename from src/ILVerify/tests/ILTests/AccessTestsExtern.il rename to src/ILVerification/tests/ILTests/AccessTestsExtern.il diff --git a/src/ILVerify/tests/ILTests/AccessTestsFriend.il b/src/ILVerification/tests/ILTests/AccessTestsFriend.il similarity index 100% rename from src/ILVerify/tests/ILTests/AccessTestsFriend.il rename to src/ILVerification/tests/ILTests/AccessTestsFriend.il diff --git a/src/ILVerify/tests/ILTests/ArrayTests.il b/src/ILVerification/tests/ILTests/ArrayTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/ArrayTests.il rename to src/ILVerification/tests/ILTests/ArrayTests.il diff --git a/src/ILVerify/tests/ILTests/BasicArithmeticTests.il b/src/ILVerification/tests/ILTests/BasicArithmeticTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/BasicArithmeticTests.il rename to src/ILVerification/tests/ILTests/BasicArithmeticTests.il diff --git a/src/ILVerify/tests/ILTests/BranchingTests.il b/src/ILVerification/tests/ILTests/BranchingTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/BranchingTests.il rename to src/ILVerification/tests/ILTests/BranchingTests.il diff --git a/src/ILVerify/tests/ILTests/CallTests.il b/src/ILVerification/tests/ILTests/CallTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/CallTests.il rename to src/ILVerification/tests/ILTests/CallTests.il diff --git a/src/ILVerify/tests/ILTests/CastingTests.il b/src/ILVerification/tests/ILTests/CastingTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/CastingTests.il rename to src/ILVerification/tests/ILTests/CastingTests.il diff --git a/src/ILVerify/tests/ILTests/ComparisonTests.il b/src/ILVerification/tests/ILTests/ComparisonTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/ComparisonTests.il rename to src/ILVerification/tests/ILTests/ComparisonTests.il diff --git a/src/ILVerify/tests/ILTests/DelegateTests.il b/src/ILVerification/tests/ILTests/DelegateTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/DelegateTests.il rename to src/ILVerification/tests/ILTests/DelegateTests.il diff --git a/src/ILVerify/tests/ILTests/ExceptionRegionTests.il b/src/ILVerification/tests/ILTests/ExceptionRegionTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/ExceptionRegionTests.il rename to src/ILVerification/tests/ILTests/ExceptionRegionTests.il diff --git a/src/ILVerify/tests/ILTests/FieldTests.il b/src/ILVerification/tests/ILTests/FieldTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/FieldTests.il rename to src/ILVerification/tests/ILTests/FieldTests.il diff --git a/src/ILVerify/tests/ILTests/FtnTests.il b/src/ILVerification/tests/ILTests/FtnTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/FtnTests.il rename to src/ILVerification/tests/ILTests/FtnTests.il diff --git a/src/ILVerify/tests/ILTests/LoadStoreIndirectTests.il b/src/ILVerification/tests/ILTests/LoadStoreIndirectTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/LoadStoreIndirectTests.il rename to src/ILVerification/tests/ILTests/LoadStoreIndirectTests.il diff --git a/src/ILVerify/tests/ILTests/NewobjTests.il b/src/ILVerification/tests/ILTests/NewobjTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/NewobjTests.il rename to src/ILVerification/tests/ILTests/NewobjTests.il diff --git a/src/ILVerify/tests/ILTests/PrefixTests.il b/src/ILVerification/tests/ILTests/PrefixTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/PrefixTests.il rename to src/ILVerification/tests/ILTests/PrefixTests.il diff --git a/src/ILVerify/tests/ILTests/ReturnTests.il b/src/ILVerification/tests/ILTests/ReturnTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/ReturnTests.il rename to src/ILVerification/tests/ILTests/ReturnTests.il diff --git a/src/ILVerify/tests/ILTests/ShiftTests.il b/src/ILVerification/tests/ILTests/ShiftTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/ShiftTests.il rename to src/ILVerification/tests/ILTests/ShiftTests.il diff --git a/src/ILVerify/tests/ILTests/SwitchTests.il b/src/ILVerification/tests/ILTests/SwitchTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/SwitchTests.il rename to src/ILVerification/tests/ILTests/SwitchTests.il diff --git a/src/ILVerify/tests/ILTests/ThisStateTests.il b/src/ILVerification/tests/ILTests/ThisStateTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/ThisStateTests.il rename to src/ILVerification/tests/ILTests/ThisStateTests.il diff --git a/src/ILVerify/tests/ILTests/ValueTypeTests.il b/src/ILVerification/tests/ILTests/ValueTypeTests.il similarity index 100% rename from src/ILVerify/tests/ILTests/ValueTypeTests.il rename to src/ILVerification/tests/ILTests/ValueTypeTests.il diff --git a/src/ILVerify/tests/ILVerify.Tests.csproj b/src/ILVerification/tests/ILVerification.Tests.csproj similarity index 90% rename from src/ILVerify/tests/ILVerify.Tests.csproj rename to src/ILVerification/tests/ILVerification.Tests.csproj index 94c21cd1599..ceca7fc932e 100644 --- a/src/ILVerify/tests/ILVerify.Tests.csproj +++ b/src/ILVerification/tests/ILVerification.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/src/ILVerify/tests/TestDataLoader.cs b/src/ILVerification/tests/TestDataLoader.cs similarity index 100% rename from src/ILVerify/tests/TestDataLoader.cs rename to src/ILVerification/tests/TestDataLoader.cs diff --git a/src/ILVerify/ILVerify.sln b/src/ILVerify/ILVerify.sln index a26a9be5c18..ce368247dcf 100644 --- a/src/ILVerify/ILVerify.sln +++ b/src/ILVerify/ILVerify.sln @@ -5,7 +5,9 @@ VisualStudioVersion = 15.0.26510.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILVerify", "src\ILVerify.csproj", "{56AA4730-39A4-4B48-95E9-89E8A29F0A06}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILVerify.Tests", "tests\ILVerify.Tests.csproj", "{1228E4B6-E5E5-414A-94EC-69B792984FAB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILVerification", "..\ILVerification\src\ILVerification.csproj", "{6166B258-3D41-4431-88D9-510FAF5E6927}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILVerification.Tests", "..\ILVerification\tests\ILVerification.Tests.csproj", "{894F0BC9-31D1-42D0-9C3F-4FC9A41CD07E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -17,12 +19,19 @@ Global {56AA4730-39A4-4B48-95E9-89E8A29F0A06}.Debug|Any CPU.Build.0 = Debug|Any CPU {56AA4730-39A4-4B48-95E9-89E8A29F0A06}.Release|Any CPU.ActiveCfg = Release|Any CPU {56AA4730-39A4-4B48-95E9-89E8A29F0A06}.Release|Any CPU.Build.0 = Release|Any CPU - {1228E4B6-E5E5-414A-94EC-69B792984FAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1228E4B6-E5E5-414A-94EC-69B792984FAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1228E4B6-E5E5-414A-94EC-69B792984FAB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1228E4B6-E5E5-414A-94EC-69B792984FAB}.Release|Any CPU.Build.0 = Release|Any CPU + {6166B258-3D41-4431-88D9-510FAF5E6927}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6166B258-3D41-4431-88D9-510FAF5E6927}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6166B258-3D41-4431-88D9-510FAF5E6927}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6166B258-3D41-4431-88D9-510FAF5E6927}.Release|Any CPU.Build.0 = Release|Any CPU + {894F0BC9-31D1-42D0-9C3F-4FC9A41CD07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {894F0BC9-31D1-42D0-9C3F-4FC9A41CD07E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {894F0BC9-31D1-42D0-9C3F-4FC9A41CD07E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {894F0BC9-31D1-42D0-9C3F-4FC9A41CD07E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {3B6C08A7-1F82-4EC0-9CA7-1F07716F36B1} + EndGlobalSection EndGlobal diff --git a/src/ILVerify/README.md b/src/ILVerify/README.md index 662bf8ca2eb..ef4d0d81f6e 100644 --- a/src/ILVerify/README.md +++ b/src/ILVerify/README.md @@ -14,16 +14,20 @@ Historically on Full Framework IL generators used PEVerify to make sure that the - No coupling with CoreLib: ILVerify can point to any assembly and verify it. This also includes the full framework base assemblies (especially mscorlib). - Cross-platform, Open-Source - It should be easy to add new verification rules -- Fast spin up/tear down. +- Fast spin up/tear down. ## The codebase -The project targets netcoreapp2.0 and uses the new .csproj based project format. If you want to open and compile it with Visual Studio then you need a version, which supports .NET Core 2.0 tooling. This is supported in Visual Studio 2017 Update 3 (Version 15.3) or later. The other option is to use command (with .NET Core 2.0 tooling). +The project targets netcoreapp2.0 and uses the new .csproj based project format. If you want to open and compile it with Visual Studio then you need a version, which supports .NET Core 2.0 tooling. This is supported in Visual Studio 2017 Update 3 (Version 15.3) or later. The other option is to use command (with .NET Core 2.0 tooling). +The code is split into three projects: +- ILVerification is the library with the core verification logic, +- ILVerification.Tests contains the tests for ILVerification, +- ILVerify is an application that provides a command-line interface on top of ILVerification. ## Tests -To test ILVerify we have small methods checked in as .il files testing specific verification scenarios. These tests live under [src/ILVerify/tests/ILTests](https://github.com/dotnet/corert/tree/master/src/ILVerify/tests/ILTests). Tests are grouped into .il files based on functionalities they test. There is no strict policy here, the goal is to have a few dozen .il files instead of thousands containing each only a single method. +To test the ILVerification library we have small methods checked in as .il files testing specific verification scenarios. These tests live under [src/ILVerification/tests/ILTests](../ILVerification/tests/ILTests). Tests are grouped into .il files based on functionalities they test. There is no strict policy here, the goal is to have a few dozen .il files instead of thousands containing each only a single method. -Currently the IL files are NOT compiled automatically. You have to compile manually (We want to automatize this step later): +Currently the IL files are NOT compiled automatically. You have to compile manually (We want to automate this step later): ``` ilasm [filename.il] /dll /ERROR @@ -35,7 +39,7 @@ Note: if you run the tests and get an error similar to this then it means that t Result Message: System.InvalidOperationException : No data found for ILVerify.Tests.ILMethodTester.TestMethodsWithInvalidIL ``` -The test project itself is under [src/ILVerify/tests](https://github.com/dotnet/corert/tree/master/src/ILVerify/tests) +The test project itself is under [src/ILVerification/tests](../ILVerification/tests) Method names in the .il files must follow the following naming convention: @@ -44,9 +48,9 @@ The test project itself is under [src/ILVerify/tests](https://github.com/dotnet/ ``` [FriendlyName]_Valid ``` -The method must contain 1 '`_`'. +The method must contain 1 '`_`'. - The part before the `_` is a friendly name describing what the method does. - - The word after the `_` must be 'Valid' (Case sensitive) + - The word after the `_` must be 'Valid' (Case sensitive) E.g.: ```SimpleAdd_Valid``` @@ -58,10 +62,10 @@ E.g.: ```SimpleAdd_Valid``` The method name must contain 2 '`_`' characters. 1. part: a friendly name 2. part: must be the word 'Invalid' (Case sensitive) - 3. part: the expected [VerifierErrors](https://github.com/dotnet/corert/blob/master/src/ILVerify/src/VerifierError.cs) as string separated by '.'. We assert on these errors; the test fails if ILVerify does not report these errors. - + 3. part: the expected [VerifierErrors](../ILVerification/src/VerifierError.cs) as string separated by '.'. We assert on these errors; the test fails if ILVerify does not report these errors. + E.g.: ```SimpleAdd_Invalid_ExpectedNumericType``` - + ### Methods with special names: In order to test methods with special names (e.g. '.ctor'), the specialname method is defined as usual and a separate empty method is added to the type: @@ -92,7 +96,7 @@ Currently every IL command falls into one of these categories: - Not implemented: the implementation is completely missing. The easiest way is to pick one of them (look for NotImplentedException in the code) and implement it. First you should 100% understand the spec. (see [ECMA-335](https://www.ecma-international.org/publications/standards/Ecma-335.htm)), then try to port an existing implementation (sources below). - Partially implemented: These are typically methods with TODOs in it. As the first phase we want to make sure that for every command the stack is correctly maintained, therefore for some commands we either have no verification or we have only a not complete verification. You can also pick one of these and finish it. - - Implemented: find and fix bugs ;) . + - Implemented: find and fix bugs ;) . Another option to contribute is to write tests (see Tests section). @@ -100,4 +104,4 @@ Useful sources: - [PEVerify source code](https://github.com/lewischeng-ms/sscli/blob/master/clr/src/jit64/newverify.cpp) - [RyuJIT source code](https://github.com/dotnet/coreclr/blob/master/src/jit), specifically: [exception handling specific part](https://github.com/dotnet/coreclr/blob/master/src/jit/jiteh.cpp), [importer.cpp](https://github.com/dotnet/coreclr/blob/master/src/jit/importer.cpp) (look for `Compiler::ver`, `Verify`, `VerifyOrReturn`, and `VerifyOrReturnSpeculative`), [_typeinfo.h](https://github.com/dotnet/coreclr/blob/master/src/jit/_typeinfo.h), [typeinfo.cpp](https://github.com/dotnet/coreclr/blob/master/src/jit/typeinfo.cpp) - [ECMA-335 standard](https://www.ecma-international.org/publications/standards/Ecma-335.htm) - - [Expert .NET 2.0 IL Assembler book](http://www.apress.com/us/book/9781590596463) by Serge Lidin + - [Expert .NET 2.0 IL Assembler book](http://www.apress.com/us/book/9781590596463) by Serge Lidin diff --git a/src/ILVerify/src/AssemblyInfo.cs b/src/ILVerify/src/AssemblyInfo.cs deleted file mode 100644 index 8e392ff7bc6..00000000000 --- a/src/ILVerify/src/AssemblyInfo.cs +++ /dev/null @@ -1,3 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("ILVerify.Tests")] diff --git a/src/ILVerify/src/ILVerify.csproj b/src/ILVerify/src/ILVerify.csproj index aad89545205..08bf2e12ca0 100644 --- a/src/ILVerify/src/ILVerify.csproj +++ b/src/ILVerify/src/ILVerify.csproj @@ -10,296 +10,10 @@ - - - - - - - - - - - - - - - - TypeSystem\CodeGen\MethodDesc.CodeGen.cs - - - Utilities\AlignmentHelper.cs - - - TypeSystem\Common\CastingHelper.cs - - - TypeSystem\Common\FunctionPointerType.cs - - - TypeSystem\Common\IAssemblyDesc.cs - - - TypeSystem\Common\Instantiation.cs - - - TypeSystem\Common\ModuleDesc.cs - - - TypeSystem\Common\TypeSystemEntity.cs - - - TypeSystem\Common\TypeSystemException.cs - - - Utilities\CustomAttributeTypeNameParser.cs - - - Utilities\LockFreeReaderHashtable.cs - - - TypeSystem\Common\ArrayType.cs - - - TypeSystem\Common\ArrayOfTRuntimeInterfacesAlgorithm.cs - - - TypeSystem\Common\BaseTypeRuntimeInterfacesAlgorithm.cs - - - TypeSystem\Common\ByRefType.cs - - - TypeSystem\Common\GenericParameterDesc.cs - - - TypeSystem\Common\ExceptionStringID.cs - - - TypeSystem\Common\FieldForInstantiatedType.cs - - - TypeSystem\Common\FieldDesc.cs - - - TypeSystem\Common\FieldDesc.FieldLayout.cs - - - TypeSystem\Common\FieldLayoutAlgorithm.cs - - - TypeSystem\Common\InstantiatedMethod.cs - - - TypeSystem\Common\InstantiatedType.cs - - - TypeSystem\Common\InstantiatedType.Interfaces.cs - - - TypeSystem\Common\InstantiatedType.MethodImpls.cs - - - TypeSystem\Common\LayoutInt.cs - - - TypeSystem\Common\MetadataType.cs - - - TypeSystem\Common\MetadataType.Interfaces.cs - - - TypeSystem\Common\MetadataType.MethodImpls.cs - - - TypeSystem\Common\MetadataFieldLayoutAlgorithm.cs - - - TypeSystem\Common\MetadataRuntimeInterfacesAlgorithm.cs - - - TypeSystem\Common\MetadataTypeSystemContext.cs - - - TypeSystem\Common\MethodForInstantiatedType.cs - - - TypeSystem\Common\ParameterizedType.cs - - - TypeSystem\Common\PointerType.cs - - - TypeSystem\Common\PropertySignature.cs - - - TypeSystem\Common\SignatureVariable.cs - - - TypeSystem\Common\TargetDetails.cs - - - TypeSystem\Common\ThreadSafeFlags.cs - - - TypeSystem\Common\TypeFlags.cs - - - TypeSystem\Common\TypeHashingAlgorithms.cs - - - TypeSystem\Common\TypeSystemContext.cs - - - TypeSystem\Common\TypeSystemHelpers.cs - - - Utilities\TypeNameFormatter.cs - - - TypeSystem\Common\WellKnownType.cs - - - TypeSystem\Common\VirtualMethodAlgorithm.cs - - - TypeSystem\Common\MethodDesc.cs - - - TypeSystem\Common\StandardVirtualMethodAlgorithm.cs - - - TypeSystem\Common\TypeDesc.cs - - - TypeSystem\Common\TypeDesc.Interfaces.cs - - - TypeSystem\Common\DefType.cs - - - TypeSystem\Common\DefType.FieldLayout.cs - - - TypeSystem\Common\RuntimeInterfacesAlgorithm.cs - - - TypeSystem\Common\ThrowHelper.Common.cs - - - TypeSystem\Common\ThrowHelper.cs - - - TypeSystem\Common\Utilities\ExceptionTypeNameFormatter.cs - - - TypeSystem\Common\Utilities\ExceptionTypeNameFormatter.Metadata.cs - - - Ecma\CustomAttributeTypeProvider.cs - - - Ecma\EcmaAssembly.cs - - - Ecma\EcmaField.cs - - - Ecma\EcmaGenericParameter.cs - - - Ecma\EcmaMethod.cs - - - Ecma\EcmaModule.cs - - - Ecma\EcmaSignatureParser.cs - - - Ecma\EcmaType.cs - - - Ecma\EcmaType.MethodImpls.cs - - - Ecma\EcmaType.Interfaces.cs - - - Ecma\MetadataExtensions.cs - - - Ecma\IMetadataStringDecoderProvider.cs - - - Ecma\CachingMetadataStringDecoder.cs - - - Ecma\PrimitiveTypeProvider.cs - - - IL\EcmaMethodIL.cs - - - IL\MethodIL.cs - - - IL\MethodILDebugView.cs - - - IL\ILDisassembler.cs - - - IL\InstantiatedMethodIL.cs - - - IL\ILOpcode.cs - - - IL\ILImporter.cs - - - Interop\InstantiatedType.Interop.cs - - - Interop\MetadataType.Interop.cs - - - Interop\MethodDesc.Interop.cs - - - TypeSystem\Interop\MarshalAsDescriptor.cs - - - Utilities\ArrayBuilder.cs - - - TypeSystem\Common\LocalVariableDefinition.cs - - - Common\System\FormattingHelpers.cs - - - TypeSystem\Common\TypeSystemConstraintsHelpers.cs - - - - - CommandLine\CommandLineException.cs - - - CommandLine\CommandLineHelpers.cs - - - System\NotImplemented.cs - - - - - - + + diff --git a/src/dirs.proj b/src/dirs.proj index 2356eef0de5..65f51f4710f 100644 --- a/src/dirs.proj +++ b/src/dirs.proj @@ -7,8 +7,9 @@ + + -