| // RUN: llvm-tblgen --no-warn-on-unused-template-args %s | FileCheck %s |
| // XFAIL: vg_leak |
| |
| class A; |
| def a0 : A; |
| |
| class A_check<string name>{ |
| int exists = !exists<A>(name); |
| } |
| |
| def a0_exists : A_check<"a0">; |
| def a1_missing : A_check<"a1">; |
| |
| |
| // Subclasses are allowed. |
| |
| class B; |
| class SubOfB : B; |
| class B_check<string name> { |
| int exists = !exists<B>(name); |
| } |
| |
| def sub : SubOfB; |
| |
| def sub_exists : B_check<"sub">; |
| def a0_is_not_sub_of_B : B_check<"a0">; |
| |
| |
| // Self-references are allowed. |
| |
| class Self_check<string name> { |
| int exists = !exists<Self_check>(name); |
| } |
| |
| def self_reference : Self_check<"self_reference">; // Self-reference |
| // There is no record called `current` in current context though we will define it below. |
| def current_missing : Self_check<"current">; |
| def current : Self_check<"current">; |
| |
| // CHECK: def a0_exists { |
| // CHECK: int exists = 1; |
| // CHECK: } |
| |
| // CHECK: def a0_is_not_sub_of_B { |
| // CHECK: int exists = 0; |
| // CHECK: } |
| |
| // CHECK: def a1_missing { |
| // CHECK: int exists = 0; |
| // CHECK: } |
| |
| // CHECK: def current { |
| // CHECK: int exists = 1; |
| // CHECK: } |
| |
| // `current` doesn't exist because we define it below `current_missing`. |
| // CHECK: def current_missing { |
| // CHECK: int exists = 0; |
| // CHECK: } |
| |
| // CHECK: def self_reference { |
| // CHECK: int exists = 1; |
| // CHECK: } |
| |
| // CHECK: def sub_exists { |
| // CHECK: int exists = 1; |
| // CHECK: } |