# Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

-assumenosideeffects class com.example.FeatureFlags {
    public static boolean returnsTrue() return true;
    public static boolean returnsFalse() return false;
    public static int returns1() return 1;
    public static int returns2To4() return 2..4;
    public static int returns234To567() return 234..567;
    public static int returnsField() return com.google.C.X;
    public static Object returnsNull() return null;
}
