annotate llvm/test/TableGen/2010-03-24-PrematureDefaults.td @ 207:2e18cbf3894f

LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 08 Jun 2021 06:07:14 +0900
parents 1d019706d866
children c4bab56944e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: llvm-tblgen %s | FileCheck %s
anatofuz
parents:
diff changeset
2 // XFAIL: vg_leak
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 class A<int k, bits<2> x = 1> {
anatofuz
parents:
diff changeset
5 int K = k;
anatofuz
parents:
diff changeset
6 bits<2> Bits = x;
anatofuz
parents:
diff changeset
7 }
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 // CHECK: def a1
anatofuz
parents:
diff changeset
10 // CHECK: Bits = { 0, 1 }
anatofuz
parents:
diff changeset
11 def a1 : A<12>;
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 // CHECK: def a2
anatofuz
parents:
diff changeset
14 // CHECK: Bits = { 1, 0 }
anatofuz
parents:
diff changeset
15 def a2 : A<13, 2>;
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 // Here was the bug: X.Bits would get resolved to the default a1.Bits while
anatofuz
parents:
diff changeset
18 // resolving the first template argument. When the second template argument
anatofuz
parents:
diff changeset
19 // was processed, X would be set correctly, but Bits retained the default
anatofuz
parents:
diff changeset
20 // value.
anatofuz
parents:
diff changeset
21 class B<int k, A x = a1> {
anatofuz
parents:
diff changeset
22 A X = x;
anatofuz
parents:
diff changeset
23 bits<2> Bits = X.Bits;
anatofuz
parents:
diff changeset
24 }
anatofuz
parents:
diff changeset
25
anatofuz
parents:
diff changeset
26 // CHECK: def b1
anatofuz
parents:
diff changeset
27 // CHECK: Bits = { 0, 1 }
anatofuz
parents:
diff changeset
28 def b1 : B<27>;
anatofuz
parents:
diff changeset
29
anatofuz
parents:
diff changeset
30 // CHECK: def b2
anatofuz
parents:
diff changeset
31 // CHECK: Bits = { 1, 0 }
anatofuz
parents:
diff changeset
32 def b2 : B<28, a2>;
anatofuz
parents:
diff changeset
33
anatofuz
parents:
diff changeset
34 class C<A x = a1> {
anatofuz
parents:
diff changeset
35 bits<2> Bits = x.Bits;
anatofuz
parents:
diff changeset
36 }
anatofuz
parents:
diff changeset
37
anatofuz
parents:
diff changeset
38 // CHECK: def c1
anatofuz
parents:
diff changeset
39 // CHECK: Bits = { 0, 1 }
anatofuz
parents:
diff changeset
40 def c1 : C;
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 // CHECK: def c2
anatofuz
parents:
diff changeset
43 // CHECK: Bits = { 1, 0 }
anatofuz
parents:
diff changeset
44 def c2 : C<a2>;