From 6ef0a2f1be16382744e234b89ade1d34e6acbfe3 Mon Sep 17 00:00:00 2001 From: Daniel Sanders Date: Fri, 2 May 2014 19:25:52 +0000 Subject: [PATCH] [tablegen] !strconcat accepts more than two arguments but this wasn't documented or tested. Summary: * Updated the documentation * Added a test for >2 arguments * Added a check for the lexical concatenation * Made the existing test a bit stricter. Reviewers: t.p.northover Reviewed By: t.p.northover Subscribers: t.p.northover, llvm-commits Differential Revision: http://reviews.llvm.org/D3485 llvm-svn: 207865 --- llvm/docs/TableGen/LangIntro.rst | 4 +++- llvm/test/TableGen/strconcat.td | 14 +++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/llvm/docs/TableGen/LangIntro.rst b/llvm/docs/TableGen/LangIntro.rst index f139f3596491..5b6094fa91fd 100644 --- a/llvm/docs/TableGen/LangIntro.rst +++ b/llvm/docs/TableGen/LangIntro.rst @@ -160,8 +160,10 @@ supported include: remaining elements in the list may be arbitrary other values, including nested ```dag``' values. -``!strconcat(a, b)`` +``!strconcat(a, b, ...)`` A string value that is the result of concatenating the 'a' and 'b' strings. + More than two arguments are accepted with the result being the concatenation + of all the strings given. ``str1#str2`` "#" (paste) is a shorthand for !strconcat. It may concatenate things that diff --git a/llvm/test/TableGen/strconcat.td b/llvm/test/TableGen/strconcat.td index dfb1a94d82c8..f5d7512fd695 100644 --- a/llvm/test/TableGen/strconcat.td +++ b/llvm/test/TableGen/strconcat.td @@ -1,9 +1,21 @@ // RUN: llvm-tblgen %s | FileCheck %s -// CHECK: fufoo +// CHECK: class Y { +// 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 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";