File: named-arguments.td

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (139 lines) | stat: -rw-r--r-- 4,256 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
// RUN: llvm-tblgen %s | FileCheck %s
// RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s
// RUN: not llvm-tblgen -DERROR2 %s 2>&1 | FileCheck --check-prefix=ERROR2 %s
// RUN: not llvm-tblgen -DERROR3 %s 2>&1 | FileCheck --check-prefix=ERROR3 %s
// RUN: not llvm-tblgen -DERROR4 %s 2>&1 | FileCheck --check-prefix=ERROR4 %s
// RUN: not llvm-tblgen -DERROR5 %s 2>&1 | FileCheck --check-prefix=ERROR5 %s
// RUN: not llvm-tblgen -DERROR6 %s 2>&1 | FileCheck --check-prefix=ERROR6 %s
// RUN: not llvm-tblgen -DERROR7 %s 2>&1 | FileCheck --check-prefix=ERROR7 %s
// RUN: not llvm-tblgen -DERROR8 %s 2>&1 | FileCheck --check-prefix=ERROR8 %s

class TestClass<int a, int b = 2, int c = 3> {
  int value =  !add(a, b, c);
}
// CHECK:      def testClass1 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testClass2 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testClass3 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testClass4 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testClass5 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testClass6 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testClass7 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testClass8 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
def testClass1: TestClass<1>;
def testClass2: TestClass<1, 2>;
def testClass3: TestClass<1, 2, 3>;
def testClass4: TestClass<1, b=2>;
def testClass5: TestClass<1, c=3>;
def testClass6: TestClass<1, b=2, c=3>;
def testClass7: TestClass<1, c=3, b=2>;
def testClass8: TestClass<a=1, c=3, b=2>;

multiclass TestMultiClass<int a, int b = 2, int c = 3> {
  def "": TestClass<a, b=b, c=c>;
}

// CHECK:      def testMultiClass1 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testMultiClass2 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testMultiClass3 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testMultiClass4 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testMultiClass5 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testMultiClass6 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testMultiClass7 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
// CHECK:      def testMultiClass8 {
// CHECK-NEXT:   int value = 6;
// CHECK-NEXT: }
defm testMultiClass1: TestMultiClass<1>;
defm testMultiClass2: TestMultiClass<1, 2>;
defm testMultiClass3: TestMultiClass<1, 2, 3>;
defm testMultiClass4: TestMultiClass<1, b=2>;
defm testMultiClass5: TestMultiClass<1, c=3>;
defm testMultiClass6: TestMultiClass<1, b=2, c=3>;
defm testMultiClass7: TestMultiClass<1, c=3, b=2>;
defm testMultiClass8: TestMultiClass<a=1, b=2, c=3>;

class TestSubroutine<int a, int b=a>{
  int value=!add(a, b);
}

// CHECK:      def testSubroutine {
// CHECK-NEXT:   int value1 = 2;
// CHECK-NEXT:   int value2 = 2;
// CHECK-NEXT:   int value3 = 2;
// CHECK-NEXT: }
def testSubroutine {
  int value1=TestSubroutine<1>.value;
  int value2=TestSubroutine<1, b=1>.value;
  int value3=TestSubroutine<b=1, a=1>.value;
}

#ifdef ERROR1
// ERROR1: Argument "d" doesn't exist
def testError1: TestClass<1, d=3>;
#endif

#ifdef ERROR2
// ERROR2: The name of named argument should be a valid identifier
def testError2: TestClass<1, 3=0>;
#endif

#ifdef ERROR3
// ERROR3: Positional argument should be put before named argument
def testError3: TestClass<1, b=1, 2>;
#endif

#ifdef ERROR4
// ERROR4: The value of named argument should be initialized, but we got '?'
def testError4: TestClass<1, b=?>;
#endif

#ifdef ERROR5
// ERROR5: We can only specify the template argument 'TestClass:a' once
def testError5: TestClass<1, a=1>;
#endif

#ifdef ERROR6
// ERROR6: We can only specify the template argument 'TestMultiClass::a' once
defm testError6: TestMultiClass<1, a=1>;
#endif

#ifdef ERROR7
// ERROR7: We can only specify the template argument 'TestSubroutine:a' once
def testError7 {
  int value=TestSubroutine<1, a=1>.value;
}
#endif

#ifdef ERROR8
// ERROR8: We can only specify the template argument 'TestClass:b' once
def testError8: TestClass<a=1, b=1, b=1>;
#endif