1. 21 9月, 2020 2 次提交
  2. 19 9月, 2020 4 次提交
  3. 18 9月, 2020 7 次提交
  4. 17 9月, 2020 11 次提交
  5. 16 9月, 2020 5 次提交
  6. 15 9月, 2020 3 次提交
    • F
      Mitigation for IOperation threading issue · 83be0932
      Fredric Silberberg 提交于
      This is a mitigation for the threading issue discussed in https://github.com/dotnet/roslyn/issues/35818. When building VS, there is a flaky threading issue where an interpolation with multiple parts can end up with different nodes on different threads, causing an optimization in `SetParentOperation(ImmutableArray)` to be invalid. This makes the optimization much narrower, ensuring that it is actually valid for this case.
      
      The specific scenario here is an interplotated string with multiple parts. The steps are:
      1. 2 threads attempt to get the children of an interpolated string operation at the same time.
      2. Thread 1 gets the child for the first part of the string and caches it.
      3. Thread 2 gets the child for the first part of the string and gets that same cached element.
      4. Both threads attempt to get child 2. Neither hits the cache, so they get different nodes.
      5. Both threads construct the array of interpolated string parts.
      6. Thread 1 sets the parent of the interpolated string parts to be itself.
      7. Thread 2 attempts to set the parent of the interpolated string parts to be itself. This returns early, because part 1 already has a parent, leaving part 2 with an unset parent.
      8. Later, thread 2 asks for the parent of part 2. It is unset, violating the invariants, and we infinite loop.
      
      As an additional mitigation step, we also ensure that the process of constructing an interpolated string's inserts does not hit the cache.  Since we never ask for an operation within a single expression, this will prevent 2 threads from seeing the same first element and differing subsequent elements.
      83be0932
    • R
      c9086478
    • N
      Decision dag: union the set of values when there are two predecessor states. (#47567) · 79d801cd
      Neal Gafter 提交于
      * Decision dag: union the set of values when there are two predecessor states.
      
      If a state has no set of values for a temp on one of the edges, that means it is unrestricted.
      This fixes a bug in decision dag construction.  I was not able to construct a test that is
      affected, but the change makes a visible difference in an internal dump of the decision dag
      for the newly added test `MultiplePathsToState_01`, which we walked through in a compiler
      team meeting on 2020-09-09.
      
      * Use a builder as suggested in review.
      79d801cd
  7. 12 9月, 2020 8 次提交