Skip to content

[Sema] Minimum access for protocol requirement members to 'fileprivate'. #4403

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
merged 2 commits into from
Aug 19, 2016

Conversation

rintaro
Copy link
Member

@rintaro rintaro commented Aug 19, 2016

What's in this pull request?

CC: @jrose-apple
I'm not sure this is the right fix.

// ModA/File1.swift
private protocol P  {
  func privMethod() // This was implicitly `internal`.
}
public class C : P {
  public init() {}
  fileprivate func privMethod() {
    print("FOOBAR")
  }
}

C.privMethod() was visible from other file. (Because P.privMethod() was internal)

// ModA/File2.swift
extension C {
  public func callPrivMethod() {
    // This should be "error: use of unresolved identifier 'privMethod'",
    // but was not.
    privMethod()
  }
}

This compiles.
But, ends up with runtime error 'fatal error: call of deleted method'

// main.swift
C().callPrivMethod()

Before merging this pull request to apple/swift repository:

  • Test pull request on Swift continuous integration.

Triggering Swift CI

The swift-ci is triggered by writing a comment on this PR addressed to the GitHub user @swift-ci. Different tests will run depending on the specific comment that you use. The currently available comments are:

Smoke Testing

Platform Comment
All supported platforms @swift-ci Please smoke test
All supported platforms @swift-ci Please smoke test and merge
OS X platform @swift-ci Please smoke test OS X platform
Linux platform @swift-ci Please smoke test Linux platform

A smoke test on macOS does the following:

  1. Builds the compiler incrementally.
  2. Builds the standard library only for macOS. Simulator standard libraries and
    device standard libraries are not built.
  3. lldb is not built.
  4. The test and validation-test targets are run only for macOS. The optimized
    version of these tests are not run.

A smoke test on Linux does the following:

  1. Builds the compiler incrementally.
  2. Builds the standard library incrementally.
  3. lldb is built incrementally.
  4. The swift test and validation-test targets are run. The optimized version of these
    tests are not run.
  5. lldb is tested.

Validation Testing

Platform Comment
All supported platforms @swift-ci Please test
All supported platforms @swift-ci Please test and merge
OS X platform @swift-ci Please test OS X platform
OS X platform @swift-ci Please benchmark
Linux platform @swift-ci Please test Linux platform

Lint Testing

Language Comment
Python @swift-ci Please Python lint

Note: Only members of the Apple organization can trigger swift-ci.

It used to be `internal`.

// ModA/File1.swift
private protocol P  {
  func privMethod() // This was implicitly `internal`.
}
public class C {
  public init() {}
  fileprivate func privMethod() {
    print("FOOBAR")
  }
}

// ModA/File2.swift
extension C {
  public func callPrivMethod() {
    // This should be "error: use of unresolved identifier 'foo'",
    // but was not.
    privMethod()
  }
}

// main.swift
// This ends up runtime error 'fatal error: : call of deleted method'
C().callPrivMethod()
@rintaro rintaro changed the title [Sema] Minimum access for protocol requirement members to 'fileprivate'. [WIP][Sema] Minimum access for protocol requirement members to 'fileprivate'. Aug 19, 2016
@rintaro rintaro changed the title [WIP][Sema] Minimum access for protocol requirement members to 'fileprivate'. [Sema] Minimum access for protocol requirement members to 'fileprivate'. Aug 19, 2016
@rintaro rintaro force-pushed the requirement-accessibility branch from 6d9702d to 34f4b49 Compare August 19, 2016 11:39
@rintaro rintaro force-pushed the requirement-accessibility branch from 34f4b49 to 2662781 Compare August 19, 2016 11:40
@rintaro
Copy link
Member Author

rintaro commented Aug 19, 2016

@swift-ci Please test

@rintaro
Copy link
Member Author

rintaro commented Aug 19, 2016

@jrose-apple
Copy link
Contributor

SE-0025 says we shouldn't care if the member has a higher access, but this might be a good enough patch fix anyway.

(We have a similar problem on a larger scale in SR-2315, and I expect the fix for that will take care of this as well. But I think this is a reasonable thing to do anyway.)

@jrose-apple
Copy link
Contributor

Both tests passed, force-merging.

@jrose-apple jrose-apple merged commit f66da2e into swiftlang:master Aug 19, 2016
@rintaro rintaro deleted the requirement-accessibility branch August 26, 2016 18:51
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.

2 participants