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