Skip to content

Commit c63d899

Browse files
add test to ensure consistent compatibility macro definitions (#64086)
rdar://106087804
1 parent 69445e6 commit c63d899

File tree

6 files changed

+291
-0
lines changed

6 files changed

+291
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#ifndef CROSS_COMPILER_H
2+
#define CROSS_COMPILER_H
3+
4+
#include "empty.h"
5+
#include "old-compiler.h"
6+
7+
#endif
Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
// Generated by Apple Swift version 5.7.2 (swiftlang-5.7.2.135.5 clang-1400.0.29.51)
2+
#ifndef SWIFT57FRAMEWORK_SWIFT_H
3+
#define SWIFT57FRAMEWORK_SWIFT_H
4+
#pragma clang diagnostic push
5+
#pragma clang diagnostic ignored "-Wgcc-compat"
6+
7+
#if !defined(__has_include)
8+
# define __has_include(x) 0
9+
#endif
10+
#if !defined(__has_attribute)
11+
# define __has_attribute(x) 0
12+
#endif
13+
#if !defined(__has_feature)
14+
# define __has_feature(x) 0
15+
#endif
16+
#if !defined(__has_warning)
17+
# define __has_warning(x) 0
18+
#endif
19+
20+
#if __has_include(<swift/objc-prologue.h>)
21+
# include <swift/objc-prologue.h>
22+
#endif
23+
24+
#pragma clang diagnostic ignored "-Wduplicate-method-match"
25+
#pragma clang diagnostic ignored "-Wauto-import"
26+
#if defined(__OBJC__)
27+
#include <Foundation/Foundation.h>
28+
#endif
29+
#if defined(__cplusplus)
30+
#include <cstdint>
31+
#include <cstddef>
32+
#include <cstdbool>
33+
#else
34+
#include <stdint.h>
35+
#include <stddef.h>
36+
#include <stdbool.h>
37+
#endif
38+
39+
#define defined_replacement(x) 1
40+
41+
#if defined_replacement(SWIFT_TYPEDEFS)
42+
# define SWIFT_TYPEDEFS 1
43+
# if __has_include(<uchar.h>)
44+
# include <uchar.h>
45+
# elif !defined(__cplusplus)
46+
typedef uint_least16_t char16_t;
47+
typedef uint_least32_t char32_t;
48+
# endif
49+
typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
50+
typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
51+
typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
52+
typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
53+
typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
54+
typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
55+
typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
56+
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
57+
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
58+
typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
59+
typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
60+
typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
61+
#endif
62+
63+
#if defined_replacement(SWIFT_PASTE)
64+
# define SWIFT_PASTE_HELPER(x, y) x##y
65+
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
66+
#endif
67+
#if defined_replacement(SWIFT_METATYPE)
68+
# define SWIFT_METATYPE(X) Class
69+
#endif
70+
#if defined_replacement(SWIFT_CLASS_PROPERTY)
71+
# if __has_feature(objc_class_property)
72+
# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
73+
# else
74+
# define SWIFT_CLASS_PROPERTY(...)
75+
# endif
76+
#endif
77+
78+
#if __has_attribute(objc_runtime_name)
79+
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
80+
#else
81+
# define SWIFT_RUNTIME_NAME(X)
82+
#endif
83+
#if __has_attribute(swift_name)
84+
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
85+
#else
86+
# define SWIFT_COMPILE_NAME(X)
87+
#endif
88+
#if __has_attribute(objc_method_family)
89+
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
90+
#else
91+
# define SWIFT_METHOD_FAMILY(X)
92+
#endif
93+
#if __has_attribute(noescape)
94+
# define SWIFT_NOESCAPE __attribute__((noescape))
95+
#else
96+
# define SWIFT_NOESCAPE
97+
#endif
98+
#if __has_attribute(ns_consumed)
99+
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
100+
#else
101+
# define SWIFT_RELEASES_ARGUMENT
102+
#endif
103+
#if __has_attribute(warn_unused_result)
104+
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
105+
#else
106+
# define SWIFT_WARN_UNUSED_RESULT
107+
#endif
108+
#if __has_attribute(noreturn)
109+
# define SWIFT_NORETURN __attribute__((noreturn))
110+
#else
111+
# define SWIFT_NORETURN
112+
#endif
113+
#if defined_replacement(SWIFT_CLASS_EXTRA)
114+
# define SWIFT_CLASS_EXTRA
115+
#endif
116+
#if defined_replacement(SWIFT_PROTOCOL_EXTRA)
117+
# define SWIFT_PROTOCOL_EXTRA
118+
#endif
119+
#if defined_replacement(SWIFT_ENUM_EXTRA)
120+
# define SWIFT_ENUM_EXTRA
121+
#endif
122+
#if defined_replacement(SWIFT_CLASS)
123+
# if __has_attribute(objc_subclassing_restricted)
124+
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
125+
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
126+
# else
127+
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
128+
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
129+
# endif
130+
#endif
131+
#if defined_replacement(SWIFT_RESILIENT_CLASS)
132+
# if __has_attribute(objc_class_stub)
133+
# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
134+
# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
135+
# else
136+
# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
137+
# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
138+
# endif
139+
#endif
140+
141+
#if defined_replacement(SWIFT_PROTOCOL)
142+
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
143+
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
144+
#endif
145+
146+
#if defined_replacement(SWIFT_EXTENSION)
147+
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
148+
#endif
149+
150+
#if !defined(OBJC_DESIGNATED_INITIALIZER)
151+
# if __has_attribute(objc_designated_initializer)
152+
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
153+
# else
154+
# define OBJC_DESIGNATED_INITIALIZER
155+
# endif
156+
#endif
157+
#if defined_replacement(SWIFT_ENUM_ATTR)
158+
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
159+
# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
160+
# else
161+
# define SWIFT_ENUM_ATTR(_extensibility)
162+
# endif
163+
#endif
164+
#if defined_replacement(SWIFT_ENUM)
165+
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
166+
# if __has_feature(generalized_swift_name)
167+
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
168+
# else
169+
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
170+
# endif
171+
#endif
172+
#if defined_replacement(SWIFT_UNAVAILABLE)
173+
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
174+
#endif
175+
#if defined_replacement(SWIFT_UNAVAILABLE_MSG)
176+
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
177+
#endif
178+
#if defined_replacement(SWIFT_AVAILABILITY)
179+
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
180+
#endif
181+
#if defined_replacement(SWIFT_WEAK_IMPORT)
182+
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
183+
#endif
184+
#if defined_replacement(SWIFT_DEPRECATED)
185+
# define SWIFT_DEPRECATED __attribute__((deprecated))
186+
#endif
187+
#if defined_replacement(SWIFT_DEPRECATED_MSG)
188+
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
189+
#endif
190+
#if __has_feature(attribute_diagnose_if_objc)
191+
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
192+
#else
193+
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
194+
#endif
195+
#if defined(__OBJC__)
196+
#if !defined(IBSegueAction)
197+
# define IBSegueAction
198+
#endif
199+
#endif
200+
#if defined_replacement(SWIFT_EXTERN)
201+
# if defined(__cplusplus)
202+
# define SWIFT_EXTERN extern "C"
203+
# else
204+
# define SWIFT_EXTERN extern
205+
# endif
206+
#endif
207+
#if defined_replacement(SWIFT_CALL)
208+
# define SWIFT_CALL __attribute__((swiftcall))
209+
#endif
210+
#if defined(__cplusplus)
211+
#if defined_replacement(SWIFT_NOEXCEPT)
212+
# define SWIFT_NOEXCEPT noexcept
213+
#endif
214+
#else
215+
#if defined_replacement(SWIFT_NOEXCEPT)
216+
# define SWIFT_NOEXCEPT
217+
#endif
218+
#endif
219+
#if defined(__cplusplus)
220+
#if defined_replacement(SWIFT_CXX_INT_DEFINED)
221+
#define SWIFT_CXX_INT_DEFINED
222+
namespace swift {
223+
using Int = ptrdiff_t;
224+
using UInt = size_t;
225+
}
226+
#endif
227+
#endif
228+
#if defined(__OBJC__)
229+
#if __has_feature(modules)
230+
#if __has_warning("-Watimport-in-framework-header")
231+
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
232+
#endif
233+
@import ObjectiveC;
234+
#endif
235+
236+
#endif
237+
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
238+
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
239+
#if __has_warning("-Wpragma-clang-attribute")
240+
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
241+
#endif
242+
#pragma clang diagnostic ignored "-Wunknown-pragmas"
243+
#pragma clang diagnostic ignored "-Wnullability"
244+
#pragma clang diagnostic ignored "-Wdollar-in-identifier-extension"
245+
246+
#if __has_attribute(external_source_symbol)
247+
# pragma push_macro("any")
248+
# undef any
249+
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="Swift57Framework",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
250+
# pragma pop_macro("any")
251+
#endif
252+
253+
#if defined(__OBJC__)
254+
255+
SWIFT_CLASS("_TtC16Swift57Framework3Foo")
256+
@interface Foo : NSObject
257+
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
258+
@end
259+
260+
#endif
261+
#if defined(__cplusplus)
262+
#endif
263+
#if __has_attribute(external_source_symbol)
264+
# pragma clang attribute pop
265+
#endif
266+
#pragma clang diagnostic pop
267+
#endif
268+

test/PrintAsObjC/Inputs/CrossCompiler.framework/Modules/CrossCompiler.swiftmodule/.keep

Whitespace-only changes.

test/PrintAsObjC/Inputs/CrossCompiler.framework/cross-compiler

Whitespace-only changes.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
framework module CrossCompiler {
2+
header "cross-compiler.h"
3+
export *
4+
}

test/PrintAsObjC/cross-compiler.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: cp -r %S/Inputs/CrossCompiler.framework %t/
3+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) %S/../Inputs/empty.swift -typecheck -emit-objc-header-path %t/CrossCompiler.framework/Headers/empty.h
4+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -emit-module-path %t/CrossCompiler.framework/Modules/CrossCompiler.swiftmodule/%target-swiftmodule-name -import-underlying-module -F %t -F %clang-importer-sdk-path/frameworks -module-name CrossCompiler -disable-objc-attr-requires-foundation-module -parse-as-library %s -Xcc -Werror
5+
6+
// Ensure that building with multiple compatibility headers from different compilers doesn't
7+
// trigger "macro redefinition" errors (rdar://106087804)
8+
9+
// CrossCompiler.framework contains a modified header generated with Swift 5.7 (before the
10+
// PrintAsClang refactor to make macros data-driven). By compiling it alongside a freshly-generated
11+
// header, we can make sure that the macro definitions are the same before and after the switch.
12+

0 commit comments

Comments
 (0)