From 9724c636467d56632a45fdf6353e3d57d1925501 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Thu, 7 Jan 2016 15:42:47 +0000 Subject: [PATCH] Enable interface default methods by default. This also enables interface static methods. This removes the -Xexperimental:default-methods flag and all places where we explicitly check for its presence. Bug: 24618811 Change-Id: Icd91e377bd6e1a45a1645f810d15de1b0312e31d --- cmdline/cmdline_parser_test.cc | 12 +------ cmdline/cmdline_types.h | 4 +-- compiler/dex/quick/quick_compiler.cc | 42 ++----------------------- runtime/class_linker.cc | 9 ------ runtime/dex_file_verifier.cc | 14 --------- runtime/experimental_flags.h | 5 --- runtime/parsed_options.cc | 11 ++----- runtime/runtime_options.def | 2 +- runtime/verifier/method_verifier.cc | 37 ++++++++-------------- test/048-reflect-v8/run | 19 ----------- test/960-default-smali/run | 17 ---------- test/961-default-iface-resolution-generated/run | 17 ---------- test/962-iface-static/run | 17 ---------- test/963-default-range-smali/run | 17 ---------- test/964-default-iface-init-generated/run | 17 ---------- test/965-default-verify/run | 17 ---------- test/966-default-conflict/run | 17 ---------- test/967-default-ame/run | 17 ---------- test/968-default-partial-compile-generated/run | 17 ---------- test/969-iface-super/run | 17 ---------- test/970-iface-super-resolution-generated/run | 17 ---------- test/971-iface-super/run | 17 ---------- 22 files changed, 20 insertions(+), 339 deletions(-) delete mode 100644 test/048-reflect-v8/run delete mode 100755 test/960-default-smali/run delete mode 100755 test/961-default-iface-resolution-generated/run delete mode 100755 test/962-iface-static/run delete mode 100755 test/963-default-range-smali/run delete mode 100755 test/964-default-iface-init-generated/run delete mode 100755 test/965-default-verify/run delete mode 100755 test/966-default-conflict/run delete mode 100755 test/967-default-ame/run delete mode 100755 test/968-default-partial-compile-generated/run delete mode 100755 test/969-iface-super/run delete mode 100755 test/970-iface-super-resolution-generated/run delete mode 100755 test/971-iface-super/run diff --git a/cmdline/cmdline_parser_test.cc b/cmdline/cmdline_parser_test.cc index fe83ba9e1..dc2c9c954 100644 --- a/cmdline/cmdline_parser_test.cc +++ b/cmdline/cmdline_parser_test.cc @@ -535,7 +535,7 @@ TEST_F(CmdlineParserTest, TestProfilerOptions) { /* -Xexperimental:_ */ TEST_F(CmdlineParserTest, TestExperimentalFlags) { - // Off by default + // Default EXPECT_SINGLE_PARSE_DEFAULT_VALUE(ExperimentalFlags::kNone, "", M::Experimental); @@ -549,16 +549,6 @@ TEST_F(CmdlineParserTest, TestExperimentalFlags) { EXPECT_SINGLE_PARSE_VALUE(ExperimentalFlags::kLambdas, "-Xexperimental:lambdas", M::Experimental); - // Enabled explicitly - EXPECT_SINGLE_PARSE_VALUE(ExperimentalFlags::kDefaultMethods, - "-Xexperimental:default-methods", - M::Experimental); - - // Enabled both - EXPECT_SINGLE_PARSE_VALUE(ExperimentalFlags::kDefaultMethods | ExperimentalFlags::kLambdas, - "-Xexperimental:default-methods " - "-Xexperimental:lambdas", - M::Experimental); } // -Xverify:_ diff --git a/cmdline/cmdline_types.h b/cmdline/cmdline_types.h index 6c0a0e1f4..2ed0f1747 100644 --- a/cmdline/cmdline_types.h +++ b/cmdline/cmdline_types.h @@ -845,11 +845,9 @@ template<> struct CmdlineType : CmdlineTypeParser { Result ParseAndAppend(const std::string& option, ExperimentalFlags& existing) { if (option == "none") { - existing = existing | ExperimentalFlags::kNone; + existing = ExperimentalFlags::kNone; } else if (option == "lambdas") { existing = existing | ExperimentalFlags::kLambdas; - } else if (option == "default-methods") { - existing = existing | ExperimentalFlags::kDefaultMethods; } else { return Result::Failure(std::string("Unknown option '") + option + "'"); } diff --git a/compiler/dex/quick/quick_compiler.cc b/compiler/dex/quick/quick_compiler.cc index ebc9a2c9e..027290f9b 100644 --- a/compiler/dex/quick/quick_compiler.cc +++ b/compiler/dex/quick/quick_compiler.cc @@ -486,11 +486,6 @@ static const size_t kUnsupportedOpcodesSize[] = { static_assert(sizeof(kUnsupportedOpcodesSize) == 8 * sizeof(size_t), "kUnsupportedOpcodesSize unexpected"); -static bool IsUnsupportedExperimentalLambdasOnly(size_t i) { - DCHECK_LE(i, arraysize(kUnsupportedOpcodes)); - return kUnsupportedOpcodes[i] == kUnsupportedLambdaOpcodes; -} - // The maximum amount of Dalvik register in a method for which we will start compiling. Tries to // avoid an abort when we need to manage more SSA registers than we can. static constexpr size_t kMaxAllowedDalvikRegisters = INT16_MAX / 2; @@ -513,36 +508,6 @@ static bool CanCompileShorty(const char* shorty, InstructionSet instruction_set) return true; } -// If the ISA has unsupported opcodes, should we skip scanning over them? -// -// Most of the time we're compiling non-experimental files, so scanning just slows -// performance down by as much as 6% with 4 threads. -// In the rare cases we compile experimental opcodes, the runtime has an option to enable it, -// which will force scanning for any unsupported opcodes. -static bool SkipScanningUnsupportedOpcodes(InstructionSet instruction_set) { - Runtime* runtime = Runtime::Current(); - if (UNLIKELY(runtime->AreExperimentalFlagsEnabled(ExperimentalFlags::kDefaultMethods))) { - // Always need to scan opcodes if we have default methods since invoke-super for interface - // methods is never going to be supported in the quick compiler. - return false; - } else if (UNLIKELY(kUnsupportedOpcodesSize[instruction_set] == 0U)) { - // All opcodes are supported no matter what. Usually not the case - // since experimental opcodes are not implemented in the quick compiler. - return true; - } else if (LIKELY(!Runtime::Current()-> - AreExperimentalFlagsEnabled(ExperimentalFlags::kLambdas))) { - // Experimental opcodes are disabled. - // - // If all unsupported opcodes are experimental we don't need to do scanning. - return IsUnsupportedExperimentalLambdasOnly(instruction_set); - } else { - // Experimental opcodes are enabled. - // - // Do the opcode scanning if the ISA has any unsupported opcodes. - return false; - } -} - bool QuickCompiler::CanCompileInstruction(const MIR* mir, const DexFile& dex_file) const { switch (mir->dalvikInsn.opcode) { @@ -572,11 +537,8 @@ bool QuickCompiler::CanCompileMethod(uint32_t method_idx, return false; } - // Check whether we do have limitations at all. - if (kSupportedTypes[cu->instruction_set] == nullptr && - SkipScanningUnsupportedOpcodes(cu->instruction_set)) { - return true; - } + // Since the quick compiler doesn't (and never will) support default methods we always need to + // scan opcodes. // Check if we can compile the prototype. const char* shorty = dex_file.GetMethodShorty(dex_file.GetMethodId(method_idx)); diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index ed833c433..5e4b3a6f0 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -5523,15 +5523,6 @@ bool ClassLinker::LinkInterfaceMethods( Runtime* const runtime = Runtime::Current(); const bool is_interface = klass->IsInterface(); - // TODO It might in the future prove useful to make interfaces have full iftables, allowing a - // faster invoke-super implementation in the interpreter/across dex-files. - // We will just skip doing any of this on non-debug builds for speed. - if (is_interface && - !kIsDebugBuild && - !runtime->AreExperimentalFlagsEnabled(ExperimentalFlags::kDefaultMethods)) { - return true; - } - const bool has_superclass = klass->HasSuperClass(); const bool fill_tables = !is_interface; const size_t super_ifcount = has_superclass ? klass->GetSuperClass()->GetIfTableCount() : 0U; diff --git a/runtime/dex_file_verifier.cc b/runtime/dex_file_verifier.cc index 727f4fc65..7a852e216 100644 --- a/runtime/dex_file_verifier.cc +++ b/runtime/dex_file_verifier.cc @@ -2538,20 +2538,6 @@ bool DexFileVerifier::CheckMethodAccessFlags(uint32_t method_index, return false; } - // Only the static initializer may have code in an interface. - // TODO We should have some way determine whether to allow this experimental flag without the - // runtime being started. - // We assume experimental flags are enabled when running without a runtime to enable tools like - // dexdump to handle dex files with these features. - if (((class_access_flags & kAccInterface) != 0) - && !is_clinit_by_name - && Runtime::Current() != nullptr - && !Runtime::Current()->AreExperimentalFlagsEnabled(ExperimentalFlags::kDefaultMethods)) { - *error_msg = StringPrintf("Non-clinit interface method %" PRIu32 " should not have code", - method_index); - return false; - } - // Instance constructors must not be synchronized and a few other flags. if (is_init_by_name) { static constexpr uint32_t kInitAllowed = diff --git a/runtime/experimental_flags.h b/runtime/experimental_flags.h index 2e674e95c..198f3fa56 100644 --- a/runtime/experimental_flags.h +++ b/runtime/experimental_flags.h @@ -27,7 +27,6 @@ struct ExperimentalFlags { enum { kNone = 0x0000, kLambdas = 0x0001, - kDefaultMethods = 0x0002, }; constexpr ExperimentalFlags() : value_(0x0000) {} @@ -69,10 +68,6 @@ inline std::ostream& operator<<(std::ostream& stream, const ExperimentalFlags& e stream << (started ? "|" : "") << "kLambdas"; started = true; } - if (e & ExperimentalFlags::kDefaultMethods) { - stream << (started ? "|" : "") << "kDefaultMethods"; - started = true; - } if (!started) { stream << "kNone"; } diff --git a/runtime/parsed_options.cc b/runtime/parsed_options.cc index 341be9aab..aa64ee370 100644 --- a/runtime/parsed_options.cc +++ b/runtime/parsed_options.cc @@ -565,13 +565,6 @@ bool ParsedOptions::DoParse(const RuntimeOptions& options, args.Set(M::HeapGrowthLimit, args.GetOrDefault(M::MemoryMaximumSize)); } - if (args.GetOrDefault(M::Experimental) & ExperimentalFlags::kDefaultMethods) { - LOG(WARNING) << "Default method support has been enabled. The verifier will be less strict " - << "in some cases. All existing invoke opcodes have an unstable updated " - << "specification and are nearly guaranteed to change over time. Do not attempt " - << "to write shipping code against the invoke opcodes with this flag."; - } - if (args.GetOrDefault(M::Experimental) & ExperimentalFlags::kLambdas) { LOG(WARNING) << "Experimental lambdas have been enabled. All lambda opcodes have " << "an unstable specification and are nearly guaranteed to change over time. " @@ -698,8 +691,8 @@ void ParsedOptions::Usage(const char* fmt, ...) { UsageMessage(stream, " -X[no]image-dex2oat (Whether to create and use a boot image)\n"); UsageMessage(stream, " -Xno-dex-file-fallback " "(Don't fall back to dex files without oat files)\n"); - UsageMessage(stream, " -Xexperimental:{lambdas,default-methods} " - "(Enable new experimental dalvik opcodes and semantics, off by default)\n"); + UsageMessage(stream, " -Xexperimental:lambdas " + "(Enable new and experimental dalvik opcodes and semantics)\n"); UsageMessage(stream, "\n"); UsageMessage(stream, "The following previously supported Dalvik options are ignored:\n"); diff --git a/runtime/runtime_options.def b/runtime/runtime_options.def index c5b009d2c..308f3bafc 100644 --- a/runtime/runtime_options.def +++ b/runtime/runtime_options.def @@ -113,7 +113,7 @@ RUNTIME_OPTIONS_KEY (unsigned int, ZygoteMaxFailedBoots, 10) RUNTIME_OPTIONS_KEY (Unit, NoDexFileFallback) RUNTIME_OPTIONS_KEY (std::string, CpuAbiList) RUNTIME_OPTIONS_KEY (std::string, Fingerprint) -RUNTIME_OPTIONS_KEY (ExperimentalFlags, Experimental, ExperimentalFlags::kNone) // -Xexperimental:{, lambdas, default-methods} +RUNTIME_OPTIONS_KEY (ExperimentalFlags, Experimental, ExperimentalFlags::kNone) // -Xexperimental:{none, lambdas} // Not parse-able from command line, but can be provided explicitly. // (Do not add anything here that is defined in ParsedOptions::MakeParser) diff --git a/runtime/verifier/method_verifier.cc b/runtime/verifier/method_verifier.cc index 7e0f3371b..2890a9826 100644 --- a/runtime/verifier/method_verifier.cc +++ b/runtime/verifier/method_verifier.cc @@ -608,7 +608,6 @@ SafeMap>& MethodVerifier::FindStringInitMap() { bool MethodVerifier::Verify() { // Some older code doesn't correctly mark constructors as such. Test for this case by looking at // the name. - Runtime* runtime = Runtime::Current(); const DexFile::MethodId& method_id = dex_file_->GetMethodId(dex_method_idx_); const char* method_name = dex_file_->StringDataByIdx(method_id.name_idx_); bool instance_constructor_by_name = strcmp("", method_name) == 0; @@ -678,12 +677,9 @@ bool MethodVerifier::Verify() { } if ((class_def_->GetJavaAccessFlags() & kAccInterface) != 0) { // Interface methods must be public and abstract (if default methods are disabled). - bool default_methods_supported = - runtime->AreExperimentalFlagsEnabled(ExperimentalFlags::kDefaultMethods); - uint32_t kRequired = kAccPublic | (default_methods_supported ? 0 : kAccAbstract); + uint32_t kRequired = kAccPublic; if ((method_access_flags_ & kRequired) != kRequired) { - Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interface methods must be public" - << (default_methods_supported ? "" : " and abstract"); + Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interface methods must be public"; return false; } // In addition to the above, interface methods must not be protected. @@ -715,19 +711,14 @@ bool MethodVerifier::Verify() { // default methods enabled we also allow other public, static, non-final methods to have code. // Otherwise that is the only type of method allowed. if (!(IsConstructor() && IsStatic())) { - if (runtime->AreExperimentalFlagsEnabled(ExperimentalFlags::kDefaultMethods)) { - if (IsInstanceConstructor()) { - Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interfaces may not have non-static constructor"; - return false; - } else if (method_access_flags_ & kAccFinal) { - Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interfaces may not have final methods"; - return false; - } else if (!(method_access_flags_ & kAccPublic)) { - Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interfaces may not have non-public members"; - return false; - } - } else { - Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interface methods must be abstract"; + if (IsInstanceConstructor()) { + Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interfaces may not have non-static constructor"; + return false; + } else if (method_access_flags_ & kAccFinal) { + Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interfaces may not have final methods"; + return false; + } else if (!(method_access_flags_ & kAccPublic)) { + Fail(VERIFY_ERROR_BAD_CLASS_HARD) << "interfaces may not have non-public members"; return false; } } @@ -3713,12 +3704,10 @@ ArtMethod* MethodVerifier::ResolveMethodAndCheckAccess( // Note: this check must be after the initializer check, as those are required to fail a class, // while this check implies an IncompatibleClassChangeError. if (klass->IsInterface()) { - Runtime* runtime = Runtime::Current(); - const bool default_methods_supported = - runtime == nullptr || - runtime->AreExperimentalFlagsEnabled(ExperimentalFlags::kDefaultMethods); + // methods called on interfaces should be invoke-interface, invoke-super, or invoke-static. if (method_type != METHOD_INTERFACE && - (!default_methods_supported || method_type != METHOD_STATIC)) { + method_type != METHOD_STATIC && + method_type != METHOD_SUPER) { Fail(VERIFY_ERROR_CLASS_CHANGE) << "non-interface method " << PrettyMethod(dex_method_idx, *dex_file_) << " is in an interface class " << PrettyClass(klass); diff --git a/test/048-reflect-v8/run b/test/048-reflect-v8/run deleted file mode 100644 index ba3318a1f..000000000 --- a/test/048-reflect-v8/run +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2016 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -# Ensure that the default methods are turned on for dalvikvm and dex2oat -${RUN} "$@" --experimental default-methods diff --git a/test/960-default-smali/run b/test/960-default-smali/run deleted file mode 100755 index 22f68006e..000000000 --- a/test/960-default-smali/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} --experimental default-methods "$@" diff --git a/test/961-default-iface-resolution-generated/run b/test/961-default-iface-resolution-generated/run deleted file mode 100755 index 22f68006e..000000000 --- a/test/961-default-iface-resolution-generated/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} --experimental default-methods "$@" diff --git a/test/962-iface-static/run b/test/962-iface-static/run deleted file mode 100755 index d37737f3d..000000000 --- a/test/962-iface-static/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} --experimental default-methods "$@" diff --git a/test/963-default-range-smali/run b/test/963-default-range-smali/run deleted file mode 100755 index d37737f3d..000000000 --- a/test/963-default-range-smali/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} --experimental default-methods "$@" diff --git a/test/964-default-iface-init-generated/run b/test/964-default-iface-init-generated/run deleted file mode 100755 index 22f68006e..000000000 --- a/test/964-default-iface-init-generated/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} --experimental default-methods "$@" diff --git a/test/965-default-verify/run b/test/965-default-verify/run deleted file mode 100755 index 8944ea92d..000000000 --- a/test/965-default-verify/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} "$@" --experimental default-methods diff --git a/test/966-default-conflict/run b/test/966-default-conflict/run deleted file mode 100755 index 8944ea92d..000000000 --- a/test/966-default-conflict/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} "$@" --experimental default-methods diff --git a/test/967-default-ame/run b/test/967-default-ame/run deleted file mode 100755 index 8944ea92d..000000000 --- a/test/967-default-ame/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} "$@" --experimental default-methods diff --git a/test/968-default-partial-compile-generated/run b/test/968-default-partial-compile-generated/run deleted file mode 100755 index 6d2930d46..000000000 --- a/test/968-default-partial-compile-generated/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} "$@" --experimental default-methods diff --git a/test/969-iface-super/run b/test/969-iface-super/run deleted file mode 100755 index 8944ea92d..000000000 --- a/test/969-iface-super/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} "$@" --experimental default-methods diff --git a/test/970-iface-super-resolution-generated/run b/test/970-iface-super-resolution-generated/run deleted file mode 100755 index 6d2930d46..000000000 --- a/test/970-iface-super-resolution-generated/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} "$@" --experimental default-methods diff --git a/test/971-iface-super/run b/test/971-iface-super/run deleted file mode 100755 index 6d2930d46..000000000 --- a/test/971-iface-super/run +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# -# Copyright 2015 The Android Open Source Project -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -${RUN} "$@" --experimental default-methods -- 2.11.0