Version 2.14.0-88.0.dev
Merge commit 'c6f69d8829e0f6ccc7f952a5844ac5a11dbafdbb' into 'dev'
diff --git a/pkg/test_runner/lib/src/compiler_configuration.dart b/pkg/test_runner/lib/src/compiler_configuration.dart
index 55bf077..95c7dcb 100644
--- a/pkg/test_runner/lib/src/compiler_configuration.dart
+++ b/pkg/test_runner/lib/src/compiler_configuration.dart
@@ -9,6 +9,7 @@
import 'path.dart';
import 'repository.dart';
import 'runtime_configuration.dart';
+import 'test_case.dart' show TestCase;
import 'test_file.dart';
import 'utils.dart';
@@ -25,10 +26,7 @@
/// list allows the result of calling this to be spread into another list.
List<String> _experimentsArgument(
TestConfiguration configuration, TestFile testFile) {
- var experiments = {
- ...configuration.experiments,
- ...testFile.experiments,
- };
+ var experiments = TestCase.getExperiments(testFile, configuration);
if (experiments.isEmpty) {
return const [];
}
diff --git a/pkg/test_runner/lib/src/test_case.dart b/pkg/test_runner/lib/src/test_case.dart
index 9316d76..995bf0a 100644
--- a/pkg/test_runner/lib/src/test_case.dart
+++ b/pkg/test_runner/lib/src/test_case.dart
@@ -66,6 +66,16 @@
assert(commands.isNotEmpty);
}
+ List<String> get experiments => getExperiments(testFile, configuration);
+
+ static List<String> getExperiments(
+ TestFile testFile, TestConfiguration configuration) {
+ return [
+ ...testFile.experiments,
+ ...configuration.experiments,
+ ];
+ }
+
TestCase indexedCopy(int index) {
var newCommands = commands.map((c) => c.indexedCopy(index)).toList();
return TestCase(displayName, newCommands, configuration, expectedOutcomes,
diff --git a/pkg/test_runner/lib/src/test_progress.dart b/pkg/test_runner/lib/src/test_progress.dart
index a089688..8d01e3d 100644
--- a/pkg/test_runner/lib/src/test_progress.dart
+++ b/pkg/test_runner/lib/src/test_progress.dart
@@ -656,7 +656,7 @@
var testName = name.substring(index + 1);
var time =
test.commandOutputs.values.fold(Duration.zero, (d, o) => d + o.time);
-
+ var experiments = test.experiments;
var record = {
"name": name,
"configuration": test.configuration.configuration.name,
@@ -665,7 +665,8 @@
"time_ms": time.inMilliseconds,
"result": test.realResult.toString(),
"expected": test.realExpected.toString(),
- "matches": test.realResult.canBeOutcomeOf(test.realExpected)
+ "matches": test.realResult.canBeOutcomeOf(test.realExpected),
+ if (experiments.isNotEmpty) "experiments": experiments,
};
_results.add(record);
if (test.configuration.writeLogs && record['matches'] != true) {
diff --git a/runtime/tools/run_clang_tidy.dart b/runtime/tools/run_clang_tidy.dart
index d85f7c3..6e35eba 100644
--- a/runtime/tools/run_clang_tidy.dart
+++ b/runtime/tools/run_clang_tidy.dart
@@ -22,8 +22,9 @@
'-DDEBUG',
'-DTARGET_OS_LINUX',
'-DTESTING',
+ '-std=c++17',
'-x',
- 'c++17',
+ 'c++',
];
return flags;
}
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 2ce3561..dc366d3 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -2049,7 +2049,8 @@
// Late variable, so check whether it has been initialized already.
Fragment instructions = LoadLocal(variable);
- TargetEntryInstr *is_uninitialized, *is_initialized;
+ TargetEntryInstr* is_uninitialized;
+ TargetEntryInstr* is_initialized;
instructions += Constant(Object::sentinel());
instructions += flow_graph_builder_->BranchIfStrictEqual(&is_uninitialized,
&is_initialized);
@@ -2067,8 +2068,8 @@
// Late final variable, so check whether it has been assigned
// during initialization.
initialize += LoadLocal(variable);
- TargetEntryInstr *is_uninitialized_after_init,
- *is_initialized_after_init;
+ TargetEntryInstr* is_uninitialized_after_init;
+ TargetEntryInstr* is_initialized_after_init;
initialize += Constant(Object::sentinel());
initialize += flow_graph_builder_->BranchIfStrictEqual(
&is_uninitialized_after_init, &is_initialized_after_init);
@@ -2145,7 +2146,8 @@
// Late final variable, so check whether it has been initialized.
LocalVariable* expr_temp = MakeTemporary();
instructions += LoadLocal(variable);
- TargetEntryInstr *is_uninitialized, *is_initialized;
+ TargetEntryInstr* is_uninitialized;
+ TargetEntryInstr* is_initialized;
instructions += Constant(Object::sentinel());
instructions += flow_graph_builder_->BranchIfStrictEqual(&is_uninitialized,
&is_initialized);
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 49b36d8..8e3f11e 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -475,7 +475,8 @@
LocalVariable* instance,
LocalVariable* setter_value) {
Fragment instructions;
- TargetEntryInstr *is_uninitialized, *is_initialized;
+ TargetEntryInstr* is_uninitialized;
+ TargetEntryInstr* is_initialized;
const TokenPosition position = field.token_pos();
const bool is_static = field.is_static();
const bool is_final = field.is_final();
@@ -1090,7 +1091,8 @@
// }
const Library& core_lib = Library::Handle(Z, Library::CoreLibrary());
- TargetEntryInstr *allocate_non_growable, *allocate_growable;
+ TargetEntryInstr* allocate_non_growable;
+ TargetEntryInstr* allocate_growable;
body += LoadArgDescriptor();
body += LoadNativeField(Slot::ArgumentsDescriptor_positional_count());
@@ -2108,7 +2110,8 @@
Fragment check;
check += LoadLocal(info.type_parameters);
- TargetEntryInstr *is_not_generic, *is_generic;
+ TargetEntryInstr* is_not_generic;
+ TargetEntryInstr* is_generic;
check += BranchIfNull(&is_not_generic, &is_generic);
generic.Prepend(is_generic);
@@ -2154,7 +2157,8 @@
check_required += LoadLocal(info.parameter_names);
check_required += LoadNativeField(Slot::Array_length());
check_required += SmiRelationalOp(Token::kLT);
- TargetEntryInstr *valid_index, *invalid_index;
+ TargetEntryInstr* valid_index;
+ TargetEntryInstr* invalid_index;
check_required += BranchIfTrue(&valid_index, &invalid_index);
JoinEntryInstr* join_not_set = BuildJoinEntry();
@@ -2181,7 +2185,8 @@
IntConstant(1 << compiler::target::kRequiredNamedParameterFlag);
check_required += SmiBinaryOp(Token::kBIT_AND);
check_required += IntConstant(0);
- TargetEntryInstr *is_not_set, *is_set;
+ TargetEntryInstr* is_not_set;
+ TargetEntryInstr* is_set;
check_required += BranchIfEqual(&is_not_set, &is_set);
Fragment(is_not_set) + Goto(join_not_set);
@@ -2230,19 +2235,22 @@
JoinEntryInstr* done = BuildJoinEntry();
store_default += LoadLocal(default_tav_kind);
- TargetEntryInstr *is_instantiated, *is_not_instantiated;
+ TargetEntryInstr* is_instantiated;
+ TargetEntryInstr* is_not_instantiated;
store_default += IntConstant(static_cast<intptr_t>(
ClosureData::DefaultTypeArgumentsKind::kIsInstantiated));
store_default += BranchIfEqual(&is_instantiated, &is_not_instantiated);
store_default.current = is_not_instantiated; // Check next case.
store_default += LoadLocal(default_tav_kind);
- TargetEntryInstr *needs_instantiation, *can_share;
+ TargetEntryInstr* needs_instantiation;
+ TargetEntryInstr* can_share;
store_default += IntConstant(static_cast<intptr_t>(
ClosureData::DefaultTypeArgumentsKind::kNeedsInstantiation));
store_default += BranchIfEqual(&needs_instantiation, &can_share);
store_default.current = can_share; // Check next case.
store_default += LoadLocal(default_tav_kind);
- TargetEntryInstr *can_share_instantiator, *can_share_function;
+ TargetEntryInstr* can_share_instantiator;
+ TargetEntryInstr* can_share_function;
store_default += IntConstant(static_cast<intptr_t>(
ClosureData::DefaultTypeArgumentsKind::kSharesInstantiatorTypeArguments));
store_default += BranchIfEqual(&can_share_instantiator, &can_share_function);
@@ -2317,7 +2325,8 @@
has_any += LoadLocal(info.num_max_params);
has_any += LoadLocal(info.parameter_names);
has_any += LoadNativeField(Slot::Array_length());
- TargetEntryInstr *no_required, *has_required;
+ TargetEntryInstr* no_required;
+ TargetEntryInstr* has_required;
has_any += BranchIfEqual(&no_required, &has_required);
Fragment(has_required) + Goto(info.throw_no_such_method);
@@ -2350,7 +2359,8 @@
loop_check += LoadLocal(info.vars->current_param_index);
loop_check += LoadLocal(info.num_max_params);
loop_check += SmiRelationalOp(Token::kLT);
- TargetEntryInstr *no_more, *more;
+ TargetEntryInstr* no_more;
+ TargetEntryInstr* more;
loop_check += BranchIfTrue(&more, &no_more);
Fragment(no_more) + Goto(done);
@@ -2371,7 +2381,8 @@
const auto& name = String::ZoneHandle(Z, info.descriptor.NameAt(i));
loop_body += Constant(name);
loop_body += LoadLocal(param_name);
- TargetEntryInstr *match, *mismatch;
+ TargetEntryInstr* match;
+ TargetEntryInstr* mismatch;
loop_body += BranchIfEqual(&match, &mismatch);
loop_body.current = mismatch;
@@ -2411,7 +2422,8 @@
Fragment check_processed(done);
check_processed += LoadLocal(info.vars->current_num_processed);
check_processed += IntConstant(info.descriptor.NamedCount());
- TargetEntryInstr *all_processed, *bad_name;
+ TargetEntryInstr* all_processed;
+ TargetEntryInstr* bad_name;
check_processed += BranchIfEqual(&all_processed, &bad_name);
// Didn't find a matching parameter name for at least one argument name.
@@ -2437,14 +2449,16 @@
if (info.descriptor.TypeArgsLen() > 0) {
Fragment check_type_args_length;
check_type_args_length += LoadLocal(info.type_parameters);
- TargetEntryInstr *null, *not_null;
+ TargetEntryInstr* null;
+ TargetEntryInstr* not_null;
check_type_args_length += BranchIfNull(&null, ¬_null);
check_type_args_length.current = not_null; // Continue in non-error case.
check_type_args_length += LoadLocal(info.type_parameters);
check_type_args_length += LoadNativeField(Slot::TypeParameters_names());
check_type_args_length += LoadNativeField(Slot::Array_length());
check_type_args_length += IntConstant(info.descriptor.TypeArgsLen());
- TargetEntryInstr *equal, *not_equal;
+ TargetEntryInstr* equal;
+ TargetEntryInstr* not_equal;
check_type_args_length += BranchIfEqual(&equal, ¬_equal);
check_type_args_length.current = equal; // Continue in non-error case.
@@ -2462,7 +2476,8 @@
}
check_entry += LoadLocal(info.has_named_params);
- TargetEntryInstr *has_named, *has_positional;
+ TargetEntryInstr* has_named;
+ TargetEntryInstr* has_positional;
check_entry += BranchIfTrue(&has_named, &has_positional);
JoinEntryInstr* join_after_optional = BuildJoinEntry();
check_entry.current = join_after_optional;
@@ -2475,7 +2490,8 @@
check_pos += LoadLocal(info.num_fixed_params);
check_pos += IntConstant(info.descriptor.PositionalCount());
check_pos += SmiRelationalOp(Token::kLTE);
- TargetEntryInstr *enough, *too_few;
+ TargetEntryInstr* enough;
+ TargetEntryInstr* too_few;
check_pos += BranchIfTrue(&enough, &too_few);
check_pos.current = enough;
@@ -2484,7 +2500,8 @@
check_pos += IntConstant(info.descriptor.PositionalCount());
check_pos += LoadLocal(info.num_max_params);
check_pos += SmiRelationalOp(Token::kLTE);
- TargetEntryInstr *valid, *too_many;
+ TargetEntryInstr* valid;
+ TargetEntryInstr* too_many;
check_pos += BranchIfTrue(&valid, &too_many);
check_pos.current = valid;
@@ -2495,7 +2512,8 @@
Fragment check_named(has_named);
- TargetEntryInstr *same, *different;
+ TargetEntryInstr* same;
+ TargetEntryInstr* different;
check_named += LoadLocal(info.num_fixed_params);
check_named += IntConstant(info.descriptor.PositionalCount());
check_named += BranchIfEqual(&same, &different);
@@ -2507,7 +2525,8 @@
check_named += IntConstant(info.descriptor.NamedCount());
check_named += LoadLocal(info.num_opt_params);
check_named += SmiRelationalOp(Token::kLTE);
- TargetEntryInstr *valid, *too_many;
+ TargetEntryInstr* valid;
+ TargetEntryInstr* too_many;
check_named += BranchIfTrue(&valid, &too_many);
check_named.current = valid;
@@ -2535,7 +2554,8 @@
// A null bounds vector represents a vector of dynamic and no check is needed.
loop_init += LoadLocal(info.type_parameters);
loop_init += LoadNativeField(Slot::TypeParameters_bounds());
- TargetEntryInstr *null_bounds, *non_null_bounds;
+ TargetEntryInstr* null_bounds;
+ TargetEntryInstr* non_null_bounds;
loop_init += BranchIfNull(&null_bounds, &non_null_bounds);
Fragment(null_bounds) + Goto(done);
@@ -2551,7 +2571,8 @@
loop_check += LoadLocal(info.vars->current_param_index);
loop_check += LoadLocal(info.num_type_parameters);
loop_check += SmiRelationalOp(Token::kLT);
- TargetEntryInstr *more, *no_more;
+ TargetEntryInstr* more;
+ TargetEntryInstr* no_more;
loop_check += BranchIfTrue(&more, &no_more);
Fragment(no_more) + Goto(done);
@@ -2560,7 +2581,8 @@
JoinEntryInstr* next = BuildJoinEntry();
JoinEntryInstr* check = BuildJoinEntry();
loop_test_flag += LoadLocal(info.type_parameter_flags);
- TargetEntryInstr *null_flags, *non_null_flags;
+ TargetEntryInstr* null_flags;
+ TargetEntryInstr* non_null_flags;
loop_test_flag += BranchIfNull(&null_flags, &non_null_flags);
Fragment(null_flags) + Goto(check); // Check type if null (non-covariant).
@@ -2578,7 +2600,8 @@
loop_test_flag += IntConstant(1);
loop_test_flag += SmiBinaryOp(Token::kBIT_AND);
loop_test_flag += IntConstant(0);
- TargetEntryInstr *is_noncovariant, *is_covariant;
+ TargetEntryInstr* is_noncovariant;
+ TargetEntryInstr* is_covariant;
loop_test_flag += BranchIfEqual(&is_noncovariant, &is_covariant);
Fragment(is_covariant) + Goto(next); // Continue if covariant.
@@ -2590,7 +2613,8 @@
// Load type argument already stored in function_type_args if non null.
loop_prep_type_param += LoadLocal(info.vars->function_type_args);
- TargetEntryInstr *null_ftav, *non_null_ftav;
+ TargetEntryInstr* null_ftav;
+ TargetEntryInstr* non_null_ftav;
loop_prep_type_param += BranchIfNull(&null_ftav, &non_null_ftav);
Fragment(null_ftav) + Goto(dynamic_type_param);
@@ -3295,7 +3319,8 @@
shared_prologue_linked_in.current = join_entry;
}
- TargetEntryInstr *do_checks, *skip_checks;
+ TargetEntryInstr* do_checks;
+ TargetEntryInstr* skip_checks;
shared_prologue_linked_in +=
LoadLocal(parsed_function_->entry_points_temp_var());
shared_prologue_linked_in += BuildEntryPointsIntrospection();
diff --git a/tools/VERSION b/tools/VERSION
index 78a5273..f349f1c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 87
+PRERELEASE 88
PRERELEASE_PATCH 0
\ No newline at end of file