diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs index 9f8c1522da..eed5b3e8ac 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs @@ -2823,6 +2823,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver ResolveResult IAstVisitor.VisitUnsafeStatement(UnsafeStatement unsafeStatement) { + resolver = resolver.PushBlock(); + ScanChildren(unsafeStatement); + resolver = resolver.PopBlock(); return voidResult; } #endregion diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs index a7033621d9..33bc534f83 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs @@ -970,5 +970,24 @@ class MainClass : Test Assert.IsFalse(result.IsError); Assert.AreEqual("Test.Foo.Bar", result.Member.FullName); } + + [Test] + public void LocalInsideUnsafeBlock() + { + string program = @"class A { + void Method() { + unsafe { + string a; + string b = $a$; + } + } +} +"; + LocalResolveResult result = Resolve(program); + Assert.AreEqual("a", result.Variable.Name); + Assert.IsFalse(result.IsParameter); + + Assert.AreEqual("System.String", result.Type.FullName); + } } }