[ASan] Port (the last one) tricky interface_test to lit, and a *huge* chunks of boilerplate to run tests for 32/64 bits and all optimization levels. Alas, lit doesn't support for loops in RUN-lines...

llvm-svn: 161941
diff --git a/compiler-rt/lib/asan/lit_tests/stack-overflow.cc b/compiler-rt/lib/asan/lit_tests/stack-overflow.cc
index 552a97a..2c64ec6 100644
--- a/compiler-rt/lib/asan/lit_tests/stack-overflow.cc
+++ b/compiler-rt/lib/asan/lit_tests/stack-overflow.cc
@@ -1,5 +1,11 @@
-// RUN: %clangxx_asan -m64 -O2 %s -o %t
-// RUN: %t 2>&1 | %symbolizer | FileCheck %s
+// RUN: %clangxx_asan -m64 -O0 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
+// RUN: %clangxx_asan -m64 -O1 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
+// RUN: %clangxx_asan -m64 -O2 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
+// RUN: %clangxx_asan -m64 -O3 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
+// RUN: %clangxx_asan -m32 -O0 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
+// RUN: %clangxx_asan -m32 -O1 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
+// RUN: %clangxx_asan -m32 -O2 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
+// RUN: %clangxx_asan -m32 -O3 %s -o %t && %t 2>&1 | %symbolize | FileCheck %s
 
 #include <string.h>
 int main(int argc, char **argv) {
@@ -7,7 +13,7 @@
   memset(x, 0, 10);
   int res = x[argc * 10];  // BOOOM
   // CHECK: {{READ of size 1 at 0x.* thread T0}}
-  // CHECK: {{    #0 0x.* in main .*stack-overflow.cc:8}}
+  // CHECK: {{    #0 0x.* in main .*stack-overflow.cc:14}}
   // CHECK: {{Address 0x.* is .* frame <main>}}
   return res;
 }