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