• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// RUN: llvm-tblgen %s | FileCheck %s
2
3class A<int k, bits<2> x = 1> {
4  int K = k;
5  bits<2> Bits = x;
6}
7
8// CHECK: def a1
9// CHECK: Bits = { 0, 1 }
10def a1 : A<12>;
11
12// CHECK: def a2
13// CHECK: Bits = { 1, 0 }
14def a2 : A<13, 2>;
15
16// Here was the bug: X.Bits would get resolved to the default a1.Bits while
17// resolving the first template argument. When the second template argument
18// was processed, X would be set correctly, but Bits retained the default
19// value.
20class B<int k, A x = a1> {
21  A X = x;
22  bits<2> Bits = X.Bits;
23}
24
25// CHECK: def b1
26// CHECK: Bits = { 0, 1 }
27def b1 : B<27>;
28
29// CHECK: def b2
30// CHECK: Bits = { 1, 0 }
31def b2 : B<28, a2>;
32
33class C<A x = a1> {
34  bits<2> Bits = x.Bits;
35}
36
37// CHECK: def c1
38// CHECK: Bits = { 0, 1 }
39def c1 : C;
40
41// CHECK: def c2
42// CHECK: Bits = { 1, 0 }
43def c2 : C<a2>;
44