Mercurial > hg > CbC > CbC_llvm
comparison llvm/test/TableGen/2010-03-24-PrematureDefaults.td @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | c4bab56944e8 |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // RUN: llvm-tblgen %s | FileCheck %s | |
2 // XFAIL: vg_leak | |
3 | |
4 class A<int k, bits<2> x = 1> { | |
5 int K = k; | |
6 bits<2> Bits = x; | |
7 } | |
8 | |
9 // CHECK: def a1 | |
10 // CHECK: Bits = { 0, 1 } | |
11 def a1 : A<12>; | |
12 | |
13 // CHECK: def a2 | |
14 // CHECK: Bits = { 1, 0 } | |
15 def a2 : A<13, 2>; | |
16 | |
17 // Here was the bug: X.Bits would get resolved to the default a1.Bits while | |
18 // resolving the first template argument. When the second template argument | |
19 // was processed, X would be set correctly, but Bits retained the default | |
20 // value. | |
21 class B<int k, A x = a1> { | |
22 A X = x; | |
23 bits<2> Bits = X.Bits; | |
24 } | |
25 | |
26 // CHECK: def b1 | |
27 // CHECK: Bits = { 0, 1 } | |
28 def b1 : B<27>; | |
29 | |
30 // CHECK: def b2 | |
31 // CHECK: Bits = { 1, 0 } | |
32 def b2 : B<28, a2>; | |
33 | |
34 class C<A x = a1> { | |
35 bits<2> Bits = x.Bits; | |
36 } | |
37 | |
38 // CHECK: def c1 | |
39 // CHECK: Bits = { 0, 1 } | |
40 def c1 : C; | |
41 | |
42 // CHECK: def c2 | |
43 // CHECK: Bits = { 1, 0 } | |
44 def c2 : C<a2>; |