Skip to content

Merge dev15.7.x to master#25950

Merged
jmarolf merged 18 commits intomasterfrom
merges/dev15.7.x-to-master
Apr 6, 2018
Merged

Merge dev15.7.x to master#25950
jmarolf merged 18 commits intomasterfrom
merges/dev15.7.x-to-master

Conversation

@dotnet-bot
Copy link
Copy Markdown
Collaborator

This is an automatically generated pull request from dev15.7.x into master.

git fetch --all
git checkout merges/dev15.7.x-to-master
git reset --hard upstream/master
git merge upstream/dev15.7.x
# Fix merge conflicts
git commit
git push merges/dev15.7.x-to-master --force

Once all conflicts are resolved and all the tests pass, you are free to merge the pull request.

@dotnet-bot dotnet-bot requested review from a team as code owners April 5, 2018 07:00
sharwell and others added 9 commits April 5, 2018 10:04
Disable flaky test WorkCoordinatorTests.FileFromSameProjectTogetherTest
The scenario listed in #22700
demonstrates the problem. The direct cause of the crash is that local
lowering produces two instances of the lambda and lamda conversions in
the resulting bound nodes. This crashes the closure conversion pass
since the same lambda cannot appear in two places in the tree. However,
even if that were allowed, this would violate the language
specification.

Placing a lambda inside an indexer which is nested in a compound
assignment creates two calls which contain the delegate produced by the
lambda expression. If the expression kind is marked as side-affecting it
will be spilled into a temporary variable. However, the local lowering
doesn't distinguish between whether an expression is side-affecting and
whether or not it is referentially transparent. In this case, both
matter. Since the delegate produced by the conversion can be compared by
reference to any other delegate produced by the same lambda, the code
must be referentially transparent -- it must produce the same result
when evaluated repeatedly.

The fix is small: mark lambda conversions as side-affecting. There are
certain cases, like the creation of temporaries for out-of-order calls
with named parameters, where the lambda conversion is only required to
be non-side-affecting instead of referentially transparent, but it does
not currently seem worth the implementation effort to split up the code
path.

Fixes #22700
* Produce errors on invalid pdbpath supplied to compiler

* More tests
While implementing the tests for the ref-reassignment test plan (#22466)
I found a bug in the handling of the ref-escape scope of a ref local in foreach. That bug is fixed
and the rest of the items in the test plan should have a test.

Fixes #22466
@jmarolf jmarolf force-pushed the merges/dev15.7.x-to-master branch from f8ee09a to 879b415 Compare April 5, 2018 23:59
@jmarolf jmarolf merged commit 87332a8 into master Apr 6, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants