- 
                Notifications
    
You must be signed in to change notification settings  - Fork 10.6k
 
Replace materializeForSet with the modify coroutine #18840
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| 
           @swift-ci Please smoke test OS X.  | 
    
c08b927    to
    70aa1bc      
    Compare
  
    | 
           @swift-ci Please smoke test.  | 
    
70aa1bc    to
    96bc6dd      
    Compare
  
    | 
           @swift-ci Please smoke test.  | 
    
96bc6dd    to
    abe0d30      
    Compare
  
    | 
           @swift-ci Please smoke test.  | 
    
abe0d30    to
    c389f8b      
    Compare
  
    | 
           @swift-ci Please test.  | 
    
| 
           Build failed  | 
    
| 
           Build failed  | 
    
46ae169    to
    de5e875      
    Compare
  
    | 
           @swift-ci Please test.  | 
    
| 
           Build failed  | 
    
| 
           Build failed  | 
    
| 
           Preliminary code size numbers look good: https://gist.github.com/rjmccall/385ca49b3c5dc9ec01ba3af05fcd6e67  | 
    
753216f    to
    411fc9f      
    Compare
  
    | 
           @swift-ci Please test.  | 
    
| 
           Build failed  | 
    
| 
           Build failed  | 
    
| 
           @swift-ci Please test source compatibility.  | 
    
| 
           @swift-ci Please test performance.  | 
    
| 
           @swift-ci Please benchmark.  | 
    
| 
           @swift-ci please smoke benchmark staging  | 
    
| 
           !!! Couldn't read commit file !!!  | 
    
| 
           Four failures: the Linux build failure and compatibility-suite failures in Chatto, IBAnimatable, and ProcedureKit. The Chatto regression is hopefully being fixed by @slavapestov's #18978, and ProcedureKit is fixed by #18981. So that's progress.  | 
    
          Build comment file:Optimized (O)Regression (9)
 Improvement (7)
 No Changes (458)
 Unoptimized (Onone)Regression (55)
 Improvement (32)
 No Changes (387)
 Hardware Overview | 
    
| 
           @swift-ci Please test.  | 
    
    
      
        1 similar comment
      
    
  
    | 
           @swift-ci Please test.  | 
    
| 
           Build failed  | 
    
| 
           Build failed  | 
    
| 
           @swift-ci Please test.  | 
    
| 
           Build failed  | 
    
| 
           @swift-ci Please test OS X.  | 
    
| 
           @swift-ci Please test source compatibility.  | 
    
    
      
        1 similar comment
      
    
  
    | 
           @swift-ci Please test source compatibility.  | 
    
For the most part, code should be working with the as-declared abstraction pattern of the storage, because that's the pattern produced by its accessors. However, in the special case of an accessor synthesized on demand to satisfy a protocol conformance, that accessor will use the native abstraction pattern of the declaration, and so the witness thunk that uses that accessor must use that pattern when generating its access. This doesn't matter today because the only on-demand synthesized accessor is materializeForSet, and witnesses for materializeForSet don't actually call the synthetic materializeForSet --- in fact, nothing does. But the modify accessor uses the otherwise-standard pattern where the witness modify calls the concrete modify, and that modify currently uses the native abstraction pattern.
As always, most of the work here went into working around the AST representations of parameter and argument lists.
Most of this patch is just removing special cases for materializeForSet or other fairly mechanical replacements. Unfortunately, the rest is still a fairly big change, and not one that can be easily split apart because of the quite reasonable reliance on metaprogramming throughout the compiler. And, of course, there are a bunch of test updates that have to be sync'ed with the actual change to code-generation. This is SR-7134.
b2f51c6    to
    b80618f      
    Compare
  
    | 
           @swift-ci Please test.  | 
    
| 
           @swift-ci Please test source compatibility.  | 
    
| 
           @swift-ci Please test.  | 
    
    
      
        1 similar comment
      
    
  
    | 
           @swift-ci Please test.  | 
    
| 
           Please?  | 
    
| 
           @swift-ci Please test.  | 
    
| 
           Build failed  | 
    
| 
           @swift-ci Please test OS X.  | 
    
| 
           @swift-ci Please smoke benchmark staging.  | 
    
| 
           !!! Couldn't read commit file !!!  | 
    
| 
           @swift-ci Please smoke benchmark staging.  | 
    
          Build comment file:Performance: -O
 Performance: -Osize
 How to read the dataThe tables contain differences in performance which are larger than 8% and differences in code size which are larger than 1%.If you see any unexpected regressions, you should consider fixing the regressions before you merge the PR. Noise: Sometimes the performance results (not code size!) contain false alarms. Unexpected regressions which are marked with '(?)' are probably noise. If you see regressions which you cannot explain you can try to run the benchmarks again. If regressions still show up, please consult with the performance team (@eeckstein). Hardware Overview | 
    
| 
           Internal performance analysis checks out. Looks good; merging.  | 
    
Most of this patch is just removing special cases for
materializeForSetor other fairly mechanical replacements. Unfortunately, the rest is still a fairly big change, and not one that can be easily split apart because of the quite reasonable reliance on metaprogramming throughout the compiler. And, of course, there are a bunch of test updates that have to be sync'ed with the actual change to code-generation.This is SR-7134.