| // Copyright (c) 2021, the Dart 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. |
| |
| // Regression test which checks that shift left with constant operand compiles |
| // correctly even if narrowed to Int32 shift. |
| |
| import 'dart:typed_data'; |
| |
| import 'package:expect/expect.dart'; |
| |
| const int N = 10; |
| |
| @pragma('vm:never-inline') |
| void test(Int32List v) { |
| // The shape of the code here is choosen to trigger Int64->Int32 |
| // narrowing in the range analysis. |
| v[0] = (v[0] & 0xFF) << (N - 1); |
| } |
| |
| void main() { |
| final list = Int32List(1); |
| for (var i = 0; i < 10; i++) { |
| list[0] = i; |
| test(list); |
| Expect.equals(i << 9, list[0]); |
| } |
| } |