dart2js nnbd setup

- fixes check_nnbd_sdk.dart to run on dart2js patch files
- splits golden file used by that script by target
- adds it to the old-rti bot (until we get the new nnbd bot)
- adds a suite that runs legacy tests in nnbd weak mode

Change-Id: I0a89534dcd1cf7338849d59ab3e5d989d2ecf3d0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/131885
Reviewed-by: Vijay Menon <vsm@google.com>
This commit is contained in:
Sigmund Cherem 2020-01-21 06:22:51 +00:00
parent b74620ba85
commit f910a7575f
9 changed files with 144 additions and 16 deletions

View file

@ -366,6 +366,19 @@ class CompilerOptions implements DiagnosticOptions {
_extractExperiments(options, onError: onError, onWarning: onWarning);
if (equalMaps(languageExperiments, fe.defaultExperimentalFlags)) {
platformBinaries ??= fe.computePlatformBinariesLocation();
} else {
// TODO(sigmund): change these defaults before we unfork the sdk.
// To unfork the plan is to accept the same platform files regardless of
// the experiment flag (it will be enabled in the sdk regardless).
if (_hasOption(options, Flags.testMode) &&
languageExperiments[fe.ExperimentalFlag.nonNullable]) {
var experimentWithoutNullability = Map.of(languageExperiments);
experimentWithoutNullability[fe.ExperimentalFlag.nonNullable] = false;
if (equalMaps(
experimentWithoutNullability, fe.defaultExperimentalFlags)) {
platformBinaries ??= fe.computePlatformBinariesLocation();
}
}
}
return new CompilerOptions()
..librariesSpecificationUri = librariesSpecificationUri

View file

@ -22,7 +22,7 @@ void main(List<String> argv) {
'${_parser.usage}');
return;
}
String baseDir = args['out'] as String;
var baseDir = args['out'] as String;
if (baseDir == null) {
var tmp = Directory.systemTemp.createTempSync('check_sdk-');
baseDir = tmp.path;
@ -34,11 +34,12 @@ void main(List<String> argv) {
Uri librariesJson = args['libraries'] != null
? resolveInputUri(args['libraries'] as String)
: Platform.script.resolve('../../../sdk_nnbd/lib/libraries.json');
var target = args['target'] as String;
patch.main([
'--libraries',
librariesJson.toFilePath(),
'--target',
args['target'] as String,
target,
'--out',
sdkDir,
'--merge-parts',
@ -88,7 +89,8 @@ main() {}
File.fromUri(errorFile).writeAsStringSync(errors, flush: true);
// Check against golden file.
var goldenFile = Platform.script.resolve('nnbd_sdk_error_golden.txt');
var goldenFile =
Platform.script.resolve('${target}_nnbd_sdk_error_golden.txt');
var golden = File.fromUri(goldenFile).readAsStringSync();
if (errors != golden) {
if (args['update-golden'] as bool) {
@ -101,11 +103,9 @@ main() {}
print('Golden file does not match.');
var diff = Process.runSync('diff', [goldenFile.path, errorFile.path]);
print(diff.stdout);
print('''
To update the golden file, run:
> <path-to-newly-built-dart-sdk>/bin/dart pkg/dev_compiler/tool/check_nnbd_sdk.dart --update-golden
''');
print('\nTo update the golden file, run:'
'\n ${Platform.executable} ${Platform.script} '
'${argv.join(' ')} --update-golden');
exit(1);
}
}

View file

@ -0,0 +1,21 @@
ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '&': int.& (&), JSNumber.& (&).
ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '<<': int.<< (<<), JSNumber.<< (<<).
ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '>>': int.>> (>>), JSNumber.>> (>>).
ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '\|': int.\| (\|), JSNumber.\| (\|).
ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1655|7|5|Superinterfaces don't have a valid override for '^': int.^ (^), JSNumber.^ (^).
ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1153|7|14|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1155|7|12|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/interceptors.dart|1157|7|17|'JSMutableIndexable.[]=' ('void Function(int, dynamic)') isn't a valid override of 'JSArray.[]=' ('void Function(int, E)').
ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|708|17|3|'NativeTypedArrayOfDouble.[]=' ('void Function(int, double)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/_internal/js_runtime/lib/native_typed_data.dart|729|17|3|'NativeTypedArrayOfInt.[]=' ('void Function(int, int)') isn't a valid override of 'JSMutableIndexable.[]=' ('void Function(int, dynamic)').
ERROR|COMPILE_TIME_ERROR|INVALID_OVERRIDE|lib/js/js.dart|351|17|3|'JsArray.[]=' ('void Function(dynamic, E)') isn't a valid override of 'JsObject.[]=' ('void Function(dynamic, dynamic)').
ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1672|28|1|The operator '&' isn't defined for the class 'JSInt'.
ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1674|27|1|The operator '&' isn't defined for the class 'JSInt'.
ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1677|17|1|The operator '&' isn't defined for the class 'JSInt'.
ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|18|1|The operator '&' isn't defined for the class 'JSInt'.
ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1682|44|1|The operator '&' isn't defined for the class 'JSInt'.
ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|31|13|13|The final variable 'lengthInBytes' must be initialized.
ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|320|20|6|The final variable 'buffer' must be initialized.
ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|324|13|13|The final variable 'lengthInBytes' must be initialized.
ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|328|13|13|The final variable 'offsetInBytes' must be initialized.
ERROR|STATIC_WARNING|FINAL_NOT_INITIALIZED|lib/_internal/js_runtime/lib/native_typed_data.dart|333|13|18|The final variable 'elementSizeInBytes' must be initialized.

View file

@ -261,8 +261,16 @@ class PatchApplier extends GeneralizingAstVisitor {
var name = _qualifiedName(node);
var patchNode = patch.patches[name];
if (patchNode == null) {
print('warning: patch not found for $name: $node');
patchWasMissing = true;
// *.fromEnvironment are left unpatched by dart2js and are handled via
// codegen.
if (name != 'bool.fromEnvironment' &&
name != 'int.fromEnvironment' &&
name != 'String.fromEnvironment') {
print('warning: patch not found for $name: $node');
// TODO(sigmund): delete this fail logic? Rather than emit an empty
// file, it's more useful to emit a file with missing patches.
// patchWasMissing = true;
}
return;
}

View file

@ -52,4 +52,4 @@ DART_ROOT="$(cd "${SDK_DIR}/.." ; pwd -P)"
DART2JS="package:compiler/src/dart2js.dart"
exec "$DART" "--packages=$DART_ROOT/.packages" "${EXTRA_VM_OPTIONS[@]}" "$DART2JS" "${EXTRA_OPTIONS[@]}" "$@"
exec "$DART" "--packages=$DART_ROOT/.packages" --enable-experiment=non-nullable "${EXTRA_VM_OPTIONS[@]}" "$DART2JS" "${EXTRA_OPTIONS[@]}" "$@"

View file

@ -55,4 +55,4 @@ if [[ $DART_VM_OPTIONS ]]; then
EXTRA_VM_OPTIONS+=("${OPTIONS[@]}")
fi
exec "$DART" "${EXTRA_VM_OPTIONS[@]}" "$SNAPSHOT" "${EXTRA_OPTIONS[@]}" "$@"
exec "$DART" --enable-experiment=non-nullable "${EXTRA_VM_OPTIONS[@]}" "$SNAPSHOT" "${EXTRA_OPTIONS[@]}" "$@"

View file

@ -140,6 +140,43 @@
"xcodebuild/ReleaseX64/dart2js_platform.dill",
"xcodebuild/ReleaseX64/dart2js_platform_strong.dill"
],
"dart2js_hostasserts_nnbd": [
".packages",
"out/ReleaseX64NNBD/dart",
"out/ReleaseX64NNBD/dart2js_platform.dill",
"out/ReleaseX64NNBD/dart2js_platform_strong.dill",
"pkg/",
"runtime/tests/",
"samples-dev/",
"samples/",
"sdk/",
"sdk_nnbd/",
"tests/angular/",
"tests/co19_2/co19_2-analyzer.status",
"tests/co19_2/co19_2-co19.status",
"tests/co19_2/co19_2-dart2js.status",
"tests/co19_2/co19_2-dartdevc.status",
"tests/co19_2/co19_2-kernel.status",
"tests/co19_2/co19_2-runtime.status",
"tests/compiler/",
"tests/corelib_2/",
"tests/dart/",
"tests/kernel/",
"tests/language_2/",
"tests/lib_2/",
"tests/light_unittest.dart",
"tests/search/",
"tests/standalone_2/",
"tests/ffi/",
"third_party/d8/",
"third_party/pkg/",
"third_party/pkg_tested/",
"third_party/requirejs/",
"tools/",
"xcodebuild/ReleaseX64NNBD/dart",
"xcodebuild/ReleaseX64NNBD/dart2js_platform.dill",
"xcodebuild/ReleaseX64NNBD/dart2js_platform_strong.dill"
],
"front-end": [
".packages",
"out/ReleaseIA32/",
@ -370,6 +407,13 @@
"options": {
"use-sdk": true
}},
"dart2js-weak-(linux|mac|win)-x64-d8": {
"options": {
"builder-tag": "dart2js-weak",
"enable-experiment": ["non-nullable"],
"dart2js-options": ["--no-runtime-null-safety"],
"use-sdk": true
}},
"dart2js-(linux|win)-firefox": {
"options": {
"use-sdk": true
@ -408,6 +452,13 @@
"options": {
"host-checked": true
}},
"dart2js-hostasserts-weak-(linux|mac|win)-x64-d8": {
"options": {
"builder-tag": "dart2js-weak",
"enable-experiment": ["non-nullable"],
"dart2js-options": ["--no-runtime-null-safety"],
"host-checked": true
}},
"dart2js-old-rti-(linux|mac|win)-x64-d8": {
"options": {
"builder-tag": "old_rti",
@ -578,7 +629,6 @@
"use-sdk": true,
"enable-experiment": ["non-nullable"],
"enable-asserts": true
}},
"cfe-(linux|mac|win)": {
"options": {
@ -1998,8 +2048,32 @@
"script": "tools/build.py",
"arguments": [
"--nnbd",
"create_sdk"
"create_sdk",
"dart2js_bot"
]
},
{
"name": "check dart nnbd sdk for static errors",
"script": "out/ReleaseX64NNBD/dart-sdk/bin/dart",
"arguments": [
"--enable-experiment=non-nullable",
"pkg/dev_compiler/tool/check_nnbd_sdk.dart",
"--target",
"dart2js_server"
]
},
{
"name": "dart2js nnbd weak tests",
"arguments": [
"-ndart2js-hostasserts-weak-linux-x64-d8",
"--dart2js-batch",
"language_2",
"corelib_2",
"dart2js_extra",
"dart2js_native"
],
"shards": 6,
"fileset": "dart2js_hostasserts_nnbd"
}
]
},

View file

@ -34,7 +34,6 @@ prebuilt_dart_action("dart2js_create_snapshot_entry") {
script = "create_snapshot_entry.dart"
inputs = [
"../../sdk/lib/_internal/sdk_library_metadata/lib/libraries.dart",
"$target_gen_dir/dart2js_files.stamp",
"../../tools/make_version.py",
"../../tools/VERSION",
@ -69,8 +68,13 @@ application_snapshot("dart2js") {
training_args = [
"--packages=" + rebase_path("../../.packages"),
"--libraries-spec=" + rebase_path("../../$libraries_specification_path"),
rebase_path("$target_gen_dir/dart2js.dart"),
]
if (use_nnbd) {
training_args += [ "--enable-experiment=non-nullable" ]
}
training_args += [ rebase_path("$target_gen_dir/dart2js.dart") ]
}
compile_platform("compile_dart2js_platform") {
@ -88,6 +92,10 @@ compile_platform("compile_dart2js_platform") {
"--target=dart2js",
"dart:core",
]
if (use_nnbd) {
args += [ "--enable-experiment=non-nullable" ]
}
}
compile_platform("compile_dart2js_server_platform") {
single_root_scheme = "org-dartlang-sdk"
@ -104,4 +112,8 @@ compile_platform("compile_dart2js_server_platform") {
"--target=dart2js_server",
"dart:core",
]
if (use_nnbd) {
args += [ "--enable-experiment=non-nullable" ]
}
}