{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/roslyn/issues/27686","repository_url":"https://api.github.com/repos/dotnet/roslyn","labels_url":"https://api.github.com/repos/dotnet/roslyn/issues/27686/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/roslyn/issues/27686/comments","events_url":"https://api.github.com/repos/dotnet/roslyn/issues/27686/events","html_url":"https://github.com/dotnet/roslyn/issues/27686","id":330982666,"node_id":"MDU6SXNzdWUzMzA5ODI2NjY=","number":27686,"title":"What is the null-state of a local declared with an oblivious value?","user":{"login":"jcouv","id":12466233,"node_id":"MDQ6VXNlcjEyNDY2MjMz","avatar_url":"https://avatars2.githubusercontent.com/u/12466233?v=4","gravatar_id":"","url":"https://api.github.com/users/jcouv","html_url":"https://github.com/jcouv","followers_url":"https://api.github.com/users/jcouv/followers","following_url":"https://api.github.com/users/jcouv/following{/other_user}","gists_url":"https://api.github.com/users/jcouv/gists{/gist_id}","starred_url":"https://api.github.com/users/jcouv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcouv/subscriptions","organizations_url":"https://api.github.com/users/jcouv/orgs","repos_url":"https://api.github.com/users/jcouv/repos","events_url":"https://api.github.com/users/jcouv/events{/privacy}","received_events_url":"https://api.github.com/users/jcouv/received_events","type":"User","site_admin":false},"labels":[{"id":166673288,"node_id":"MDU6TGFiZWwxNjY2NzMyODg=","url":"https://api.github.com/repos/dotnet/roslyn/labels/Area-Compilers","name":"Area-Compilers","color":"5319e7","default":false},{"id":169838071,"node_id":"MDU6TGFiZWwxNjk4MzgwNzE=","url":"https://api.github.com/repos/dotnet/roslyn/labels/Area-Language%20Design","name":"Area-Language Design","color":"5319e7","default":false},{"id":344899605,"node_id":"MDU6TGFiZWwzNDQ4OTk2MDU=","url":"https://api.github.com/repos/dotnet/roslyn/labels/New%20Language%20Feature%20-%20Nullable%20Reference%20Types","name":"New Language Feature - Nullable Reference Types","color":"bfd4f2","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/dotnet/roslyn/milestones/18","html_url":"https://github.com/dotnet/roslyn/milestone/18","labels_url":"https://api.github.com/repos/dotnet/roslyn/milestones/18/labels","id":1675130,"node_id":"MDk6TWlsZXN0b25lMTY3NTEzMA==","number":18,"title":"16.0","description":"The version *after* the next major version.","creator":{"login":"gafter","id":3804346,"node_id":"MDQ6VXNlcjM4MDQzNDY=","avatar_url":"https://avatars3.githubusercontent.com/u/3804346?v=4","gravatar_id":"","url":"https://api.github.com/users/gafter","html_url":"https://github.com/gafter","followers_url":"https://api.github.com/users/gafter/followers","following_url":"https://api.github.com/users/gafter/following{/other_user}","gists_url":"https://api.github.com/users/gafter/gists{/gist_id}","starred_url":"https://api.github.com/users/gafter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gafter/subscriptions","organizations_url":"https://api.github.com/users/gafter/orgs","repos_url":"https://api.github.com/users/gafter/repos","events_url":"https://api.github.com/users/gafter/events{/privacy}","received_events_url":"https://api.github.com/users/gafter/received_events","type":"User","site_admin":false},"open_issues":743,"closed_issues":281,"state":"open","created_at":"2016-03-31T00:06:25Z","updated_at":"2018-06-10T22:06:12Z","due_on":null,"closed_at":null},"comments":4,"created_at":"2018-06-10T16:31:15Z","updated_at":"2018-06-11T04:21:11Z","closed_at":null,"author_association":"MEMBER","body":"My assumption is that following `string s = obliviousString;`, the state of `s` is `string!` (declaration wins over oblivious). Or `ns` should be nullable following `string? ns = obliviousString;`.\r\nChuck thought the state of `s` and `ns` should remain oblivious.\r\n\r\nThe same question applies for `OutputsOblivious(out string s);`.\r\n\r\nNeed to confirm with LDM.\r\nEither way, it is a minor change to the `TrackNullableStateForAssignment`.\r\n\r\nUpdate: A possible related issue is whether `string s = obliviousString;` should be a warning. Either way, you will not get a warning on something that is potentially unsafe (like a subsequent dereference)."},"comment":{"url":"https://api.github.com/repos/dotnet/roslyn/issues/comments/396118531","html_url":"https://github.com/dotnet/roslyn/issues/27686#issuecomment-396118531","issue_url":"https://api.github.com/repos/dotnet/roslyn/issues/27686","id":396118531,"node_id":"MDEyOklzc3VlQ29tbWVudDM5NjExODUzMQ==","user":{"login":"jcouv","id":12466233,"node_id":"MDQ6VXNlcjEyNDY2MjMz","avatar_url":"https://avatars2.githubusercontent.com/u/12466233?v=4","gravatar_id":"","url":"https://api.github.com/users/jcouv","html_url":"https://github.com/jcouv","followers_url":"https://api.github.com/users/jcouv/followers","following_url":"https://api.github.com/users/jcouv/following{/other_user}","gists_url":"https://api.github.com/users/jcouv/gists{/gist_id}","starred_url":"https://api.github.com/users/jcouv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcouv/subscriptions","organizations_url":"https://api.github.com/users/jcouv/orgs","repos_url":"https://api.github.com/users/jcouv/repos","events_url":"https://api.github.com/users/jcouv/events{/privacy}","received_events_url":"https://api.github.com/users/jcouv/received_events","type":"User","site_admin":false},"created_at":"2018-06-11T04:21:11Z","updated_at":"2018-06-11T04:21:11Z","author_association":"MEMBER","body":">  ... lack of annotations in the method body are significant to the analysis and not merely cosmetic\r\n\r\nCould you provide an example where a lack of annotation affects the analysis in an observable way? That would help clarify the stakes and impact of this decision.\r\n\r\nAs far as I can tell, someone who wants to suppress W warnings and not annotate locals isn't harmed by this design. \r\nConsider the benefits in a partially annotated project: I use `?` in some URTANN'ed parts of the project, and the rest is oblivious. I'd like to get the benefit from those `?` annotations in the opted-in code. The fact that I put them there is a good indication, and this is likely a case where the user knows better (since flow analysis has no information for oblivious, by the \"don't know\" definition).\r\n\r\nTagging @cston for thoughts."}}
{"actor":{"display_login":"jcouv"}}