From 31dbe6b75c7ebc35ceac134fba7bea70822bc633 Mon Sep 17 00:00:00 2001 From: Jonathan Reams Date: Thu, 30 May 2024 16:02:16 -0400 Subject: [PATCH 1/4] Run core tests on ios Simulator in evergreen --- evergreen/config.yml | 68 +++++++++++++++++++++++ src/external/bson/CMakeLists.txt | 6 +- src/realm/parser/generated/query_flex.cpp | 31 ++++++----- src/realm/parser/generated/query_flex.hpp | 7 ++- tools/run-in-simulator.sh | 1 + 5 files changed, 94 insertions(+), 19 deletions(-) diff --git a/evergreen/config.yml b/evergreen/config.yml index 1a35d53b51d..bd494511939 100644 --- a/evergreen/config.yml +++ b/evergreen/config.yml @@ -1131,6 +1131,42 @@ tasks: script: |- ${cmake_build_type|Debug}/realm-libfuzz -rss_limit_mb=0 -max_total_time=3600 +- name: combined-tests-ios-simulator + tags: [ "for_pull_requests" ] + exec_timeout_secs: 1800 + commands: + - command: shell.exec + params: + working_dir: realm-core + shell: bash + script: |- + set -o errexit + set -o verbose + + if [ -n "${xcode_developer_dir}" ]; then + export DEVELOPER_DIR="${xcode_developer_dir}" + export SIMCTL_CHILD_DEVELOPER_DIR="${xcode_developer_dir}" + fi + + if [[ -n "${verbose_test_output}" ]]; then + TEST_FLAGS="$TEST_FLAGS -VV" + export SIMCTL_CHILD_UNITTEST_THREADS=1 + export SIMCTL_CHILD_UNITTEST_LOG_LEVEL="${test_logging_level|debug}" + fi + + TEST_RESULTS_FILE="$(./evergreen/abspath.sh ${task_name}_results.json)" + export SIMCTL_CHILD_UNITTEST_EVERGREEN_TEST_RESULTS="$TEST_RESULTS_FILE" + if [[ -f "$TEST_RESULTS_FILE" ]]; then + rm "$TEST_RESULTS_FILE" + fi + export SIMCTL_CHILD_UNITTEST_PROGRESS=1 + export SIMCTL_CHILD_UNITTEST_ENCRYPT_ALL="${run_with_encryption|0}" + + ./tools/run-in-simulator.sh \ + ./build/test/${cmake_build_type|Debug}-iphonesimulator/realm-combined-tests.app \ + 'io.realm.CombinedTests' \ + $TEST_RESULTS_FILE + - name: generate-sync-corpus tags: [ "for_nightly_tests" ] exec_timeout_secs: 1800 @@ -1317,6 +1353,20 @@ task_groups: tasks: - fuzzer +- name: ios-simulator-tests + max_hosts: 1 + setup_group_can_fail_task: true + setup_group: + - func: "fetch source" + - func: "fetch binaries" + teardown_task: + - func: "upload test results" + timeout: + - func: "run hang analyzer" + tasks: + - compile + - combined-tests-ios-simulator + buildvariants: - name: ubuntu display_name: "Ubuntu" @@ -1605,6 +1655,24 @@ buildvariants: tasks: - name: compile_test_and_package +- name: ios-simulator + display_name: "iOS Simulator (combined tests w/Xcode 15)" + run_on: macos-14-arm64 + expansions: + cmake_bindir: "/opt/homebrew/bin" + cmake_toolchain_file: "./tools/cmake/xcode.toolchain.cmake" + extra_flags: "-DCMAKE_XCODE_ATTRIBUTE_SDKROOT=iphoneos" + cmake_build_tool_options: "-sdk iphonesimulator -arch arm64" + cmake_generator: Xcode + max_jobs: $(sysctl -n hw.logicalcpu) + xcode_developer_dir: /Applications/Xcode15.2.app/Contents/Developer + build_command_line_tools: Off + disable_tests_against_baas: On + disable_sync: On + target_to_build: CombinedTests + tasks: + - name: ios-simulator-tests + - name: macos-encrypted display_name: "MacOS 14.0 arm64 (Encryption enabled)" run_on: macos-14-arm64 diff --git a/src/external/bson/CMakeLists.txt b/src/external/bson/CMakeLists.txt index 8ec2495e001..b25ee950c81 100644 --- a/src/external/bson/CMakeLists.txt +++ b/src/external/bson/CMakeLists.txt @@ -35,7 +35,11 @@ CHECK_STRUCT_HAS_MEMBER ("struct timespec" tv_sec time.h BSON_HAVE_TIMESPEC) check_symbol_exists (gmtime_r time.h BSON_HAVE_GMTIME_R) check_function_exists (rand_r BSON_HAVE_RAND_R) check_include_file (strings.h BSON_HAVE_STRINGS_H) -check_symbol_exists (strlcpy string.h BSON_HAVE_STRLCPY) +if (NOT CMAKE_SYSTEM_NAME STREQUAL "iOS") + check_symbol_exists (strlcpy string.h BSON_HAVE_STRLCPY) +else() + set(BSON_HAVE_STRLCPY Off) +endif() check_include_file (stdbool.h BSON_HAVE_STDBOOL_H) check_symbol_exists (clock_gettime time.h BSON_HAVE_CLOCK_GETTIME) check_symbol_exists (strnlen string.h BSON_HAVE_STRNLEN) diff --git a/src/realm/parser/generated/query_flex.cpp b/src/realm/parser/generated/query_flex.cpp index efeb479959a..91b35ec7db3 100644 --- a/src/realm/parser/generated/query_flex.cpp +++ b/src/realm/parser/generated/query_flex.cpp @@ -101,6 +101,7 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -330,7 +331,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -428,7 +429,7 @@ static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); /* %endif */ @@ -495,7 +496,7 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ - yyleng = (int) (yy_cp - yy_bp); \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ @@ -1309,8 +1310,8 @@ struct yyguts_t size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; - int yy_n_chars; - int yyleng_r; + yy_size_t yy_n_chars; + yy_size_t yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; @@ -1402,7 +1403,7 @@ void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); - int yyget_leng ( yyscan_t yyscanner ); + yy_size_t yyget_leng ( yyscan_t yyscanner ); @@ -1516,7 +1517,7 @@ static int input ( yyscan_t yyscanner ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - int n; \ + yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -2266,7 +2267,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -2280,7 +2281,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -2338,7 +2339,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ - int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) @@ -2466,7 +2467,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { /* need more input */ - int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) @@ -2935,12 +2936,12 @@ YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - int i; + yy_size_t i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); @@ -2999,7 +3000,7 @@ static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) do \ { \ /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ + yy_size_t yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ @@ -3087,7 +3088,7 @@ FILE *yyget_out (yyscan_t yyscanner) /** Get the length of the current token. * @param yyscanner The scanner object. */ -int yyget_leng (yyscan_t yyscanner) +yy_size_t yyget_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; diff --git a/src/realm/parser/generated/query_flex.hpp b/src/realm/parser/generated/query_flex.hpp index 29b3ba5916f..ccb937ad959 100644 --- a/src/realm/parser/generated/query_flex.hpp +++ b/src/realm/parser/generated/query_flex.hpp @@ -100,6 +100,7 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -278,7 +279,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -339,7 +340,7 @@ void yypop_buffer_state ( yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); /* %endif */ @@ -459,7 +460,7 @@ void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); - int yyget_leng ( yyscan_t yyscanner ); + yy_size_t yyget_leng ( yyscan_t yyscanner ); diff --git a/tools/run-in-simulator.sh b/tools/run-in-simulator.sh index 72ba90bebdb..da3f65f2181 100755 --- a/tools/run-in-simulator.sh +++ b/tools/run-in-simulator.sh @@ -6,6 +6,7 @@ appPath="$1" bundleId="$2" outputFile="$3" +xcrun simctl list runtimes id="$(echo $RANDOM | shasum | cut -f 1 -d ' ')" # Sample output: "iOS 15.5 (15.5 - 19F70) - com.apple.CoreSimulator.SimRuntime.iOS-15-5" # We're extracting the part starting with com.apple, looking for a runtime that's iOS 13 or newer From 7d9c9813798f0e4f476b32e87823faee663bb369 Mon Sep 17 00:00:00 2001 From: Jonathan Reams Date: Thu, 30 May 2024 16:14:12 -0400 Subject: [PATCH 2/4] undo flex changes --- src/realm/parser/generated/query_flex.cpp | 31 +++++++++++------------ src/realm/parser/generated/query_flex.hpp | 7 +++-- 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/realm/parser/generated/query_flex.cpp b/src/realm/parser/generated/query_flex.cpp index 91b35ec7db3..efeb479959a 100644 --- a/src/realm/parser/generated/query_flex.cpp +++ b/src/realm/parser/generated/query_flex.cpp @@ -101,7 +101,6 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; -typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -331,7 +330,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - yy_size_t yy_n_chars; + int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -429,7 +428,7 @@ static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); /* %endif */ @@ -496,7 +495,7 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ - yyleng = (yy_size_t) (yy_cp - yy_bp); \ + yyleng = (int) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ @@ -1310,8 +1309,8 @@ struct yyguts_t size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; - yy_size_t yy_n_chars; - yy_size_t yyleng_r; + int yy_n_chars; + int yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; @@ -1403,7 +1402,7 @@ void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); - yy_size_t yyget_leng ( yyscan_t yyscanner ); + int yyget_leng ( yyscan_t yyscanner ); @@ -1517,7 +1516,7 @@ static int input ( yyscan_t yyscanner ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - yy_size_t n; \ + int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -2267,7 +2266,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { - yy_size_t num_to_read = + int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -2281,7 +2280,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) if ( b->yy_is_our_buffer ) { - yy_size_t new_size = b->yy_buf_size * 2; + int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -2339,7 +2338,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) @@ -2467,7 +2466,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) else { /* need more input */ - yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) @@ -2936,12 +2935,12 @@ YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; - yy_size_t i; + int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); @@ -3000,7 +2999,7 @@ static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) do \ { \ /* Undo effects of setting up yytext. */ \ - yy_size_t yyless_macro_arg = (n); \ + int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ @@ -3088,7 +3087,7 @@ FILE *yyget_out (yyscan_t yyscanner) /** Get the length of the current token. * @param yyscanner The scanner object. */ -yy_size_t yyget_leng (yyscan_t yyscanner) +int yyget_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; diff --git a/src/realm/parser/generated/query_flex.hpp b/src/realm/parser/generated/query_flex.hpp index ccb937ad959..29b3ba5916f 100644 --- a/src/realm/parser/generated/query_flex.hpp +++ b/src/realm/parser/generated/query_flex.hpp @@ -100,7 +100,6 @@ typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; -typedef uint64_t flex_uint64_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; @@ -279,7 +278,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - yy_size_t yy_n_chars; + int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -340,7 +339,7 @@ void yypop_buffer_state ( yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); /* %endif */ @@ -460,7 +459,7 @@ void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); - yy_size_t yyget_leng ( yyscan_t yyscanner ); + int yyget_leng ( yyscan_t yyscanner ); From 2b636226dce4e7d10fa57f073388e00981cf71bf Mon Sep 17 00:00:00 2001 From: Jonathan Reams Date: Tue, 4 Jun 2024 12:54:34 -0400 Subject: [PATCH 3/4] not apple --- src/external/bson/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/external/bson/CMakeLists.txt b/src/external/bson/CMakeLists.txt index b25ee950c81..d0ec97b2aa2 100644 --- a/src/external/bson/CMakeLists.txt +++ b/src/external/bson/CMakeLists.txt @@ -35,7 +35,7 @@ CHECK_STRUCT_HAS_MEMBER ("struct timespec" tv_sec time.h BSON_HAVE_TIMESPEC) check_symbol_exists (gmtime_r time.h BSON_HAVE_GMTIME_R) check_function_exists (rand_r BSON_HAVE_RAND_R) check_include_file (strings.h BSON_HAVE_STRINGS_H) -if (NOT CMAKE_SYSTEM_NAME STREQUAL "iOS") +if (NOT APPLE) check_symbol_exists (strlcpy string.h BSON_HAVE_STRLCPY) else() set(BSON_HAVE_STRLCPY Off) From 7feae080cd19ffc4b413f4f484040d9278b773f7 Mon Sep 17 00:00:00 2001 From: Jonathan Reams Date: Tue, 4 Jun 2024 13:58:04 -0400 Subject: [PATCH 4/4] fix bad merge/changelog --- CHANGELOG.md | 1 + evergreen/config.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83530112304..08005fb69f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ ### Internals * Removed references to `stitch_` fields in access tokens in sync unit tests ([PR #7769](https://github.com/realm/realm-core/pull/7769)). +* Added back iOS simulator testing to evergreen after Jenkins went away ([PR #7758](https://github.com/realm/realm-core/pull/7758)). ---------------------------------------------- diff --git a/evergreen/config.yml b/evergreen/config.yml index 134e3651a10..672a1df5f04 100644 --- a/evergreen/config.yml +++ b/evergreen/config.yml @@ -1364,6 +1364,7 @@ task_groups: timeout: - func: "run hang analyzer" tasks: + - compile - combined-tests-ios-simulator - name: compile_only