1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-tblgen %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker// CHECK: class Y<string Y:S = ?> { 4*9880d681SAndroid Build Coastguard Worker// CHECK: string T = !strconcat(Y:S, "foo"); 5*9880d681SAndroid Build Coastguard Worker// CHECK: string T2 = !strconcat(Y:S, !strconcat("foo", !strconcat(Y:S, "bar"))); 6*9880d681SAndroid Build Coastguard Worker// CHECK: string S = "foobar"; 7*9880d681SAndroid Build Coastguard Worker// CHECK: } 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker// CHECK: def Z { 10*9880d681SAndroid Build Coastguard Worker// CHECK: string T = "fufoo"; 11*9880d681SAndroid Build Coastguard Worker// CHECK: string T2 = "fufoofubar"; 12*9880d681SAndroid Build Coastguard Worker// CHECK: string S = "foobar"; 13*9880d681SAndroid Build Coastguard Worker// CHECK: } 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerclass Y<string S> { 16*9880d681SAndroid Build Coastguard Worker string T = !strconcat(S, "foo"); 17*9880d681SAndroid Build Coastguard Worker // More than two arguments is equivalent to nested calls 18*9880d681SAndroid Build Coastguard Worker string T2 = !strconcat(S, "foo", S, "bar"); 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker // String values concatenate lexically, as in C. 21*9880d681SAndroid Build Coastguard Worker string S = "foo" "bar"; 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdef Z : Y<"fu">; 25