tree 7c805529886745d8e94369b31aa467cfe9bb7e7f
parent 04beb44a77c7c98a780803319974be9b65520b47
author Christoffer Quist Adamsen <christofferqa@google.com> 1529395994 +0200
committer Christoffer Quist Adamsen <christofferqa@google.com> 1529395994 +0200

Prevent class merging from hiding IncompatibleClassChangeErrors

This CL prevents SingleTargetExecutionTest.runSingleTargetTest from failing when vertical class merging is enabled.

The test runSingleTargetTest relies on a program with the following structure:
  interface InterfaceWithDefault {
    default void overriddenInOtherInterface() { ... }
  }
  interface IrrelevantInterfaceWithDefault {
    default void overriddenInOtherInterface() { ... }
  }
  abstract class AbstractTopClass implements InterfaceWithDefault {}
  abstract class AbstractSubClass extends AbstractTopClass {}
  class SubSubClassOne extends AbstractSubClass implements IrrelevantInterfaceWithDefalut {}

Then, in Main, the test contains an invocation on the form "invoke-interface InterfaceWithDefault.overriddenInOtherInterface(), v" where `v` is an instance of SubSubClassOne. Invocations like this one should fail with an IncompatibleClassChangeError.

Change-Id: If5dfc342ca8300e43b580f3312670bf4473efbaf