]> granicus.if.org Git - clang/commitdiff
Sketch a simple new C++Tests suite for checking that llvm-gcc and clang generate
authorDaniel Dunbar <daniel@zuster.org>
Thu, 24 Dec 2009 21:27:38 +0000 (21:27 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 24 Dec 2009 21:27:38 +0000 (21:27 +0000)
the same visible symbols, useful for finding ABI/Mangler/vtable/etc. issues.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92147 91177308-0d34-0410-b5e6-96231b3b80d8

utils/C++Tests/LLVM-Code-Symbols/check-symbols [new file with mode: 0755]
utils/C++Tests/LLVM-Code-Symbols/lit.local.cfg [new file with mode: 0644]
utils/C++Tests/lit.cfg

diff --git a/utils/C++Tests/LLVM-Code-Symbols/check-symbols b/utils/C++Tests/LLVM-Code-Symbols/check-symbols
new file mode 100755 (executable)
index 0000000..f8ff734
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+import subprocess
+import difflib
+
+def capture_2(args0, args1):
+    import subprocess
+    print ' '.join(args0)
+    print ' '.join(args1)
+    p0 = subprocess.Popen(args0, stdin=None, stdout=subprocess.PIPE,
+                          stderr=subprocess.PIPE)
+    p1 = subprocess.Popen(args1, stdin=p0.stdout, stdout=subprocess.PIPE,
+                          stderr=subprocess.PIPE)
+    out,_ = p1.communicate()
+    return out
+
+def main():
+    import sys
+    clang = sys.argv[1]
+    flags = sys.argv[2:]
+
+    llvmgcc_nm = capture_2(["llvm-gcc"] + flags + ["-emit-llvm","-c","-o","-"],
+                           ["llvm-nm", "-extern-only"])
+    clang_nm = capture_2([clang] + flags + ["-emit-llvm","-c","-o","-"],
+                         ["llvm-nm", "-extern-only"])
+
+    llvmgcc_nm = llvmgcc_nm.split('\n')
+    clang_nm = clang_nm.split('\n')
+    llvmgcc_nm.sort()
+    clang_nm.sort()
+
+    if llvmgcc_nm == clang_nm:
+        sys.exit(0)
+
+    for line in difflib.unified_diff(llvmgcc_nm, clang_nm,
+                                     fromfile="llvm-gcc symbols",
+                                     tofile="clang symbols"):
+        print line
+    sys.exit(1)
+
+if __name__ == '__main__':
+    main()
diff --git a/utils/C++Tests/LLVM-Code-Symbols/lit.local.cfg b/utils/C++Tests/LLVM-Code-Symbols/lit.local.cfg
new file mode 100644 (file)
index 0000000..c328a25
--- /dev/null
@@ -0,0 +1,56 @@
+# -*- Python -*-
+
+# Configuration file for the 'lit' test runner.
+
+def getRoot(config):
+    if not config.parent:
+        return config
+    return getRoot(config.parent)
+
+root = getRoot(config)
+
+# testFormat: The test format to use to interpret tests.
+target_obj_root = root.llvm_obj_root
+cxxflags = ['-D__STDC_LIMIT_MACROS',
+            '-D__STDC_CONSTANT_MACROS',
+            '-Wno-sign-compare',
+            '-I%s/include' % root.llvm_src_root,
+            '-I%s/include' % root.llvm_obj_root,
+            '-I%s/lib/Target/Alpha' % root.llvm_src_root,
+            '-I%s/lib/Target/ARM' % root.llvm_src_root,
+            '-I%s/lib/Target/Blackfin' % root.llvm_src_root,
+            '-I%s/lib/Target/CBackend' % root.llvm_src_root,
+            '-I%s/lib/Target/CellSPU' % root.llvm_src_root,
+            '-I%s/lib/Target/CppBackend' % root.llvm_src_root,
+            '-I%s/lib/Target/Mips' % root.llvm_src_root,
+            '-I%s/lib/Target/MSIL' % root.llvm_src_root,
+            '-I%s/lib/Target/MSP430' % root.llvm_src_root,
+            '-I%s/lib/Target/PIC16' % root.llvm_src_root,
+            '-I%s/lib/Target/PowerPC' % root.llvm_src_root,
+            '-I%s/lib/Target/Sparc' % root.llvm_src_root,
+            '-I%s/lib/Target/SystemZ' % root.llvm_src_root,
+            '-I%s/lib/Target/X86' % root.llvm_src_root,
+            '-I%s/lib/Target/XCore' % root.llvm_src_root,
+            '-I%s/lib/Target/Alpha' % target_obj_root,
+            '-I%s/lib/Target/ARM' % target_obj_root,
+            '-I%s/lib/Target/Blackfin' % target_obj_root,
+            '-I%s/lib/Target/CBackend' % target_obj_root,
+            '-I%s/lib/Target/CellSPU' % target_obj_root,
+            '-I%s/lib/Target/CppBackend' % target_obj_root,
+            '-I%s/lib/Target/Mips' % target_obj_root,
+            '-I%s/lib/Target/MSIL' % target_obj_root,
+            '-I%s/lib/Target/MSP430' % target_obj_root,
+            '-I%s/lib/Target/PIC16' % target_obj_root,
+            '-I%s/lib/Target/PowerPC' % target_obj_root,
+            '-I%s/lib/Target/Sparc' % target_obj_root,
+            '-I%s/lib/Target/SystemZ' % target_obj_root,
+            '-I%s/lib/Target/X86' % target_obj_root,
+            '-I%s/lib/Target/XCore' % target_obj_root];
+
+kScript = os.path.join(os.path.dirname(__file__), "check-symbols")
+config.test_format = \
+  lit.formats.OneCommandPerFileTest(command=[kScript, root.clang] + cxxflags,
+                                    dir='%s/lib' % root.llvm_src_root,
+                                    recursive=True,
+                                    pattern='^(.*\\.cpp)$')
+
index e61502b62edd9ac875b6635d82b15359b7ab08a8..274ca103f4ae45d3e2c2b0c3cd4195d495348e52 100644 (file)
@@ -24,3 +24,4 @@ if not lit.params.get('run_clang_all'):
     config.excludes.append('Clang-Code-Compile')
     config.excludes.append('LLVM-Code-Syntax')
     config.excludes.append('LLVM-Code-Compile')
+    config.excludes.append('LLVM-Code-Symbols')