- 
                Notifications
    
You must be signed in to change notification settings  - Fork 10.6k
 
Sema: Relax availability checking for SPI and unavailable API decls #58707
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
          
     Merged
      
      
            tshortli
  merged 1 commit into
  swiftlang:main
from
tshortli:restrict-spi-and-unavailable-api-to-deployment-target
  
      
      
   
  May 7, 2022 
      
    
                
     Merged
            
            Sema: Relax availability checking for SPI and unavailable API decls #58707
                    tshortli
  merged 1 commit into
  swiftlang:main
from
tshortli:restrict-spi-and-unavailable-api-to-deployment-target
  
      
      
   
  May 7, 2022 
              
            Conversation
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
    …d unavailable API declarations with `-target-min-inlining-version min` specified. There's not much benefit to more accurate enforcement of availability in these decls since API clients can't use them and there's a lot of existing code that would be needlessly diagnosed without these exceptions. Resolves rdar://92716633
| 
           @swift-ci please test  | 
    
              
                    tshortli
  
              
              commented
              
                  
                    May 6, 2022 
                  
              
              
            
            
| if (scope.isPublic()) | ||
| return true; | ||
| } | ||
| if (hasConformancesToPublicProtocols(ED)) | 
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This was opportunistic refactoring; I noticed duplicated logic.
    
  tshortli 
      added a commit
        to tshortli/swift
      that referenced
      this pull request
    
      May 7, 2022 
    
    
      
  
    
      
    
  
…text::Reason` enum to `APIBoundary`. I missed needing to rename this in swiftlang#58707.
    
  tshortli 
      added a commit
        to tshortli/swift
      that referenced
      this pull request
    
      May 31, 2022 
    
    
      
  
    
      
    
  
…text::Reason` enum to `APIBoundary`. I missed needing to rename this in swiftlang#58707.
    
  tshortli 
      added a commit
      that referenced
      this pull request
    
      Jun 1, 2022 
    
    
      
  
    
      
    
  
… min` (#59176) Cherry-pick and squash of the following PRs to release/5.7: #42585 #58417 #58654 #58680 #58707 #58870 #58963 #59040 #59065 * Sema: Fix `isExported()` for extension decls in order to correct availability diagnostics when `-target-min-inlining-version min` is specified. Resolves rdar://91382040 * Sema: Avoid diagnosing potential unavailability of type components (extension nominal type, superclass, etc.) on declarations that are explicitly unavailable. Resolves rdar://92179327 * Sema: Downgrade diagnostics about potential unavailability of the extended type in an extension declaration when the following conditions are met: 1. The extension is missing explicit availability. 2. The required availability is before the deployment target. Resolves rdar://92621567 * NFC: Expand `-target-min-inlining-versiong` tests to cover a number of corner cases: - unavailable declarations and unavailable containers - SPI declarations and spi containers - property initializer expressions - property wrappers * Sema: When computing potential unavailability of a decl, first check whether the decl is explicitly unavailable and the context is also unavailable. If those conditions are met, treat the decl as if it were always available since unavailable code is allowed to reference unavailable decls. Resolves rdar://92551870 * Sema: Use the deployment target when checking availability for SPI and unavailable API declarations with `-target-min-inlining-version min` specified. There's not much benefit to more accurate enforcement of availability in these decls since API clients can't use them and there's a lot of existing code that would be needlessly diagnosed without these exceptions. Resolves rdar://92716633 * Sema: Teach the compiler to refine `VarDecl` initializer expressions using the deployment target when the init would not be exposed to module clients. Without this, the initializers of public properties in API modules could be misdiagnosed as potentially unavailable to clients of the module, even though the expression will only ever execute on the deployment target or higher. Resolves rdar://92713589 * Tests: Update `attr_inlinable_available.swift` to require macOS and remove the OS versions for other platforms from availability attributes. * Tests: Add test cases for potential unavailability in class inheritance when is specified. * Sema: Reword diagnostics about potentially unavailable decls to improve clarity for authors of API libraries. When decls are diagnosed as potentially unavailable on an OS earlier than the deployment target, the message will now indicate that the issue would be faced by clients of the module. Resolves rdar://93466875 * Sema: Use the availability of the extended nominal as a floor for the availability of extensions. The primary motivation for this change is to reduce unnecessary availability diagnostics for API library authors. Many API libraries contain existing extension decls that lack declared availability where the extension introduces additional members to the extended type in the same release that the extended type was declared. Others contain extensions where the extension itself does not have declared availability but each of the members do. In both cases, the code is safe as written so the extra diagnostics would be a nuisance. Resolves rdar://93630782 * Sema: Downgrade diagnostics about inheritance from a less available type when `-target-min-inlining-version min` is specified. As a concession to source compatibility for API libraries, downgrade diagnostics about inheritance from a less available type when the following conditions are met: 1. The inherited type is only potentially unavailable before the deployment target. 2. The inheriting type is `@usableFromInline`. Resolves rdar://92747826
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
      
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
Use the deployment target when checking availability for SPI and unavailable API declarations with
-target-min-inlining-version minspecified. There's not much benefit to more accurate enforcement of availability in these decls since API clients can't use them and there's a lot of existing code that would be needlessly diagnosed without these exceptions.Resolves rdar://92716633