Skip to content

Commit

Permalink
Darwin, fixincludes: Handle Apple Blocks in objc/runtime.h.
Browse files Browse the repository at this point in the history
The macOS 13 SDK has unguarded Apple Blocks use in objc/runtime.h which
causes most of the objective-c tests to fail.

Signed-off-by: Iain Sandoe <[email protected]>

fixincludes/ChangeLog:

	* fixincl.x: Regenerate.
	* inclhack.def (darwin_objc_runtime_1): New hack.
	* tests/base/objc/runtime.h: New file.
  • Loading branch information
iains committed Jan 21, 2023
1 parent 442d2bd commit 046dc9d
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 5 deletions.
63 changes: 58 additions & 5 deletions fixincludes/fixincl.x
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
*
* DO NOT EDIT THIS FILE (fixincl.x)
*
* It has been AutoGen-ed January 18, 2023 at 07:54:50 PM by AutoGen 5.18.7
* It has been AutoGen-ed January 18, 2023 at 09:06:47 PM by AutoGen 5.18.7
* From the definitions inclhack.def
* and the template file fixincl
*/
/* DO NOT SVN-MERGE THIS FILE, EITHER Wed Jan 18 19:54:50 GMT 2023
/* DO NOT SVN-MERGE THIS FILE, EITHER Wed Jan 18 21:06:47 GMT 2023
*
* You must regenerate it. Use the ./genfixes script.
*
Expand All @@ -15,7 +15,7 @@
* certain ANSI-incompatible system header files which are fixed to work
* correctly with ANSI C and placed in a directory that GNU C will search.
*
* This file contains 273 fixup descriptions.
* This file contains 274 fixup descriptions.
*
* See README for more information.
*
Expand Down Expand Up @@ -3084,6 +3084,53 @@ static const char* apzDarwin_Os_Trace_2Patch[] = {
#endif",
(char*)NULL };

/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description of Darwin_Objc_Runtime_1 fix
*/
tSCC zDarwin_Objc_Runtime_1Name[] =
"darwin_objc_runtime_1";

/*
* File name selection pattern
*/
tSCC zDarwin_Objc_Runtime_1List[] =
"objc/runtime.h\0";
/*
* Machine/OS name selection pattern
*/
tSCC* apzDarwin_Objc_Runtime_1Machs[] = {
"*-*-darwin2*",
(const char*)NULL };

/*
* content selection pattern - do fix if pattern found
*/
tSCC zDarwin_Objc_Runtime_1Select0[] =
"OBJC_EXPORT void.*\n\
objc_enumerateClasses.*\n\
.*\n\
.*\n\
.*\n\
.*void \\(\\^ _Nonnull block.*\n\
.*\n\
.*\n\
.*OBJC_REFINED_FOR_SWIFT.*";

#define DARWIN_OBJC_RUNTIME_1_TEST_CT 1
static tTestDesc aDarwin_Objc_Runtime_1Tests[] = {
{ TT_EGREP, zDarwin_Objc_Runtime_1Select0, (regex_t*)NULL }, };

/*
* Fix Command Arguments for Darwin_Objc_Runtime_1
*/
static const char* apzDarwin_Objc_Runtime_1Patch[] = {
"format",
"#if __BLOCKS__\n\
%0\n\
#endif",
(char*)NULL };

/* * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Description of Darwin_Os_Trace_3 fix
Expand Down Expand Up @@ -11115,9 +11162,9 @@ static const char* apzX11_SprintfPatch[] = {
*
* List of all fixes
*/
#define REGEX_COUNT 311
#define REGEX_COUNT 312
#define MACH_LIST_SIZE_LIMIT 187
#define FIX_COUNT 273
#define FIX_COUNT 274

/*
* Enumerate the fixes
Expand Down Expand Up @@ -11196,6 +11243,7 @@ typedef enum {
DARWIN_LONGJMP_NORETURN_FIXIDX,
DARWIN_OS_TRACE_1_FIXIDX,
DARWIN_OS_TRACE_2_FIXIDX,
DARWIN_OBJC_RUNTIME_1_FIXIDX,
DARWIN_OS_TRACE_3_FIXIDX,
DARWIN_OS_BASE_1_FIXIDX,
DARWIN_DISPATCH_OBJECT_1_FIXIDX,
Expand Down Expand Up @@ -11764,6 +11812,11 @@ tFixDesc fixDescList[ FIX_COUNT ] = {
DARWIN_OS_TRACE_2_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aDarwin_Os_Trace_2Tests, apzDarwin_Os_Trace_2Patch, 0 },

{ zDarwin_Objc_Runtime_1Name, zDarwin_Objc_Runtime_1List,
apzDarwin_Objc_Runtime_1Machs,
DARWIN_OBJC_RUNTIME_1_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
aDarwin_Objc_Runtime_1Tests, apzDarwin_Objc_Runtime_1Patch, 0 },

{ zDarwin_Os_Trace_3Name, zDarwin_Os_Trace_3List,
apzDarwin_Os_Trace_3Machs,
DARWIN_OS_TRACE_3_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
Expand Down
35 changes: 35 additions & 0 deletions fixincludes/inclhack.def
Original file line number Diff line number Diff line change
Expand Up @@ -1491,6 +1491,41 @@ fix = {
test_text = "typedef void (^os_trace_payload_t)(xpc_object_t xdict);";
};

/*
* macOSX 13.0 SDK objc/runtime.h uses Apple Blocks extension without a guard.
*/

fix = {
hackname = darwin_objc_runtime_1;
mach = "*-*-darwin2*";
files = objc/runtime.h;
select = <<- _EOSelect_
OBJC_EXPORT void.*
objc_enumerateClasses.*
.*
.*
.*
.*void \(\^ _Nonnull block.*
.*
.*
.*OBJC_REFINED_FOR_SWIFT.*
_EOSelect_;
c_fix = format;
c_fix_arg = "#if __BLOCKS__\n%0\n#endif";
test_text = <<- _OBJC_RUNTIME_1
OBJC_EXPORT void
objc_enumerateClasses(const void * _Nullable image,
const char * _Nullable namePrefix,
Protocol * _Nullable conformingTo,
Class _Nullable subclassing,
void (^ _Nonnull block)(Class _Nonnull aClass, BOOL * _Nonnull stop)
OBJC_NOESCAPE)
OBJC_AVAILABLE(13.0, 16.0, 16.0, 9.0, 7.0)
OBJC_REFINED_FOR_SWIFT;
_OBJC_RUNTIME_1;
};


/*
* In Mac OS X 10.1[012] <os/trace.h>, need to guard users of
* os_trace_payload_t typedef, too.
Expand Down
24 changes: 24 additions & 0 deletions fixincludes/tests/base/objc/runtime.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/* DO NOT EDIT THIS FILE.
It has been auto-edited by fixincludes from:
"fixinc/tests/inc/objc/runtime.h"
This had to be done to correct non-standard usages in the
original, manufacturer supplied header file. */



#if defined( DARWIN_OBJC_RUNTIME_1_CHECK )
#if __BLOCKS__
OBJC_EXPORT void
objc_enumerateClasses(const void * _Nullable image,
const char * _Nullable namePrefix,
Protocol * _Nullable conformingTo,
Class _Nullable subclassing,
void (^ _Nonnull block)(Class _Nonnull aClass, BOOL * _Nonnull stop)
OBJC_NOESCAPE)
OBJC_AVAILABLE(13.0, 16.0, 16.0, 9.0, 7.0)
OBJC_REFINED_FOR_SWIFT;
#endif
#endif /* DARWIN_OBJC_RUNTIME_1_CHECK */

0 comments on commit 046dc9d

Please sign in to comment.