2013-08-23 04:46:05 +08:00
|
|
|
// RUN: llvm-tblgen %s | FileCheck %s
|
|
|
|
|
2014-05-03 03:25:52 +08:00
|
|
|
// CHECK: class Y<string Y:S = ?> {
|
|
|
|
// CHECK: string T = !strconcat(Y:S, "foo");
|
|
|
|
// CHECK: string T2 = !strconcat(Y:S, !strconcat("foo", !strconcat(Y:S, "bar")));
|
|
|
|
// CHECK: string S = "foobar";
|
|
|
|
// CHECK: }
|
|
|
|
|
|
|
|
// CHECK: def Z {
|
|
|
|
// CHECK: string T = "fufoo";
|
|
|
|
// CHECK: string T2 = "fufoofubar";
|
|
|
|
// CHECK: string S = "foobar";
|
|
|
|
// CHECK: }
|
2006-04-01 05:53:01 +08:00
|
|
|
|
|
|
|
class Y<string S> {
|
|
|
|
string T = !strconcat(S, "foo");
|
2014-05-03 03:25:52 +08:00
|
|
|
// More than two arguments is equivalent to nested calls
|
|
|
|
string T2 = !strconcat(S, "foo", S, "bar");
|
2009-03-12 01:08:13 +08:00
|
|
|
|
|
|
|
// String values concatenate lexically, as in C.
|
|
|
|
string S = "foo" "bar";
|
2006-04-01 05:53:01 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
def Z : Y<"fu">;
|