60 lines · plain
1// RUN: llvm-tblgen %s | FileCheck %s2 3// CHECK: class F<Y [[ARG:.+]] = ?> {4// CHECK: string ret = !if(!initialized([[ARG]].str), [[ARG]].str, "N/A");5// CHECK: }6 7// CHECK-LABEL: def C8// CHECK: bit c0 = 09// CHECK: bit c1 = 110// CHECK: bit c2 = 111def C {12 bit c0 = !initialized(?);13 bit c1 = !initialized(0);14 bit c2 = !initialized(1);15}16 17class Y {18 string str = ?;19}20 21class F<Y y> {22 string ret = !if(!initialized(y.str), y.str, "N/A");23}24 25def Y0 : Y;26def Y1 : Y {27 let str = "foo";28}29 30// CHECK-LABEL: def FY031// CHECK: string ret = "N/A";32// CHECK-LABEL: def FY133// CHECK: string ret = "foo";34def FY0 : F<Y0>;35def FY1 : F<Y1>;36 37class G<Y y> {38 list<string> v = [y.str];39 bit isInit = !initialized(v);40}41 42// CHECK-LABEL: def GY043// CHECK: isInit = 144// CHECK-LABEL: def GY145// CHECK: isInit = 146def GY0 : G<Y0>;47def GY1 : G<Y1>;48 49class Thing;50def aThing : Thing;51class Propagate<Thing t> {52 Thing ret = !if(!initialized(t), t, ?);53}54// CHECK-LABEL: def PropagateNothing55// CHECK: Thing ret = ?56// CHECK-LABEL: def PropagateThing57// CHECK: Thing ret = aThing58def PropagateNothing : Propagate<?>;59def PropagateThing : Propagate<aThing>;60