|  | // 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">; |