Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
88fd618d
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,发现更多精彩内容 >>
未验证
提交
88fd618d
编写于
9月 13, 2019
作者:
R
Rikki Gibson
提交者:
GitHub
9月 13, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix crash when Nullable<T> creation takes dynamic argument (#38647)
上级
09fb8d10
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
28 addition
and
5 deletion
+28
-5
src/Compilers/CSharp/Portable/FlowAnalysis/NullableWalker.cs
src/Compilers/CSharp/Portable/FlowAnalysis/NullableWalker.cs
+7
-5
src/Compilers/CSharp/Test/Semantic/Semantics/NullableReferenceTypesTests.cs
...rp/Test/Semantic/Semantics/NullableReferenceTypesTests.cs
+21
-0
未找到文件。
src/Compilers/CSharp/Portable/FlowAnalysis/NullableWalker.cs
浏览文件 @
88fd618d
...
...
@@ -1712,6 +1712,7 @@ public override BoundNode VisitObjectCreationExpression(BoundObjectCreationExpre
return
null
;
}
#
nullable
enable
private
void
VisitObjectOrDynamicObjectCreation
(
BoundExpression
node
,
ImmutableArray
<
BoundExpression
>
arguments
,
...
...
@@ -1724,9 +1725,9 @@ public override BoundNode VisitObjectCreationExpression(BoundObjectCreationExpre
var
argumentTypes
=
argumentResults
.
SelectAsArray
(
ar
=>
ar
.
RValueType
);
int
slot
=
-
1
;
TypeSymbol
type
=
node
.
Type
;
NullableFlowState
resultState
=
NullableFlowState
.
NotNull
;
if
(
(
object
)
type
!=
null
)
var
type
=
node
.
Type
;
var
resultState
=
NullableFlowState
.
NotNull
;
if
(
type
is
object
)
{
slot
=
GetOrCreatePlaceholderSlot
(
node
);
if
(
slot
>
0
)
...
...
@@ -1737,7 +1738,7 @@ public override BoundNode VisitObjectCreationExpression(BoundObjectCreationExpre
if
(
EmptyStructTypeCache
.
IsTrackableStructType
(
type
))
{
var
tupleType
=
constructor
?.
ContainingType
as
TupleTypeSymbol
;
if
(
(
object
)
tupleType
!=
null
&&
!
isDefaultValueTypeConstructor
)
if
(
tupleType
is
object
&&
!
isDefaultValueTypeConstructor
)
{
// new System.ValueTuple<T1, ..., TN>(e1, ..., eN)
TrackNullableStateOfTupleElements
(
slot
,
tupleType
,
arguments
,
argumentTypes
,
useRestField
:
true
);
...
...
@@ -1758,7 +1759,7 @@ public override BoundNode VisitObjectCreationExpression(BoundObjectCreationExpre
// a nullable value type created with its default constructor is by definition null
resultState
=
NullableFlowState
.
MaybeNull
;
}
else
if
(
constructor
.
ParameterCount
==
1
)
else
if
(
constructor
?
.
ParameterCount
==
1
)
{
// if we deal with one-parameter ctor that takes underlying, then Value state is inferred from the argument.
var
parameterType
=
constructor
.
ParameterTypesWithAnnotations
[
0
];
...
...
@@ -1785,6 +1786,7 @@ public override BoundNode VisitObjectCreationExpression(BoundObjectCreationExpre
SetResultType
(
node
,
TypeWithState
.
Create
(
type
,
resultState
));
}
#
nullable
restore
private
void
VisitObjectCreationInitializer
(
Symbol
containingSymbol
,
int
containingSlot
,
BoundExpression
node
)
{
...
...
src/Compilers/CSharp/Test/Semantic/Semantics/NullableReferenceTypesTests.cs
浏览文件 @
88fd618d
...
...
@@ -102676,6 +102676,27 @@ static void F()
Diagnostic(ErrorCode.WRN_NullReferenceReceiver, "z.Value.F").WithLocation(20, 9));
}
[Fact, WorkItem(38575, "https://github.com/dotnet/roslyn/issues/38575")]
public void NullableCtor_Dynamic()
{
var source = @"
using System;
class C
{
void M()
{
var value = GetValue((dynamic)"""");
_ = new DateTime?(value);
}
DateTime GetValue(object o) => default;
}
";
var comp = CreateCompilation(source, options: WithNonNullTypesTrue());
comp.VerifyDiagnostics();
}
[Fact]
public void NullableT_AlwaysTrueOrFalse()
{
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录