ModuleInterface: Don't print @c @implementation functions

We don't need to print the `@c @implementation` functions in
swiftinterfaces as clients need only to see the original declaration in
the C header. Don't print `@objc @implementation` functions either, but
still print simple `@c` and `@objc` functions.
This commit is contained in:
Alexis Laferrière
2025-09-09 13:21:42 -07:00
parent 4d91f493b5
commit 0eaab86219
2 changed files with 64 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
// RUN: %empty-directory(%t)
// RUN: split-file %s %t --leading-lines
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) \
// RUN: -emit-module %t/Lib.swift -o %t -I %t \
// RUN: -swift-version 6 -enable-library-evolution \
// RUN: -emit-module-interface-path %t/Lib.swiftinterface \
// RUN: -enable-experimental-feature CDecl \
// RUN: -enable-experimental-feature CImplementation
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -I %t \
// RUN: -typecheck-module-from-interface %t/Lib.swiftinterface
// RUN: %FileCheck %s --input-file %t/Lib.swiftinterface
// REQUIRES: objc_interop
// REQUIRES: swift_feature_CDecl
// REQUIRES: swift_feature_CImplementation
//--- module.modulemap
module Lib {
header "Lib.h"
}
//--- Lib.h
extern void cImplFunc();
extern void objcImplFunc();
//--- Lib.swift
@_exported import Lib
import Foundation
/// Don't print the implementation functions.
// CHECK-NOT: @implementation
// CHECK-NOT: ImplFunc
@c @implementation
public func cImplFunc() { }
@_cdecl("objcImplFunc") @implementation
public func objcImplFunc() { }
/// Print other @c functions.
@c
public func bareCDecl() {}
// CHECK: @c
// CHECK-NEXT: public func bareCDecl
@c(c_name)
public func namedCDecl() {}
// CHECK: @c(c_name)
// CHECK-NEXT: public func namedCDecl
@_cdecl("objc_name")
public func namedLegacyCDecl() {}
// CHECK: @_cdecl("objc_name")
// CHECK-NEXT: public func namedLegacyCDecl