Added %(line), %(line+<number>), %(line-<number>) substitutions to lit
authorAlexander Kornienko <alexfh@google.com>
Wed, 14 Nov 2012 20:26:19 +0000 (20:26 +0000)
committerAlexander Kornienko <alexfh@google.com>
Wed, 14 Nov 2012 20:26:19 +0000 (20:26 +0000)
llvm-svn: 167971

llvm/docs/TestingGuide.html
llvm/utils/lit/lit/TestRunner.py

index d90c8ad..1be7551 100644 (file)
@@ -723,6 +723,11 @@ define two separate CHECK lines that match on the same line.
     <dd>The full path to the test case's source. This is suitable for passing
     on the command line as the input to an llvm tool.</dd>
 
+    <dt><b>%(line), %(line+<i>number</i>), %(line-<i>number</i>)</b></dt>
+    <dd>The number of the line where this variable is used, with an optional
+    integer offset. This can be used in tests with multiple RUN: lines, which
+    reference test file's line numbers.</dd>
+
     <dt><b>$srcdir</b></dt>
     <dd>The source directory from where the "<tt>make check</tt>" was run.</dd>
 
index 0c1911e..e339652 100644 (file)
@@ -432,7 +432,9 @@ def parseIntegratedTestScript(test, normalize_slashes=False,
     script = []
     xfails = []
     requires = []
+    line_number = 0
     for ln in open(sourcepath):
+        line_number += 1
         if 'RUN:' in ln:
             # Isolate the command to run.
             index = ln.index('RUN:')
@@ -441,6 +443,15 @@ def parseIntegratedTestScript(test, normalize_slashes=False,
             # Trim trailing whitespace.
             ln = ln.rstrip()
 
+            # Substitute line number expressions
+            ln = re.sub('%\(line\)', str(line_number), ln)
+            def replace_line_number(match):
+                if match.group(1) == '+':
+                    return str(line_number + int(match.group(2)))
+                if match.group(1) == '-':
+                    return str(line_number - int(match.group(2)))
+            ln = re.sub('%\(line *([\+-]) *(\d+)\)', replace_line_number, ln)
+
             # Collapse lines with trailing '\\'.
             if script and script[-1][-1] == '\\':
                 script[-1] = script[-1][:-1] + ln