Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / TableGen / deftype.td
blob7323fc77c35dc06cd754dc0a495b8f09c5a6e0b7
1 // RUN: llvm-tblgen %s | FileCheck %s
2 // RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s
3 // RUN: not llvm-tblgen -DERROR2 %s 2>&1 | FileCheck --check-prefix=ERROR2 %s
4 // RUN: not llvm-tblgen -DERROR3 %s 2>&1 | FileCheck --check-prefix=ERROR3 %s
5 // RUN: not llvm-tblgen -DERROR4 %s 2>&1 | FileCheck --check-prefix=ERROR4 %s
6 // RUN: not llvm-tblgen -DERROR5 %s 2>&1 | FileCheck --check-prefix=ERROR5 %s
8 class Class<int v> {
9   int value = v;
12 deftype StringAlias    = string;
13 deftype CodeAlias      = code;
14 deftype DagAlias       = dag;
15 deftype Boolean        = bit;
16 deftype Byte           = bits<8>;
17 deftype Integer        = int;
18 deftype IntList        = list<int>;
19 deftype ByteList       = list<Byte>;
20 deftype ClassList      = list<Class>;
21 // The type can be another type alias.
22 deftype ClassListAlias = ClassList;
24 // CHECK:      def test {
25 // CHECK-NEXT:   string str = "string";
26 // CHECK-NEXT:   string codeStr = "code";
27 // CHECK-NEXT:   dag dagExpr = ("string" "code");
28 // CHECK-NEXT:   bit bool = 0;
29 // CHECK-NEXT:   bits<8> byte = { 0, 1, 1, 1, 1, 0, 1, 1 };
30 // CHECK-NEXT:   int integer = 123;
31 // CHECK-NEXT:   list<int> ints = [1, 2, 3];
32 // CHECK-NEXT:   list<bits<8>> bytes = [{ 0, 0, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 0, 0, 0, 1, 0 }, { 0, 0, 0, 0, 0, 0, 1, 1 }];
33 // CHECK-NEXT:   list<Class> defs = [anonymous_0, anonymous_1, anonymous_2];
34 // CHECK-NEXT: }
35 def test {
36   StringAlias    str     = "string";
37   CodeAlias      codeStr = "code";
38   DagAlias       dagExpr = (str codeStr);
39   Boolean        bool    = false;
40   Byte           byte    = 123;
41   Integer        integer = 123;
42   IntList        ints    = [1, 2, 3];
43   ByteList       bytes   = [1, 2, 3];
44   ClassListAlias defs    = [Class<1>, Class<2>, Class<3>];
47 #ifdef ERROR1
48 // ERROR1: [[@LINE+1]]:9: error: type of this name 'Byte' already exists
49 deftype Byte = bits<8>;
50 #endif
52 #ifdef ERROR2
53 // ERROR2: [[@LINE+1]]:9: error: type of this name 'Class' already exists
54 deftype Class = int;
55 #endif
57 #ifdef ERROR3
58 // ERROR3: [[@LINE+1]]:22: error: cannot define type alias for class type 'Class'
59 deftype ClassAlias = Class;
60 #endif
62 #ifdef ERROR4
63 // ERROR4: [[@LINE+1]]:7: error: there is already a defined type alias 'Byte'
64 class Byte; // incomplete class definition.
65 #endif
67 #ifdef ERROR5
68 // ERROR5: [[@LINE+1]]:7: error: there is already a defined type alias 'Byte'
69 class Byte {}
70 #endif