Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
6b88ea63
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6b88ea63
编写于
1月 09, 2017
作者:
V
VSadov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
CR feedback
上级
b4478d3d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
52 addition
and
2 deletion
+52
-2
src/Compilers/CSharp/Portable/FlowAnalysis/DataFlowPass.cs
src/Compilers/CSharp/Portable/FlowAnalysis/DataFlowPass.cs
+1
-2
src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenDeconstructTests.cs
...ilers/CSharp/Test/Emit/CodeGen/CodeGenDeconstructTests.cs
+51
-0
未找到文件。
src/Compilers/CSharp/Portable/FlowAnalysis/DataFlowPass.cs
浏览文件 @
6b88ea63
...
...
@@ -1577,8 +1577,6 @@ public override BoundNode VisitForEachStatement(BoundForEachStatement node)
// NOTE: iteration variables are not declared or assigned
// before the collection expression is evaluated
var
result
=
base
.
VisitForEachStatement
(
node
);
// NOTE: do not report unused iteration variables. They are always considered used.
return
result
;
}
...
...
@@ -2188,6 +2186,7 @@ public override void VisitForEachIterationVariables(BoundForEachStatement node)
Debug
.
Assert
((
object
)
iterationVariable
!=
null
);
int
slot
=
GetOrCreateSlot
(
iterationVariable
);
if
(
slot
>
0
)
SetSlotAssigned
(
slot
);
// NOTE: do not report unused iteration variables. They are always considered used.
NoteWrite
(
iterationVariable
,
null
,
read
:
true
);
}
}
...
...
src/Compilers/CSharp/Test/Emit/CodeGen/CodeGenDeconstructTests.cs
浏览文件 @
6b88ea63
...
...
@@ -6192,5 +6192,56 @@ public static void Test5(IEnumerable<((int, int), string)> en)
CompileAndVerify
(
compilation
,
expectedOutput
:
"0"
);
}
[
Fact
]
[
WorkItem
(
16106
,
"https://github.com/dotnet/roslyn/issues/16106"
)]
public
void
DefAssignmentsStruct002
()
{
string
source
=
@"
public class MyClass
{
public static void Main()
{
var data = new int[10];
var arr = new int[2];
foreach (arr[out int size] in data) {}
}
}
"
;
var
compilation
=
CreateCompilationWithMscorlib
(
source
,
references
:
s_valueTupleRefs
);
compilation
.
VerifyDiagnostics
(
// (9,36): error CS0230: Type and identifier are both required in a foreach statement
// foreach (arr[out int size] in data) {}
Diagnostic
(
ErrorCode
.
ERR_BadForeachDecl
,
"in"
).
WithLocation
(
9
,
36
)
);
}
[
Fact
]
[
WorkItem
(
16106
,
"https://github.com/dotnet/roslyn/issues/16106"
)]
public
void
DefAssignmentsStruct003
()
{
string
source
=
@"
public class MyClass
{
public static void Main()
{
var data = new (int, int)[10];
var arr = new int[2];
foreach ((arr[out int size], int b) in data) {}
}
}
"
;
var
compilation
=
CreateCompilationWithMscorlib
(
source
,
references
:
s_valueTupleRefs
);
compilation
.
VerifyDiagnostics
(
// (9,27): error CS1615: Argument 1 may not be passed with the 'out' keyword
// foreach ((arr[out int size], int b) in data) {}
Diagnostic
(
ErrorCode
.
ERR_BadArgExtraRef
,
"int size"
).
WithArguments
(
"1"
,
"out"
).
WithLocation
(
9
,
27
),
// (9,18): error CS8186: A foreach loop must declare its iteration variables.
// foreach ((arr[out int size], int b) in data) {}
Diagnostic
(
ErrorCode
.
ERR_MustDeclareForeachIteration
,
"(arr[out int size], int b)"
).
WithLocation
(
9
,
18
)
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录