提交 6efa39ed 编写于 作者: V vsadov

Do not autodisable verification based on unsafe compilation option.

上级 1d28ff9b
......@@ -98,7 +98,7 @@ public void TestCompileDynamicAttributes()
{
var comp = CreateCompilationWithMscorlibAndSystemCore(s_dynamicTestSource, options: TestOptions.UnsafeReleaseDll, references: new[] { SystemCoreRef, ValueTupleRef, SystemRuntimeFacadeRef });
CompileAndVerify(comp, symbolValidator: module =>
CompileAndVerify(comp, verify: Verification.Passes, symbolValidator: module =>
{
DynamicAttributeValidator.ValidateDynamicAttributes(module);
});
......
......@@ -1214,7 +1214,7 @@ public class C
}
";
var compilation = CreateStandardCompilation(source, options: TestOptions.UnsafeReleaseDll);
CompileAndVerify(compilation, symbolValidator: module =>
CompileAndVerify(compilation, verify: Verification.Passes,symbolValidator: module =>
{
ValidateDeclSecurity(module, new DeclSecurityEntry
{
......@@ -1294,7 +1294,7 @@ public class C
";
var compilation = CreateStandardCompilation(source, options: TestOptions.UnsafeReleaseDll);
CompileAndVerify(compilation, symbolValidator: module =>
CompileAndVerify(compilation, verify: Verification.Passes, symbolValidator: module =>
{
ValidateDeclSecurity(module, new DeclSecurityEntry
{
......
......@@ -1185,7 +1185,8 @@ public static void Main()
optimizationLevel: OptimizationLevel.Release,
allowUnsafe: true));
CompileAndVerify(compilation, symbolValidator: module =>
//Skipped because PeVerify fails to run with "The module was expected to contain an assembly manifest."
CompileAndVerify(compilation, verify: Verification.Skipped, symbolValidator: module =>
{
var unverifiableCode = module.GetAttributes().Single();
......@@ -1198,7 +1199,7 @@ public static void Main()
{
// Modules security attributes are copied to assemblies they're included in
var moduleReference = ModuleMetadata.CreateFromImage(compilation.EmitToArray()).GetReference();
CompileAndVerify("", additionalRefs: new[] { moduleReference }, symbolValidator: validateSecurity);
CompileAndVerify("", additionalRefs: new[] { moduleReference }, symbolValidator: validateSecurity, verify: Verification.Skipped);
}
else
{
......
......@@ -113,7 +113,7 @@ public void TestTupleAttributes()
options: TestOptions.UnsafeReleaseDll,
references: s_attributeRefs);
CompileAndVerify(comp, symbolValidator: module =>
CompileAndVerify(comp, verify: Verification.Passes, symbolValidator: module =>
{
TupleAttributeValidator.ValidateTupleAttributes(module);
});
......@@ -230,6 +230,7 @@ public void RoundTrip()
CompileAndVerify(s_tuplesTestSource,
options: TestOptions.UnsafeReleaseDll,
additionalRefs: s_attributeRefs,
verify: Verification.Passes,
sourceSymbolValidator: m => sourceModule = m,
symbolValidator: m => peModule = m);
......
......@@ -21,10 +21,10 @@ public CodeGenAsyncLocalsTests()
{
}
private CompilationVerifier CompileAndVerify(string source, string expectedOutput = null, IEnumerable<MetadataReference> references = null, CSharpCompilationOptions options = null)
private CompilationVerifier CompileAndVerify(string source, string expectedOutput = null, IEnumerable<MetadataReference> references = null, CSharpCompilationOptions options = null, Verification verify = Verification.Passes)
{
references = (references != null) ? references.Concat(s_asyncRefs) : s_asyncRefs;
return base.CompileAndVerify(source, expectedOutput: expectedOutput, additionalRefs: references, options: options);
return base.CompileAndVerify(source, expectedOutput: expectedOutput, additionalRefs: references, options: options, verify: verify);
}
private string GetFieldLoadsAndStores(CompilationVerifier c, string qualifiedMethodName)
......@@ -1293,7 +1293,7 @@ static void Main()
Console.Write(i);
}
}";
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"1");
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"1", verify: Verification.Fails);
verifier.VerifyIL("C.<F>d__0.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext()",
@"
{
......@@ -1398,7 +1398,7 @@ .maxstack 3
IL_00c0: call ""void System.Runtime.CompilerServices.AsyncTaskMethodBuilder<int>.SetResult(int)""
IL_00c5: ret
}");
verifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"1");
verifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"1", verify: Verification.Fails);
verifier.VerifyIL("C.<F>d__0.System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext()",
@"
{
......
......@@ -24,10 +24,10 @@ private static CSharpCompilation CreateCompilation(string source, IEnumerable<Me
return CreateCompilationWithMscorlib45(source, options: options, references: references);
}
private CompilationVerifier CompileAndVerify(string source, string expectedOutput, IEnumerable<MetadataReference> references = null, CSharpCompilationOptions options = null)
private CompilationVerifier CompileAndVerify(string source, string expectedOutput, IEnumerable<MetadataReference> references = null, CSharpCompilationOptions options = null, Verification verify = Verification.Passes)
{
var compilation = CreateCompilation(source, references: references, options: options);
return base.CompileAndVerify(compilation, expectedOutput: expectedOutput);
return base.CompileAndVerify(compilation, expectedOutput: expectedOutput, verify: verify);
}
[Fact]
......@@ -865,7 +865,7 @@ public static void Main()
Console.WriteLine(Result);
}
}";
CompileAndVerify(source, "0", options: TestOptions.UnsafeReleaseExe);
CompileAndVerify(source, expectedOutput: "0", options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails);
}
[Fact]
......@@ -937,7 +937,7 @@ static void Main()
Console.WriteLine(Driver.Result);
}
}";
CompileAndVerify(source, "0", options: TestOptions.UnsafeDebugExe);
CompileAndVerify(source, expectedOutput: "0", options: TestOptions.UnsafeDebugExe, verify: Verification.Passes);
}
[Fact]
......@@ -998,7 +998,7 @@ static void Main()
Console.Write(Driver.Result);
}
}";
CompileAndVerify(source, "0", options: TestOptions.UnsafeDebugExe);
CompileAndVerify(source, expectedOutput: "0", options: TestOptions.UnsafeDebugExe, verify: Verification.Passes);
}
[Fact]
......@@ -1039,7 +1039,7 @@ public static void Main()
public static int Result = -1;
}";
CompileAndVerify(source, "0", options: TestOptions.UnsafeDebugExe);
CompileAndVerify(source, expectedOutput: "0", options: TestOptions.UnsafeDebugExe, verify: Verification.Passes);
}
[Fact]
......
......@@ -383,7 +383,7 @@ public static long Sub_Ptr(C* a, C* b)
}
}
";
var verifier = CompileAndVerify(source, options: TestOptions.UnsafeReleaseDll);
var verifier = CompileAndVerify(source, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
// NOTE: unsigned addition
verifier.VerifyIL("C.Add_Int1", @"
......
......@@ -2518,7 +2518,7 @@ public static void Main(string[] args)
d();
}
}";
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F");
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F", verify: Verification.Passes);
}
[Fact]
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Microsoft.CodeAnalysis.Test.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
......@@ -2431,7 +2432,7 @@ unsafe static void Main()
";
string expectedOutput = @"1
1";
CompileAndVerify(source, expectedOutput: expectedOutput, options: TestOptions.UnsafeReleaseExe);
CompileAndVerify(source, expectedOutput: expectedOutput, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails);
}
[Fact, WorkItem(17756, "https://github.com/dotnet/roslyn/issues/17756")]
......
......@@ -28,7 +28,8 @@ public class CodeGen_DynamicTests : CSharpTestBase
bool allowUnsafe = false,
[CallerFilePath]string callerPath = null,
[CallerLineNumber]int callerLine = 0,
CSharpParseOptions parseOptions = null)
CSharpParseOptions parseOptions = null,
Verification verify = Verification.Passes)
{
references = references ?? new[] { SystemCoreRef, CSharpRef };
......@@ -36,8 +37,8 @@ public class CodeGen_DynamicTests : CSharpTestBase
var unoptimizedCompilation = CreateCompilationWithMscorlib45(source, references, parseOptions: parseOptions, options: TestOptions.DebugDll.WithMetadataImportOptions(MetadataImportOptions.All).WithAllowUnsafe(allowUnsafe));
var optimizedCompilation = CreateCompilationWithMscorlib45(source, references, parseOptions: parseOptions, options: TestOptions.ReleaseDll.WithMetadataImportOptions(MetadataImportOptions.All).WithAllowUnsafe(allowUnsafe));
var unoptimizedVerifier = CompileAndVerify(unoptimizedCompilation);
var optimizedVerifier = CompileAndVerify(optimizedCompilation);
var unoptimizedVerifier = CompileAndVerify(unoptimizedCompilation, verify: verify);
var optimizedVerifier = CompileAndVerify(optimizedCompilation, verify: verify);
// check what IL we emit exactly:
if (expectedUnoptimizedIL != null)
......@@ -9358,7 +9359,7 @@ .maxstack 9
IL_0063: callvirt ""void <>A{00000002}<System.Runtime.CompilerServices.CallSite, S, object>.Invoke(System.Runtime.CompilerServices.CallSite, ref S, object)""
IL_0068: ret
}
", allowUnsafe: true);
", allowUnsafe: true, verify: Verification.Fails);
}
[Fact]
......@@ -9427,7 +9428,7 @@ .maxstack 9
IL_0063: callvirt ""void <>A{00000002}<System.Runtime.CompilerServices.CallSite, S, object>.Invoke(System.Runtime.CompilerServices.CallSite, ref S, object)""
IL_0068: ret
}
", allowUnsafe: true);
", allowUnsafe: true, verify: Verification.Fails);
}
[Fact]
......@@ -9497,7 +9498,7 @@ .maxstack 9
IL_006a: callvirt ""void <>A{00000002}<System.Runtime.CompilerServices.CallSite, S, object>.Invoke(System.Runtime.CompilerServices.CallSite, ref S, object)""
IL_006f: ret
}
", allowUnsafe: true);
", allowUnsafe: true, verify: Verification.Fails);
}
[Fact]
......
......@@ -2312,7 +2312,7 @@ static void Main()
}";
string expectedOutput = @"x => G(x)";
CompileAndVerify(text, new[] { ExpressionAssemblyRef }, options: TestOptions.UnsafeReleaseExe, expectedOutput: TrimExpectedOutput(expectedOutput));
CompileAndVerify(text, new[] { ExpressionAssemblyRef }, options: TestOptions.UnsafeReleaseExe, expectedOutput: TrimExpectedOutput(expectedOutput), verify: Verification.Fails);
}
[WorkItem(544246, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/544246")]
......@@ -3052,7 +3052,7 @@ public static void Main()
var c = CompileAndVerify(text,
additionalRefs: new[] { SystemCoreRef },
options: TestOptions.UnsafeReleaseDll,
verify: Verification.Passes);
verify: Verification.Fails);
c.VerifyDiagnostics();
}
......
......@@ -4484,7 +4484,7 @@ static void Main(string[] args)
2
2
";
VerifyOutput(source, output, TestOptions.ReleaseExe.WithAllowUnsafe(true).WithWarningLevel(0));
VerifyOutput(source, output, TestOptions.ReleaseExe.WithAllowUnsafe(true).WithWarningLevel(0), verify: Verification.Passes);
}
[Fact]
......@@ -4510,7 +4510,7 @@ static void Main(string[] args)
}
}
";
VerifyOutput(source, "2", TestOptions.ReleaseExe.WithAllowUnsafe(true));
VerifyOutput(source, "2", TestOptions.ReleaseExe.WithAllowUnsafe(true), verify: Verification.Fails);
}
[Fact]
......@@ -4536,7 +4536,7 @@ static void Main(string[] args)
}
}
";
VerifyOutput(source, "2", TestOptions.ReleaseExe.WithAllowUnsafe(true));
VerifyOutput(source, "2", TestOptions.ReleaseExe.WithAllowUnsafe(true), verify: Verification.Fails);
}
[Fact]
......@@ -4563,7 +4563,7 @@ static void Main(string[] args)
}
}
";
VerifyOutput(source, "2", TestOptions.ReleaseExe.WithAllowUnsafe(true));
VerifyOutput(source, "2", TestOptions.ReleaseExe.WithAllowUnsafe(true), verify: Verification.Fails);
}
[Fact]
......@@ -4603,7 +4603,7 @@ unsafe void Local(ref int x2)
Console.WriteLine(y);
}
}";
VerifyOutput(src, "10\r\n4", TestOptions.ReleaseExe.WithAllowUnsafe(true));
VerifyOutput(src, "10\r\n4", TestOptions.ReleaseExe.WithAllowUnsafe(true), verify: Verification.Fails);
}
[Fact]
......@@ -5072,10 +5072,10 @@ .maxstack 3
");
}
internal CompilationVerifier VerifyOutput(string source, string output, CSharpCompilationOptions options)
internal CompilationVerifier VerifyOutput(string source, string output, CSharpCompilationOptions options, Verification verify = Verification.Passes)
{
var comp = CreateCompilationWithMscorlib45AndCSruntime(source, options: options);
return CompileAndVerify(comp, expectedOutput: output).VerifyDiagnostics(); // no diagnostics
return CompileAndVerify(comp, expectedOutput: output, verify: verify).VerifyDiagnostics(); // no diagnostics
}
internal CompilationVerifier VerifyOutput(string source, string output)
......
......@@ -1058,7 +1058,7 @@ unsafe public static void Main()
}
}", TestOptions.UnsafeReleaseExe);
CompileAndVerify(comp, expectedOutput: "24");
CompileAndVerify(comp, expectedOutput: "24", verify: Verification.Fails);
}
[Fact]
......
......@@ -1469,7 +1469,7 @@ static unsafe void Main()
}
";
CompileAndVerify(text, options: TestOptions.UnsafeDebugDll).VerifyIL("Program.Main()", @"
CompileAndVerify(text, options: TestOptions.UnsafeDebugDll, verify: Verification.Fails).VerifyIL("Program.Main()", @"
{
// Code size 54 (0x36)
.maxstack 3
......@@ -1542,7 +1542,7 @@ static unsafe int Main()
}
";
CompileAndVerify(text, options: TestOptions.UnsafeDebugDll).VerifyIL("Program.Main()", @"
CompileAndVerify(text, options: TestOptions.UnsafeDebugDll, verify: Verification.Passes).VerifyIL("Program.Main()", @"
{
// Code size 41 (0x29)
.maxstack 2
......
......@@ -1261,7 +1261,7 @@ static unsafe void Main()
}
";
CompileAndVerifyRef(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("Program.Main()", @"
CompileAndVerifyRef(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("Program.Main()", @"
{
// Code size 291 (0x123)
.maxstack 4
......@@ -1450,7 +1450,7 @@ static unsafe int Main()
}
";
CompileAndVerifyRef(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("Program.Main()", @"
CompileAndVerifyRef(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("Program.Main()", @"
{
// Code size 168 (0xa8)
.maxstack 4
......
......@@ -5152,7 +5152,7 @@ static void Goo(C x)
}
}
";
var verifier = CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), expectedOutput: @"---
var verifier = CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), verify: Verification.Fails, expectedOutput: @"---
M
---
---");
......@@ -5513,7 +5513,7 @@ static public void F1(C c)
}
}
";
var verifier = CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), expectedOutput: @"---
var verifier = CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), verify: Verification.Fails, expectedOutput: @"---
F1
---
F1
......
......@@ -14606,7 +14606,7 @@ unsafe static bool[] AllOnesBool()
}
";
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, expectedOutput: @""
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @""
).VerifyIL("Program.TestArrElement(bool[])",
@"
{
......@@ -15917,7 +15917,7 @@ unsafe public static void Main()
}
}", TestOptions.UnsafeReleaseExe);
CompileAndVerify(comp, expectedOutput: "24");
CompileAndVerify(comp, expectedOutput: "24", verify: Verification.Fails);
}
[Fact]
......
......@@ -39,7 +39,7 @@ static void Main()
S t = s;
}
}";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12")
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12", verify: Verification.Fails)
.VerifyIL("Program.Main",
@"{
// Code size 58 (0x3a)
......@@ -102,7 +102,7 @@ unsafe static void Main()
}
}
}";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12")
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12", verify: Verification.Fails)
.VerifyIL("Program.Main",
@"
{
......@@ -167,12 +167,12 @@ static void Main()
S t = s;
}
}";
var comp1 = CompileAndVerify(s1, options: TestOptions.UnsafeReleaseDll).Compilation;
var comp1 = CompileAndVerify(s1, options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes).Compilation;
var comp2 = CompileAndVerify(s2,
options: TestOptions.UnsafeReleaseExe,
additionalRefs: new MetadataReference[] { MetadataReference.CreateFromStream(comp1.EmitToStream()) },
expectedOutput: "12").Compilation;
expectedOutput: "12", verify: Verification.Fails).Compilation;
var f = (FieldSymbol)comp2.GlobalNamespace.GetTypeMembers("S")[0].GetMembers("x")[0];
Assert.Equal("x", f.Name);
......@@ -205,7 +205,7 @@ static void Main()
}
}
}";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12")
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12", verify: Verification.Fails)
.VerifyIL("Program.Main",
@"{
// Code size 36 (0x24)
......@@ -357,7 +357,7 @@ private static unsafe uint Test( AssemblyRecord* pStruct )
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "133")
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "133", verify: Verification.Fails)
.VerifyIL("Program.Test",
@"{
// Code size 20 (0x14)
......@@ -578,7 +578,7 @@ public unsafe struct Test
" + (layout == LayoutKind.Explicit ? "[FieldOffset(0)]" : "") + @"public fixed UInt32 Field[ 16 ];
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll,
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes,
symbolValidator: (m) =>
{
var test = m.GlobalNamespace.GetTypeMember("Test");
......@@ -610,7 +610,7 @@ public unsafe struct Test
" + (layout == LayoutKind.Explicit ? "[FieldOffset(0)]" : "") + @"public fixed UInt32 Field[ 16 ];
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll,
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes,
symbolValidator: (m) =>
{
var test = m.GlobalNamespace.GetTypeMember("Test");
......
......@@ -59,7 +59,7 @@ public static void Main(string[] args)
foreach (var x in new int*[] { y }) { }
}
}
}", options: TestOptions.UnsafeReleaseDll).VerifyIL("Test.Main", @"
}", options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("Test.Main", @"
{
// Code size 33 (0x21)
.maxstack 4
......
......@@ -3362,7 +3362,7 @@ static void Main()
X = x;
}
}";
CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), expectedOutput: "1");
CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), expectedOutput: "1", verify: Verification.Fails);
}
[Fact, WorkItem(1089276, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1089276")]
......@@ -3404,7 +3404,7 @@ static int Index
X = x;
}
}";
CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), expectedOutput:
CompileAndVerify(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), verify: Verification.Fails, expectedOutput:
@"get_Index
2
3");
......
......@@ -25,7 +25,7 @@ void M()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes);
compVerifier.VerifyIL("C.M", @"
{
// Code size 4 (0x4)
......@@ -52,7 +52,7 @@ void M(int* param)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
compVerifier.VerifyIL("C.M", @"
{
// Code size 12 (0xc)
......@@ -82,7 +82,7 @@ void M(int x)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes);
compVerifier.VerifyIL("C.M", @"
{
// Code size 4 (0x4)
......@@ -107,7 +107,7 @@ void M(int x, int* param)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
compVerifier.VerifyIL("C.M", @"
{
// Code size 13 (0xd)
......@@ -154,7 +154,7 @@ struct S2
public int x;
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
compVerifier.VerifyIL("C.M", @"
{
// Code size 38 (0x26)
......@@ -201,7 +201,7 @@ static void M()
static void Goo(int* p) { }
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
compVerifier.VerifyIL("C.M", @"
{
// Code size 12 (0xc)
......@@ -235,7 +235,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "123");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "123", verify: Verification.Fails);
// NOTE: p is optimized away, but & and * aren't.
compVerifier.VerifyIL("C.Main", @"
......@@ -272,7 +272,7 @@ static long Dereference(long* p)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "456");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "456", verify: Verification.Fails);
compVerifier.VerifyIL("C.Dereference", @"
{
......@@ -300,7 +300,7 @@ static void Main()
}
}
";
var compVerifierOptimized = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "2");
var compVerifierOptimized = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "2", verify: Verification.Fails);
// NOTE: p is optimized away, but & and * aren't.
compVerifierOptimized.VerifyIL("C.Main", @"
......@@ -319,7 +319,7 @@ .maxstack 2
IL_000d: ret
}
");
var compVerifierUnoptimized = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: "2");
var compVerifierUnoptimized = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: "2", verify: Verification.Fails);
compVerifierUnoptimized.VerifyIL("C.Main", @"
{
......@@ -363,7 +363,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "1");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "1", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -416,7 +416,7 @@ static void Swap(byte* p1, byte* p2)
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"Before: 2 7
After: 7 2");
After: 7 2", verify: Verification.Fails);
compVerifier.VerifyIL("C.Swap", @"
{
......@@ -462,7 +462,7 @@ static void Incr(ref char c)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"ab");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"ab", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -510,7 +510,7 @@ void Mutate()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -557,7 +557,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"3");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"3", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -575,7 +575,7 @@ .maxstack 2
}
");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"3");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"3", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -615,7 +615,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -639,7 +639,7 @@ .maxstack 2
}
");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -690,7 +690,7 @@ static class Extensions
public static void M(this S s, int x, int y) { Console.Write(3); }
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -712,7 +712,7 @@ .maxstack 3
}
");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -766,7 +766,7 @@ static class Extensions
public static void M(this S s, int x, int y) { Console.Write(3); }
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123", verify: Verification.Fails);
compVerifier.VerifyIL("S.Test(ref S*)", @"
{
......@@ -789,7 +789,7 @@ .maxstack 3
}
");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, additionalRefs: new[] { LinqAssemblyRef }, expectedOutput: @"123", verify: Verification.Fails);
compVerifier.VerifyIL("S.Test(ref S*)", @"
{
......@@ -833,7 +833,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -871,7 +871,7 @@ .maxstack 4
}
");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34");
compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"34", verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -947,7 +947,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails);
// The conversions differ from dev10 in the same way as for numeric addition.
// Note that, unlike for numeric addition, the add operation is never checked.
......@@ -1067,7 +1067,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails);
compVerifier.VerifyIL("S.Main", @"
{
......@@ -1114,7 +1114,7 @@ static void Main()
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
1
0
-1");
-1", verify: Verification.Fails);
}
[Fact]
......@@ -1140,7 +1140,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "210");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "210", verify: Verification.Fails);
}
[Fact]
......@@ -1160,7 +1160,7 @@ static void Main()
}
";
// NOTE: no pointer arithmetic - just dereference p.
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "1").VerifyIL("C.Main", @"
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "1", verify: Verification.Fails).VerifyIL("C.Main", @"
{
// Code size 12 (0xc)
.maxstack 1
......@@ -1201,7 +1201,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"1");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"1", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -1259,7 +1259,7 @@ public void Test()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"123");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"123", verify: Verification.Fails);
compVerifier.VerifyIL("Program.S1.Test()", @"
{
......@@ -1317,7 +1317,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -1387,7 +1387,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -1449,7 +1449,7 @@ unsafe static void M(C c)
}
}
}";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
compVerifier.VerifyIL("C.M(C)",
@"
{
......@@ -1522,7 +1522,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"12", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -1588,7 +1588,7 @@ unsafe static void M(out char ch)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"a");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"a", verify: Verification.Fails);
compVerifier.VerifyIL("C.M", @"
{
......@@ -1633,7 +1633,7 @@ unsafe static void M(out char ch)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"a");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"a", verify: Verification.Fails);
compVerifier.VerifyIL("C.M", @"
{
......@@ -1677,7 +1677,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"h");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"h", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -1734,7 +1734,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"hTrue");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: @"hTrue", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -1819,7 +1819,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"hTrue");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"hTrue", verify: Verification.Fails);
// Null checks and branches are much simpler, but string temps are NOT optimized away.
compVerifier.VerifyIL("C.Main", @"
......@@ -1890,7 +1890,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"01");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"01", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -1958,7 +1958,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"01");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"01", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -2026,7 +2026,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"01");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"01", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -2097,7 +2097,7 @@ static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"970104");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"970104", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
......@@ -2188,7 +2188,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 32 (0x20)
......@@ -2250,7 +2250,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 31 (0x1f)
......@@ -2313,7 +2313,7 @@ void Test()
}
";
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 26 (0x1a)
......@@ -2369,7 +2369,7 @@ void Test()
}
";
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test",
@"{
// Code size 34 (0x22)
......@@ -2430,7 +2430,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 36 (0x24)
......@@ -2491,7 +2491,7 @@ void Test()
}
";
// Neither inner nor outer has finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 45 (0x2d)
......@@ -2551,7 +2551,7 @@ void Test()
}
";
// Inner and outer both have finally blocks.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 50 (0x32)
......@@ -2627,7 +2627,7 @@ void Test()
}
";
// Outer has finally, inner does not.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 48 (0x30)
......@@ -2711,7 +2711,7 @@ void Test()
// 1) nothing blows up with triple-nesting, and
// 2) none of the fixed statements has a try-finally.
// CONSIDER: Shorter test that performs the same checks.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 187 (0xbb)
......@@ -2841,7 +2841,7 @@ void Test()
";
// CONSIDER: This is sort of silly since the using is optimized away.
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 26 (0x1a)
......@@ -2892,7 +2892,7 @@ void Test()
}
";
// Cleanup not in finally (matches dev11, but not clear why).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 47 (0x2f)
......@@ -2957,7 +2957,7 @@ void Test(int[] array)
";
// Cleanup in finally.
// CONSIDER: dev11 is smarter and skips the try-finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 46 (0x2e)
......@@ -3041,7 +3041,7 @@ class Enumerator : System.IDisposable
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 62 (0x3e)
......@@ -3121,7 +3121,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.<>c.<Test>b__0_0()", @"
{
// Code size 26 (0x1a)
......@@ -3177,7 +3177,7 @@ void Test()
}
";
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.<>c.<Test>b__0_0()", @"
{
// Code size 23 (0x17)
......@@ -3222,7 +3222,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.<>c.<Test>b__0_0()", @"
{
// Code size 26 (0x1a)
......@@ -3276,7 +3276,7 @@ unsafe class C
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.<>c.<.ctor>b__1_0()", @"
{
// Code size 26 (0x1a)
......@@ -3326,7 +3326,7 @@ unsafe class C
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.<>c.<.ctor>b__1_0()", @"
{
// Code size 26 (0x1a)
......@@ -3378,7 +3378,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 27 (0x1b)
......@@ -3432,7 +3432,7 @@ void Test()
";
// Cleanup in finally.
// CONSIDER: dev11 doesn't have a finally here, but that seems incorrect.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 26 (0x1a)
......@@ -3485,7 +3485,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 27 (0x1b)
......@@ -3539,7 +3539,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 26 (0x1a)
......@@ -3589,7 +3589,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 26 (0x1a)
......@@ -3639,7 +3639,7 @@ void Test()
}
";
// Cleanup in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 26 (0x1a)
......@@ -3688,7 +3688,7 @@ void Test()
}
";
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 22 (0x16)
......@@ -3728,7 +3728,7 @@ void Test()
}
";
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 21 (0x15)
......@@ -3769,7 +3769,7 @@ void Test()
}
";
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 36 (0x24)
......@@ -3827,7 +3827,7 @@ void Test()
// branches out or not. We should be conservative and assume that
// it does.
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 23 (0x17)
......@@ -3891,7 +3891,7 @@ void Test()
}
";
// Cleanup not in finally.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 103 (0x67)
......@@ -3958,7 +3958,7 @@ void Test()
}
}
}";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).
VerifyIL("C.Test", @"
{
// Code size 23 (0x17)
......@@ -4040,8 +4040,8 @@ .maxstack 2
var expectedOutput = @"False
True";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL);
}
[Fact]
......@@ -4091,8 +4091,8 @@ .maxstack 1
";
var expectedOutput = @"a";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL);
}
[Fact]
......@@ -4128,7 +4128,7 @@ void M(int* pi, void* pv, sbyte sb, byte b, short s, ushort us, int i, uint ui,
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", @"
{
// Code size 65 (0x41)
.maxstack 1
......@@ -4218,7 +4218,7 @@ void M(int* pi, void* pv, sbyte sb, byte b, short s, ushort us, int i, uint ui,
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", @"
{
// Code size 65 (0x41)
.maxstack 1
......@@ -4308,7 +4308,7 @@ void M(int* pi, void* pv, sbyte sb, byte b, short s, ushort us, int i, uint ui,
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", @"
{
// Code size 79 (0x4f)
.maxstack 1
......@@ -4398,7 +4398,7 @@ void M(int* pi, void* pv, sbyte sb, byte b, short s, ushort us, int i, uint ui,
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", @"
{
// Code size 79 (0x4f)
.maxstack 1
......@@ -4539,8 +4539,8 @@ .maxstack 1
IL_0042: ret
}
";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", expectedIL);
}
[Fact]
......@@ -4602,8 +4602,8 @@ .maxstack 1
IL_0042: ret
}
";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", expectedIL);
}
[Fact]
......@@ -4709,8 +4709,8 @@ .maxstack 2
}
";
var expectedOutput = @"970104";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeDebugExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL, sequencePoints: "C.Main");
CompileAndVerify(string.Format(template, "checked "), options: TestOptions.UnsafeDebugExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL, sequencePoints: "C.Main");
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeDebugExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL, sequencePoints: "C.Main");
CompileAndVerify(string.Format(template, "checked "), options: TestOptions.UnsafeDebugExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL, sequencePoints: "C.Main");
}
[Fact]
......@@ -4766,8 +4766,8 @@ .maxstack 3
}
";
var expectedOutput = @"a";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("C.Main", expectedIL);
}
[Fact]
......@@ -4808,8 +4808,8 @@ .maxstack 1
IL_0016: ret
}
";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes).VerifyIL("C.M", expectedIL);
}
[Fact]
......@@ -4836,7 +4836,7 @@ static void Main()
}
}
";
CompileAndVerifyException<NotSupportedException>(text, "Type is not supported.", allowUnsafe: true);
CompileAndVerifyException<NotSupportedException>(text, "Type is not supported.", allowUnsafe: true, verify: Verification.Fails);
}
[Fact]
......@@ -4877,8 +4877,8 @@ .maxstack 1
IL_0016: ret
}
";
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "unchecked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes).VerifyIL("C.M", expectedIL);
CompileAndVerify(string.Format(template, "checked"), options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes).VerifyIL("C.M", expectedIL);
}
[Fact]
......@@ -4907,7 +4907,7 @@ static void Main()
}
}
";
CompileAndVerifyException<NotSupportedException>(text, "Type is not supported.", allowUnsafe: true);
CompileAndVerifyException<NotSupportedException>(text, "Type is not supported.", allowUnsafe: true, verify: Verification.Fails);
}
[Fact]
......@@ -4932,7 +4932,7 @@ static void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12").VerifyIL("C.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "12", verify: Verification.Fails).VerifyIL("C.Main", @"
{
// Code size 41 (0x29)
.maxstack 4
......@@ -4995,7 +4995,7 @@ static void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "1234").VerifyIL("C.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "1234", verify: Verification.Fails).VerifyIL("C.Main", @"
{
// Code size 120 (0x78)
.maxstack 5
......@@ -5108,7 +5108,7 @@ static void Main()
}
}
";
CompileAndVerifyException<NotSupportedException>(text, "Type is not supported.", allowUnsafe: true);
CompileAndVerifyException<NotSupportedException>(text, "Type is not supported.", allowUnsafe: true, verify: Verification.Fails);
}
#endregion Pointer conversion tests
......@@ -5156,7 +5156,7 @@ static void Main()
1
16
".Trim();
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Passes).VerifyIL("C.Main", @"
{
// Code size 80 (0x50)
.maxstack 1
......@@ -5243,7 +5243,7 @@ public struct Inner
".Trim();
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Passes).VerifyIL("C.Main", @"
{
// Code size 45 (0x2d)
.maxstack 1
......@@ -5285,7 +5285,7 @@ enum E3 : long { A }
1
8
".Trim();
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("C.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Passes).VerifyIL("C.Main", @"
{
// Code size 19 (0x13)
.maxstack 1
......@@ -5328,7 +5328,7 @@ static void Main()
";
// Dev10 has conv.u after IL_000d and conv.i8 in place of conv.u8 at IL_0017.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 59 (0x3b)
.maxstack 3
......@@ -5393,7 +5393,7 @@ static void Main()
";
// Dev10 has conv.u after IL_000d and conv.i8 in place of conv.u8 at IL_0017.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 59 (0x3b)
.maxstack 3
......@@ -5458,7 +5458,7 @@ static void Main()
";
// Dev10 has conv.u after IL_000d and conv.i8 in place of conv.u8 at IL_0017.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 59 (0x3b)
.maxstack 3
......@@ -5523,7 +5523,7 @@ static void Main()
";
// Dev10 has conv.u after IL_000d and conv.i8 in place of conv.u8 at IL_0017.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 59 (0x3b)
.maxstack 3
......@@ -5593,7 +5593,7 @@ void Test(int i, uint u, long l, ulong ul)
";
// NOTE: even when not optimized.
// NOTE: additional conversions applied to constants of type int and uint.
CompileAndVerify(text, options: TestOptions.UnsafeDebugDll).VerifyIL("C.Test", @"
CompileAndVerify(text, options: TestOptions.UnsafeDebugDll, verify: Verification.Fails).VerifyIL("C.Test", @"
{
// Code size 50 (0x32)
.maxstack 2
......@@ -5701,7 +5701,7 @@ void Test1(int i, uint u, long l, ulong ul)
// NOTE: even when not optimized.
// NOTE: additional conversions applied to constants of type int and uint.
// NOTE: identical to unchecked except "add" becomes "add.ovf.un".
var comp = CompileAndVerify(text, options: TestOptions.UnsafeDebugDll);
var comp = CompileAndVerify(text, options: TestOptions.UnsafeDebugDll, verify: Verification.Fails);
comp.VerifyIL("C.Test", @"
{
......@@ -5871,7 +5871,7 @@ static void Main()
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"2147483651
overflow
2").VerifyIL("S.Main", @"
2", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 67 (0x43)
.maxstack 2
......@@ -5955,7 +5955,7 @@ static void Main()
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "4").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "4", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 47 (0x2f)
.maxstack 2
......@@ -6019,7 +6019,7 @@ static void Main()
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "4").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "4", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 47 (0x2f)
.maxstack 2
......@@ -6078,7 +6078,7 @@ static int GetIndex()
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "I0").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "I0", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 74 (0x4a)
.maxstack 3
......@@ -6146,7 +6146,7 @@ static void Main()
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "8").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "8", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 103 (0x67)
.maxstack 3
......@@ -6253,7 +6253,7 @@ static int GetIndex()
expectedOutput = @"I8";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput).VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 78 (0x4e)
.maxstack 5
......@@ -6320,7 +6320,7 @@ static void Main()
";
// NOTE: don't use checked subtraction or division in either case (matches dev10).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "44").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "44", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 39 (0x27)
.maxstack 2
......@@ -6378,7 +6378,7 @@ static void Main()
";
// NOTE: don't use checked subtraction or division in either case (matches dev10).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "11").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "11", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 39 (0x27)
.maxstack 2
......@@ -6434,7 +6434,7 @@ static void Main()
";
// NOTE: don't use checked subtraction or division in either case (matches dev10).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "11").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "11", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 29 (0x1d)
.maxstack 2
......@@ -6493,7 +6493,7 @@ static void Main()
";
// NOTE: don't use checked subtraction or division in either case (matches dev10).
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "01").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "01", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 43 (0x2b)
.maxstack 2
......@@ -6548,7 +6548,7 @@ static unsafe void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "2");
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "2", verify: Verification.Fails);
}
......@@ -6948,7 +6948,7 @@ public void CheckedNumericAdditionOverflow1()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Positive numbers, size = 4
......@@ -7049,7 +7049,7 @@ public void CheckedNumericAdditionOverflow2()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Negative numbers, size = 1
......@@ -7084,7 +7084,7 @@ public void CheckedNumericAdditionOverflow3()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: expectedOutput);
}
// Negative numbers, size = 4
......@@ -7119,7 +7119,7 @@ public void CheckedNumericAdditionOverflow4()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Positive numbers, size = 1
......@@ -7128,7 +7128,7 @@ public void CheckedNumericSubtractionOverflow1()
{
var text = MakeNumericOverflowTest(PositiveNumericSubtractionCasesTemplate, "S00", "Sub", "-", "checked");
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"
SubInt: Exception at 0 - 1
SubInt: Exception at 0 - int.MaxValue
......@@ -7155,7 +7155,7 @@ public void CheckedNumericSubtractionOverflow2()
{
var text = MakeNumericOverflowTest(PositiveNumericSubtractionCasesTemplate, "S02", "Sub", "-", "checked");
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"
SubInt: Exception at 0 - 1
SubInt: Exception at 0 - int.MaxValue
......@@ -7219,7 +7219,7 @@ public void CheckedNumericSubtractionOverflow3()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Negative numbers, size = 4
......@@ -7266,7 +7266,7 @@ public void CheckedNumericSubtractionOverflow4()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
[Fact]
......@@ -7296,7 +7296,7 @@ static void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Passes, expectedOutput: @"
No exception from addition
Exception from subtraction
");
......@@ -7346,7 +7346,7 @@ static void Main()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Passes);
}
[Fact]
......@@ -7384,7 +7384,7 @@ static void Main()
expectedOutput = @"-4294967295-4294967295";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
[Fact]
......@@ -7425,7 +7425,7 @@ static void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"
12
No exception for element access
Exception for add-then-dereference
......@@ -7534,7 +7534,7 @@ public void UncheckedNumericAdditionOverflow1()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Positive numbers, size = 4
......@@ -7635,7 +7635,7 @@ public void UncheckedNumericAdditionOverflow2()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Negative numbers, size = 1
......@@ -7670,7 +7670,7 @@ public void UncheckedNumericAdditionOverflow3()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Negative numbers, size = 4
......@@ -7705,7 +7705,7 @@ public void UncheckedNumericAdditionOverflow4()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Positive numbers, size = 1
......@@ -7762,7 +7762,7 @@ public void UncheckedNumericSubtractionOverflow1()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Positive numbers, size = 4
......@@ -7819,7 +7819,7 @@ public void UncheckedNumericSubtractionOverflow2()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Negative numbers, size = 1
......@@ -7866,7 +7866,7 @@ public void UncheckedNumericSubtractionOverflow3()
";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
// Negative numbers, size = 4
......@@ -7910,7 +7910,7 @@ public void UncheckedNumericSubtractionOverflow4()
SubLong: No exception at 0 - -int.MinValue (value = 18446744065119617024)";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
#endregion Unchecked pointer arithmetic overflow tests
......@@ -7958,7 +7958,7 @@ static void Write(bool b)
}
";
// NOTE: all comparisons unsigned.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "011010011010").VerifyIL("S.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "011010011010", verify: Verification.Fails).VerifyIL("S.Main", @"
{
// Code size 133 (0x85)
.maxstack 2
......@@ -8076,7 +8076,7 @@ static void Use(char * ptr)
}
";
// NOTE: conversion is always unchecked, multiplication is always checked.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", @"
{
// Code size 47 (0x2f)
.maxstack 2
......@@ -8133,7 +8133,7 @@ void M()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", @"
{
// Code size 16 (0x10)
.maxstack 1
......@@ -8170,7 +8170,7 @@ void M()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.M", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.M", @"
{
// Code size 12 (0xc)
.maxstack 1
......@@ -8216,7 +8216,7 @@ static void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"123
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"123
-456
");
}
......@@ -8257,7 +8257,7 @@ static void Use(int * ptr)
}
}
";
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe);
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails);
// Note that the stackalloc for p is written into a temp *before* the receiver (i.e. "this")
// for C.<>c__DisplayClass0.p is pushed onto the stack.
......@@ -8330,7 +8330,7 @@ static void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "0").VerifyIL("T.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "0", verify: Verification.Fails).VerifyIL("T.Main", @"
{
// Code size 41 (0x29)
.maxstack 2
......@@ -8353,7 +8353,7 @@ .maxstack 2
IL_0028: ret
}
");
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "0").VerifyIL("T.Main", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "0", verify: Verification.Fails).VerifyIL("T.Main", @"
{
// Code size 41 (0x29)
.maxstack 2
......@@ -8403,7 +8403,7 @@ private static unsafe int Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
// Code size 13 (0xd)
......@@ -8478,7 +8478,7 @@ static void SwapWithNext(int* p)
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"
1
1, 2
1, 2, 3
......@@ -8533,7 +8533,7 @@ Overflow from (S15*)0 + sizeof(S16)
No overflow from (S16*)0 + sizeof(S15)";
}
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: expectedOutput, verify: Verification.Fails);
}
[Fact]
......@@ -8557,7 +8557,7 @@ static void Main()
delegate void F2(int x);
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"2");
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"2", verify: Verification.Passes);
}
[Fact]
......@@ -8591,7 +8591,7 @@ void Test()
// NOTE: one pinned string temp and one unpinned string temp.
// That is, pinned temps are reused in by other pinned temps
// but not by unpinned temps and vice versa.
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll).VerifyIL("C.Test", @"
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails).VerifyIL("C.Test", @"
{
// Code size 99 (0x63)
.maxstack 4
......@@ -8675,12 +8675,12 @@ static void Main()
}}
}}
";
CompileAndVerify(string.Format(template, "int"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True");
CompileAndVerify(string.Format(template, "int*"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True");
CompileAndVerify(string.Format(template, "int**"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True");
CompileAndVerify(string.Format(template, "int[]"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True");
CompileAndVerify(string.Format(template, "int[][]"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True");
CompileAndVerify(string.Format(template, "int*[]"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True");
CompileAndVerify(string.Format(template, "int"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True", verify: Verification.Passes);
CompileAndVerify(string.Format(template, "int*"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True", verify: Verification.Passes);
CompileAndVerify(string.Format(template, "int**"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True", verify: Verification.Passes);
CompileAndVerify(string.Format(template, "int[]"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True", verify: Verification.Passes);
CompileAndVerify(string.Format(template, "int[][]"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True", verify: Verification.Passes);
CompileAndVerify(string.Format(template, "int*[]"), options: TestOptions.UnsafeReleaseExe, expectedOutput: @"True", verify: Verification.Passes);
}
#endregion Functional tests
......@@ -8961,7 +8961,7 @@ static void Main()
}
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "b");
CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "b", verify: Verification.Fails);
}
[Fact, WorkItem(546865, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/546865")]
......@@ -9005,7 +9005,7 @@ static ulong Test2()
}
";
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "hello");
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "hello", verify: Verification.Fails);
// Note that the pointer local is not scheduled on the stack.
verifier.VerifyIL("Test.Test1", @"
......@@ -9074,7 +9074,7 @@ static void Main()
}
";
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
var verifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"
True
True");
......@@ -9154,7 +9154,7 @@ static void Main()
}
";
var verifier = CompileAndVerify(text, new[] { SystemCoreRef }, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"
var verifier = CompileAndVerify(text, new[] { SystemCoreRef }, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"
2
2");
......@@ -9206,7 +9206,7 @@ public struct S2
}
";
var verifier = CompileAndVerify(text, new[] { SystemCoreRef }, options: TestOptions.UnsafeReleaseDll.WithConcurrentBuild(false));
var verifier = CompileAndVerify(text, new[] { SystemCoreRef }, options: TestOptions.UnsafeReleaseDll.WithConcurrentBuild(false), verify: Verification.Passes);
}
[Fact, WorkItem(531327, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/531327")]
......@@ -9230,7 +9230,7 @@ unsafe struct S1
";
var verifier = CompileAndVerify(text, new[] { SystemCoreRef }, options: TestOptions.UnsafeReleaseDll.WithConcurrentBuild(false));
var verifier = CompileAndVerify(text, new[] { SystemCoreRef }, options: TestOptions.UnsafeReleaseDll.WithConcurrentBuild(false), verify: Verification.Fails);
}
[Fact, WorkItem(748530, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/748530")]
......@@ -9270,7 +9270,7 @@ static void Main(string[] args)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F6543210");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F6543210", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
// Code size 36 (0x24)
......@@ -9316,7 +9316,7 @@ static void Main(string[] args)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F6543210");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F6543210", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
// Code size 40 (0x28)
......@@ -9365,7 +9365,7 @@ static void Main(string[] args)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F6543210");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F6543210", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
// Code size 34 (0x22)
......@@ -9407,7 +9407,7 @@ static void Main(string[] args)
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F654320F");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "F654320F", verify: Verification.Fails);
compVerifier.VerifyIL("C.Main", @"
{
// Code size 33 (0x21)
......@@ -9450,7 +9450,7 @@ public static void Main()
}
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "0");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "0", verify: Verification.Passes);
compVerifier.VerifyIL("C..ctor", @"
{
// Code size 21 (0x15)
......@@ -9504,7 +9504,7 @@ public static byte[] ToManagedByteArray(uint byteCount)
}
";
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "System.Byte[]");
var compVerifier = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, expectedOutput: "System.Byte[]", verify: Verification.Fails);
compVerifier.VerifyIL("C.ToManagedByteArray", @"
{
// Code size 42 (0x2a)
......@@ -9577,7 +9577,7 @@ public static byte[] ToManagedByteArray(uint byteCount)
}
";
var v = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: "System.Byte[]");
var v = CompileAndVerify(text, options: TestOptions.UnsafeDebugExe, expectedOutput: "System.Byte[]", verify: Verification.Fails);
v.VerifyIL("C.ToManagedByteArray", @"
{
// Code size 64 (0x40)
......@@ -9724,7 +9724,7 @@ static void Main()
}
}
";
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, expectedOutput: "OK");
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, expectedOutput: "OK", verify: Verification.Passes);
}
#endregion
......
......@@ -3724,7 +3724,7 @@ public static void Main()
}";
// Setting the CompilationOption.AllowUnsafe causes an entry to be inserted into the DeclSecurity table
var compilation = CreateStandardCompilation(source, options: TestOptions.UnsafeReleaseDll);
CompileAndVerify(compilation, symbolValidator: module =>
CompileAndVerify(compilation, verify: Verification.Passes, symbolValidator: module =>
{
ValidateDeclSecurity(module, new DeclSecurityEntry
{
......@@ -3967,7 +3967,7 @@ public static void Main()
// [assembly: SecurityPermission(SecurityAction.RequestMinimum, RemotingConfiguration = true)]
Diagnostic(ErrorCode.WRN_DeprecatedSymbolStr, "SecurityAction.RequestMinimum").WithArguments("System.Security.Permissions.SecurityAction.RequestMinimum", "Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information."));
CompileAndVerify(compilation, symbolValidator: module =>
CompileAndVerify(compilation, verify: Verification.Passes, symbolValidator: module =>
{
ValidateDeclSecurity(module, new DeclSecurityEntry
{
......@@ -4024,7 +4024,7 @@ public static void Main()
// [assembly: SecurityPermission(SecurityAction.RequestOptional, RemotingConfiguration = true)]
Diagnostic(ErrorCode.WRN_DeprecatedSymbolStr, "SecurityAction.RequestOptional").WithArguments("System.Security.Permissions.SecurityAction.RequestOptional", "Assembly level declarative security is obsolete and is no longer enforced by the CLR by default. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information."));
CompileAndVerify(compilation, symbolValidator: module =>
CompileAndVerify(compilation, verify: Verification.Passes, symbolValidator: module =>
{
ValidateDeclSecurity(module, new DeclSecurityEntry
{
......
......@@ -1225,7 +1225,7 @@ File 1
True
";
CompilationVerifier verifier = CompileAndVerify(source + InstrumentationHelperSource, options: TestOptions.UnsafeDebugExe, expectedOutput: expectedOutput);
CompilationVerifier verifier = CompileAndVerify(source + InstrumentationHelperSource, options: TestOptions.UnsafeDebugExe, expectedOutput: expectedOutput, verify: Verification.Fails);
verifier.VerifyDiagnostics();
}
......@@ -3211,9 +3211,9 @@ private static void AssertInstrumented(CompilationVerifier verifier, string qual
Assert.True(expected == instrumented, $"Method '{qualifiedMethodName}' should {(expected ? "be" : "not be")} instrumented. Actual IL:{Environment.NewLine}{il}");
}
private CompilationVerifier CompileAndVerify(string source, string expectedOutput = null, CompilationOptions options = null)
private CompilationVerifier CompileAndVerify(string source, string expectedOutput = null, CompilationOptions options = null, Verification verify = Verification.Passes)
{
return base.CompileAndVerify(source, expectedOutput: expectedOutput, additionalRefs: s_refs, options: (options ?? TestOptions.ReleaseExe).WithDeterministic(true), emitOptions: EmitOptions.Default.WithInstrumentationKinds(ImmutableArray.Create(InstrumentationKind.TestCoverage)));
return base.CompileAndVerify(source, expectedOutput: expectedOutput, additionalRefs: s_refs, options: (options ?? TestOptions.ReleaseExe).WithDeterministic(true), emitOptions: EmitOptions.Default.WithInstrumentationKinds(ImmutableArray.Create(InstrumentationKind.TestCoverage)), verify: verify);
}
private CompilationVerifier CompileAndVerify((string Path, string Content)[] sources, string expectedOutput = null, CSharpCompilationOptions options = null)
......
......@@ -39,7 +39,7 @@ unsafe public static void Main()
new[] { TestReferences.SymbolsTests.CustomModifiers.Modifiers.dll },
options: TestOptions.UnsafeReleaseExe);
CompileAndVerify(c, expectedOutput:
CompileAndVerify(c, verify: Verification.Passes, expectedOutput:
@"F1
F2
F3
......@@ -701,7 +701,7 @@ static void Main()
}";
var compilation = CreateCompilationWithCustomILSource(source, ilSource, options: TestOptions.UnsafeReleaseExe);
compilation.VerifyDiagnostics();
CompileAndVerify(compilation);
CompileAndVerify(compilation, verify: Verification.Fails);
}
[Fact]
......@@ -735,7 +735,7 @@ static void Main()
}";
var compilation = CreateCompilationWithCustomILSource(source, ilSource, options: TestOptions.UnsafeReleaseExe);
compilation.VerifyDiagnostics();
CompileAndVerify(compilation);
CompileAndVerify(compilation, verify: Verification.Fails);
}
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.CodeAnalysis.CSharp.Symbols;
......@@ -3398,7 +3398,7 @@ unsafe static void Main()
static T Goo<T>(Action<T, T> x) { throw null; }
}
";
var verifier = CompileAndVerify(source, options: TestOptions.DebugDll.WithAllowUnsafe(true)).VerifyDiagnostics();
var verifier = CompileAndVerify(source, options: TestOptions.DebugDll.WithAllowUnsafe(true), verify: Verification.Fails).VerifyDiagnostics();
var tree = verifier.Compilation.SyntaxTrees.Single();
var model = verifier.Compilation.GetSemanticModel(tree);
......@@ -3425,7 +3425,7 @@ unsafe static void Main()
static T Goo<T>(Action<T, T> x) { throw null; }
}
";
var verifier = CompileAndVerify(source, options: TestOptions.DebugDll.WithAllowUnsafe(true)).VerifyDiagnostics();
var verifier = CompileAndVerify(source, options: TestOptions.DebugDll.WithAllowUnsafe(true), verify: Verification.Fails).VerifyDiagnostics();
var tree = verifier.Compilation.SyntaxTrees.Single();
var model = verifier.Compilation.GetSemanticModel(tree);
......
......@@ -765,7 +765,7 @@ static void Main()
// default(IntPtr) as "load zero, convert to type", rather than making a stack slot and calling
// init on it.
var c = CompileAndVerify(source, options: TestOptions.UnsafeReleaseDll);
var c = CompileAndVerify(source, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
c.VerifyIL("C.Main", @"{
// Code size 13 (0xd)
......
......@@ -5690,7 +5690,7 @@ static bool TakeOutParam(string y, out string x)
}
";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), parseOptions: TestOptions.Regular);
CompileAndVerify(compilation, expectedOutput:
CompileAndVerify(compilation, verify: Verification.Fails, expectedOutput:
@"fixed
fixed");
}
......@@ -5724,7 +5724,7 @@ static bool TakeOutParam(string y, out string x)
}
";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe.WithAllowUnsafe(true), parseOptions: TestOptions.Regular);
CompileAndVerify(compilation, expectedOutput:
CompileAndVerify(compilation, verify: Verification.Fails, expectedOutput:
@"fixed
fixed");
}
......@@ -2622,7 +2622,7 @@ public static int Main()
}
}
";
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, expectedOutput: @"2
CompileAndVerify(source, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails, expectedOutput: @"2
True
3
3
......
......@@ -2630,7 +2630,7 @@ static int[] Dummy(object y, object z)
}
";
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe.WithAllowUnsafe(true));
CompileAndVerify(compilation, expectedOutput:
CompileAndVerify(compilation, verify: Verification.Fails, expectedOutput:
@"fixed
fixed");
}
......@@ -6476,7 +6476,7 @@ unsafe static void Main()
False";
var compilation = CreateStandardCompilation(source, options: TestOptions.UnsafeReleaseExe);
compilation.VerifyDiagnostics();
CompileAndVerify(compilation, expectedOutput: expectedOutput);
CompileAndVerify(compilation, expectedOutput: expectedOutput, verify: Verification.Fails);
}
[Fact]
......
......@@ -8129,7 +8129,7 @@ unsafe static void Load()
}
";
var compilation = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe);
var compilation = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails);
compilation.VerifyIL("Program.Store", @"
{
......@@ -8246,7 +8246,7 @@ unsafe static void Load()
//IL Baseline rather than execute because I'm intentionally writing outside of bounds of buffer
// This will compile without warning but runtime behavior is unpredictable.
var compilation = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe);
var compilation = CompileAndVerify(text, options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails);
compilation.VerifyIL("Program.Load", @"
{
// Code size 47 (0x2f)
......@@ -8325,7 +8325,7 @@ void Error_UsingFixedBuffersWithThis()
}
";
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll);
CompileAndVerify(text, options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails);
}
[Fact]
......@@ -8406,10 +8406,10 @@ unsafe static void Load()
}
}";
var comp1 = CompileAndVerify(s1, options: TestOptions.UnsafeReleaseDll).Compilation;
var comp1 = CompileAndVerify(s1, options: TestOptions.UnsafeReleaseDll, verify: Verification.Passes).Compilation;
var comp2 = CompileAndVerify(s2,
options: TestOptions.UnsafeReleaseExe,
options: TestOptions.UnsafeReleaseExe, verify: Verification.Fails,
additionalRefs: new MetadataReference[] { MetadataReference.CreateFromImage(comp1.EmitToArray()) },
expectedOutput: "TrueFalse").Compilation;
......@@ -8461,7 +8461,7 @@ unsafe static void Load()
// Only compile this as its intentionally writing outside of fixed buffer boundaries and
// this doesn't warn but causes flakiness when executed.
var comp3 = CompileAndVerify(s3,
options: TestOptions.UnsafeReleaseDll,
options: TestOptions.UnsafeReleaseDll, verify: Verification.Fails,
additionalRefs: new MetadataReference[] { MetadataReference.CreateFromImage(comp1.EmitToArray()) }).Compilation;
}
......
......@@ -626,17 +626,17 @@ public static MetadataReference CreateMetadataReferenceFromIlSource(string ilSou
/// <typeparam name="T">Expected type of the exception.</typeparam>
/// <param name="source">Program to compile and execute.</param>
/// <param name="expectedMessage">Ignored if null.</param>
internal CompilationVerifier CompileAndVerifyException<T>(string source, string expectedMessage = null, bool allowUnsafe = false) where T : Exception
internal CompilationVerifier CompileAndVerifyException<T>(string source, string expectedMessage = null, bool allowUnsafe = false, Verification verify = Verification.Passes) where T : Exception
{
var comp = CreateStandardCompilation(source, options: TestOptions.ReleaseExe.WithAllowUnsafe(allowUnsafe));
return CompileAndVerifyException<T>(comp, expectedMessage);
return CompileAndVerifyException<T>(comp, expectedMessage, verify);
}
internal CompilationVerifier CompileAndVerifyException<T>(CSharpCompilation comp, string expectedMessage = null) where T : Exception
internal CompilationVerifier CompileAndVerifyException<T>(CSharpCompilation comp, string expectedMessage = null, Verification verify = Verification.Passes) where T : Exception
{
try
{
CompileAndVerify(comp, expectedOutput: ""); //need expected output to force execution
CompileAndVerify(comp, expectedOutput: "", verify: verify); //need expected output to force execution
Assert.False(true, string.Format("Expected exception {0}({1})", typeof(T).Name, expectedMessage));
}
catch (ExecutionException x)
......@@ -649,7 +649,7 @@ public static MetadataReference CreateMetadataReferenceFromIlSource(string ilSou
}
}
return CompileAndVerify(comp);
return CompileAndVerify(comp, verify: verify);
}
protected static List<SyntaxNode> GetSyntaxNodeList(SyntaxTree syntaxTree)
......
......@@ -131,13 +131,6 @@ public abstract partial class CommonTestBase : TestBase
(compilation.Options.OutputKind == OutputKind.ConsoleApplication || compilation.Options.OutputKind == OutputKind.WindowsApplication),
"Compilation must be executable if output is expected.");
if (verify == Verification.Passes)
{
// Unsafe code might not verify, so don't try.
var csharpOptions = compilation.Options as CSharp.CSharpCompilationOptions;
verify = (csharpOptions == null || !csharpOptions.AllowUnsafe) ? Verification.Passes : Verification.Skipped;
}
if (sourceSymbolValidator != null)
{
var module = compilation.Assembly.Modules.First();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册