// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module -o %t/indirects.swiftmodule %S/Inputs/implementation-only-imports/indirects.swift
// RUN: %target-swift-frontend -emit-module -o %t/directs.swiftmodule -I %t %S/Inputs/implementation-only-imports/directs.swift

// RUN: %target-swift-frontend -typecheck -verify %s -I %t

@_implementationOnly import directs
import indirects

// Types

@inlinable
public func testStructFromDirect() {
  _ = StructFromDirect() // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testStructFromIndirect() {
  _ = StructFromIndirect()
}

@inlinable
public func testAliasFromDirect() {
  _ = AliasFromDirect() // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testAliasFromIndirect() {
  _ = AliasFromIndirect()
}

@inlinable
public func testGenericAliasFromDirect() {
  _ = GenericAliasFromDirect<Int>() // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testGenericAliasFromIndirect() {
  let tmp: GenericAliasFromIndirect<Int>?
  _ = tmp
}

// Functions

@inlinable
public func testFunctionFromDirect() {
  globalFunctionFromDirect() // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testFunctionFromIndirect() {
  globalFunctionFromIndirect()
}

// Variables

@inlinable
public func testVariableFromDirect_get() {
  _ = globalVariableFromDirect // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testVariableFromIndirect_get() {
  _ = globalVariableFromIndirect
}

@inlinable
public func testVariableFromDirect_set() {
  globalVariableFromDirect = 5 // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testVariableFromIndirect_set() {
  globalVariableFromIndirect = 5
}

// Extensions

@inlinable
public func testExtensionMethod(s: inout StructFromIndirect) {
  s.extensionMethodFromDirect() // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testExtensionProperty_get(s: inout StructFromIndirect) {
  _ = s.extensionPropertyFromDirect // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testExtensionProperty_set(s: inout StructFromIndirect) {
  s.extensionPropertyFromDirect = 5 // expected-error {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testExtensionSubscript_get(s: inout StructFromIndirect) {
  // FIXME: why is this error being double-emitted?
  _ = s[extensionSubscript: 0] // expected-error 2 {{cannot be used in an inlinable function because its module was imported implementation-only}}
}

@inlinable
public func testExtensionSubscript_set(s: inout StructFromIndirect) {
  // FIXME: why is this error being double-emitted?
  s[extensionSubscript: 0] = 5 // expected-error 2 {{cannot be used in an inlinable function because its module was imported implementation-only}}
}
