Remove two convenience constructors because they're now private, and the
[oota-llvm.git] / test / lib / llvm.exp
index 921bcb5ddd7f906f4fac3d1b1867ab1c1c02953a..1afc00a21bed084db24aa36fdf1544e7ae22417c 100644 (file)
@@ -31,8 +31,12 @@ proc execOneLine { test PRS outcome lineno line } {
         set resultmsg "$test$PRS\nFailed with posix($posixNum,$posixMsg)$errmsg"
       }
       NONE {
+        # Any other error such as stderr output of a program, or syntax error in
+        # the RUN line.
+        set resultmsg "$test$PRS\nFailed with unknown error (or has stderr output)$errmsg" 
       }
       default {
+        set resultmsg "$test$PRS\nFailed with unknown error$errmsg" 
       }
     }
   } 
@@ -53,13 +57,13 @@ proc substitute { line test tmpFile } {
   #replace %prcontext with prcontext.tcl (Must replace before %p)
   regsub -all {%prcontext} $new_line $prcontext new_line
   #replace %llvmgcc with actual path to llvmgcc
-  regsub -all {%llvmgcc} $new_line "$llvmgcc -emit-llvm" new_line
+  regsub -all {%llvmgcc} $new_line "$llvmgcc -emit-llvm -w" new_line
   #replace %llvmgxx with actual path to llvmg++
-  regsub -all {%llvmgxx} $new_line "$llvmgxx -emit-llvm" new_line
-  #replace %compile_c with C compilation command
-  regsub -all {%compile_c} $new_line "$compile_c" new_line
+  regsub -all {%llvmgxx} $new_line "$llvmgxx -emit-llvm -w" new_line
   #replace %compile_cxx with C++ compilation command
   regsub -all {%compile_cxx} $new_line "$compile_cxx" new_line
+  #replace %compile_c with C compilation command
+  regsub -all {%compile_c} $new_line "$compile_c" new_line
   #replace %link with C++ link command
   regsub -all {%link} $new_line "$link" new_line
   #replace %shlibext with shared library extension
@@ -102,9 +106,13 @@ proc RunLLVMTests { test_source_files } {
     #set timeout 40
     
     set filename [file tail $test]
+    verbose "ABOUT TO RUN: $filename" 2
     set outcome PASS
     set tmpFile "$filename.tmp"
-
+    
+    # Mark that it should not be XFAIL for this target.
+    set targetPASS 0
+    
     #set hasRunline bool to check if testcase has a runline
     set numLines 0
 
@@ -115,7 +123,7 @@ proc RunLLVMTests { test_source_files } {
     foreach line [split [read $testFileId] \n] {
 
       # if its the END. line then stop parsing (optimization for big files)
-      if {[regexp {END.[ *]$} $line match endofscript]} {
+      if {[regexp {END.[[:space:]]*$} $line match endofscript]} {        
         break
 
       # if the line is continued, concatenate and continue the loop
@@ -123,8 +131,8 @@ proc RunLLVMTests { test_source_files } {
         set runline "$runline$oneline "
 
       # if its a terminating RUN: line then do substitution on the whole line
-      # and then save the line.
-      } elseif {[regexp {RUN: *([^&]+)(&&)?} $line match oneline suffix]} {
+      # and then save the line. 
+      } elseif {[regexp {RUN: *(.+)$} $line match oneline suffix]} {
         set runline "$runline$oneline"
         set runline [ substitute $runline $test $tmpFile ]
         set lines($numLines) $runline
@@ -145,12 +153,36 @@ proc RunLLVMTests { test_source_files } {
         #split up target if more then 1 specified
         foreach target [split $targets ,] {
           if { [regexp {\*} $target match] } {
-              set outcome XFAIL
+              if {$targetPASS != 1} {
+                 set outcome XFAIL
+              }
+          } elseif { [regexp $target $target_triplet match] } {
+              if {$targetPASS != 1} {
+                 set outcome XFAIL
+              }
+          } elseif { [regexp {llvmgcc(([0-9]+)|([0-9]+[.][0-9]+))} $target match submatch submatch2]  } {
+            if { [regexp ^($submatch)$|^(($submatch)(\.)) $llvmgcc_version match] } {
+              if {$targetPASS != 1} {
+                 set outcome XFAIL
+              }
+            }
+          }
+        }
+      } elseif {[regexp {XTARGET:[ *](.+)} $line match targets]} {
+        set targets
+
+        #split up target if more then 1 specified
+        foreach target [split $targets ,] {
+          if { [regexp {\*} $target match] } {
+              set targetPASS 1
+              set outcome PASS
           } elseif { [regexp $target $target_triplet match] } {
-              set outcome XFAIL
+              set targetPASS 1
+              set outcome PASS
           } elseif { [regexp {llvmgcc(([0-9]+)|([0-9]+[.][0-9]+))} $target match submatch submatch2]  } {
             if { [regexp ^($submatch)$|^(($submatch)(\.)) $llvmgcc_version match] } {
-              set outcome XFAIL
+              set targetPASS 1
+              set outcome PASS
             }
           }
         }