| // RUN: llvm-tblgen %s | FileCheck %s | 
 |  | 
 | // 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: } | 
 |  | 
 | class Y<string S> { | 
 |   string T = !strconcat(S, "foo"); | 
 |   // More than two arguments is equivalent to nested calls | 
 |   string T2 = !strconcat(S, "foo", S, "bar"); | 
 |  | 
 |   // String values concatenate lexically, as in C. | 
 |   string S = "foo" "bar"; | 
 | } | 
 |  | 
 | def Z : Y<"fu">; |