[libcxx] r226575 - Address danalbert's post-commit review comments on D7019 and small fixes.
Eric Fiselier
eric at efcs.ca
Tue Jan 20 08:14:18 PST 2015
Author: ericwf
Date: Tue Jan 20 10:14:18 2015
New Revision: 226575
URL: http://llvm.org/viewvc/llvm-project?rev=226575&view=rev
Log:
Address danalbert's post-commit review comments on D7019 and small fixes.
This patch addresses some comments on http://reviews.llvm.org/D7019.
- Move compiler.py to test/libcxx from test/libcxx/test.
- Make CXXCompiler.target None by default.
- Use `{}` instead of `dict()` to initialize an empty dict.
- Pass the -fsanitize options to both the compile and link commands.
Added:
libcxx/trunk/test/libcxx/compiler.py
Removed:
libcxx/trunk/test/libcxx/test/compiler.py
Modified:
libcxx/trunk/test/libcxx/test/config.py
Added: libcxx/trunk/test/libcxx/compiler.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/compiler.py?rev=226575&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/compiler.py (added)
+++ libcxx/trunk/test/libcxx/compiler.py Tue Jan 20 10:14:18 2015
@@ -0,0 +1,113 @@
+
+import lit.util
+
+
+class CXXCompiler(object):
+ def __init__(self, path, flags=[], compile_flags=[], link_flags=[], use_ccache=False):
+ self.path = path
+ self.flags = list(flags)
+ self.compile_flags = list(compile_flags)
+ self.link_flags = list(link_flags)
+ self.use_ccache = use_ccache
+ self.type = None
+ self.version = None
+ self._initTypeAndVersion()
+
+ def _initTypeAndVersion(self):
+ # Get compiler type and version
+ macros = self.dumpMacros()
+ if macros is None:
+ return
+ compiler_type = None
+ major_ver = minor_ver = patchlevel = None
+ if '__clang__' in macros.keys():
+ compiler_type = 'clang'
+ # Treat apple's llvm fork differently.
+ if '__apple_build_version__' in macros.keys():
+ compiler_type = 'apple-clang'
+ major_ver = macros['__clang_major__']
+ minor_ver = macros['__clang_minor__']
+ patchlevel = macros['__clang_patchlevel__']
+ elif '__GNUC__' in macros.keys():
+ compiler_type = 'gcc'
+ major_ver = macros['__GNUC__']
+ minor_ver = macros['__GNUC_MINOR__']
+ patchlevel = macros['__GNUC_PATCHLEVEL__']
+ self.type = compiler_type
+ self.version = (major_ver, minor_ver, patchlevel)
+
+ def _basicCmd(self, infiles, out, is_link=False):
+ cmd = []
+ if self.use_ccache and not is_link:
+ cmd += ['ccache']
+ cmd += [self.path]
+ if out is not None:
+ cmd += ['-o', out]
+ if isinstance(infiles, list):
+ cmd += infiles
+ elif isinstance(infiles, str):
+ cmd += [infiles]
+ else:
+ raise TypeError('infiles must be a string or list')
+ return cmd
+
+ def preprocessCmd(self, infiles, out=None, flags=[]):
+ cmd = self._basicCmd(infiles, out) + ['-x', 'c++', '-E']
+ cmd += self.flags + self.compile_flags + flags
+ return cmd
+
+ def compileCmd(self, infiles, out=None, flags=[]):
+ cmd = self._basicCmd(infiles, out) + ['-x', 'c++', '-c']
+ cmd += self.flags + self.compile_flags + flags
+ return cmd
+
+ def linkCmd(self, infiles, out=None, flags=[]):
+ cmd = self._basicCmd(infiles, out, is_link=True)
+ cmd += self.flags + self.link_flags + flags
+ return cmd
+
+ def compileLinkCmd(self, infiles, out=None, flags=[]):
+ cmd = self._basicCmd(infiles, out, is_link=True) + ['-x', 'c++']
+ cmd += self.flags + self.compile_flags + self.link_flags + flags
+ return cmd
+
+ def preprocess(self, infiles, out=None, flags=[], env=None, cwd=None):
+ cmd = self.preprocessCmd(infiles, out, flags)
+ out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
+ return cmd, out, err, rc
+
+ def compile(self, infiles, out=None, flags=[], env=None, cwd=None):
+ cmd = self.compileCmd(infiles, out, flags)
+ out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
+ return cmd, out, err, rc
+
+ def link(self, infiles, out=None, flags=[], env=None, cwd=None):
+ cmd = self.linkCmd(infiles, out, flags)
+ out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
+ return cmd, out, err, rc
+
+ def compileLink(self, infiles, out=None, flags=[], env=None, cwd=None):
+ cmd = self.compileLinkCmd(infiles, out, flags)
+ out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
+ return cmd, out, err, rc
+
+ def dumpMacros(self, infiles=None, flags=[], env=None, cwd=None):
+ if infiles is None:
+ infiles = '/dev/null'
+ flags = ['-dM'] + flags
+ cmd, out, err, rc = self.preprocess(infiles, flags=flags, env=env,
+ cwd=cwd)
+ if rc != 0:
+ return None
+ parsed_macros = {}
+ lines = [l.strip() for l in out.split('\n') if l.strip()]
+ for l in lines:
+ assert l.startswith('#define ')
+ l = l[len('#define '):]
+ macro, _, value = l.partition(' ')
+ parsed_macros[macro] = value
+ return parsed_macros
+
+ def getTriple(self):
+ cmd = [self.path] + self.flags + ['-dumpmachine']
+ return lit.util.capture(cmd).strip()
Removed: libcxx/trunk/test/libcxx/test/compiler.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/compiler.py?rev=226574&view=auto
==============================================================================
--- libcxx/trunk/test/libcxx/test/compiler.py (original)
+++ libcxx/trunk/test/libcxx/test/compiler.py (removed)
@@ -1,113 +0,0 @@
-
-import lit.util
-
-
-class CXXCompiler(object):
- def __init__(self, path, flags=[], compile_flags=[], link_flags=[], use_ccache=False):
- self.path = path
- self.flags = list(flags)
- self.compile_flags = list(compile_flags)
- self.link_flags = list(link_flags)
- self.use_ccache = use_ccache
- self.type = None
- self.version = (None, None, None)
- self._initTypeAndVersion()
-
- def _initTypeAndVersion(self):
- # Get compiler type and version
- macros = self.dumpMacros()
- if macros is None:
- return
- compiler_type = None
- major_ver = minor_ver = patchlevel = None
- if '__clang__' in macros.keys():
- compiler_type = 'clang'
- # Treat apple's llvm fork differently.
- if '__apple_build_version__' in macros.keys():
- compiler_type = 'apple-clang'
- major_ver = macros['__clang_major__']
- minor_ver = macros['__clang_minor__']
- patchlevel = macros['__clang_patchlevel__']
- elif '__GNUC__' in macros.keys():
- compiler_type = 'gcc'
- major_ver = macros['__GNUC__']
- minor_ver = macros['__GNUC_MINOR__']
- patchlevel = macros['__GNUC_PATCHLEVEL__']
- self.type = compiler_type
- self.version = (major_ver, minor_ver, patchlevel)
-
- def _basicCmd(self, infiles, out, is_link=False):
- cmd = []
- if self.use_ccache and not is_link:
- cmd += ['ccache']
- cmd += [self.path]
- if out is not None:
- cmd += ['-o', out]
- if isinstance(infiles, list):
- cmd += infiles
- elif isinstance(infiles, str):
- cmd += [infiles]
- else:
- raise TypeError('infiles must be a string or list')
- return cmd
-
- def preprocessCmd(self, infiles, out=None, flags=[]):
- cmd = self._basicCmd(infiles, out) + ['-x', 'c++', '-E']
- cmd += self.flags + self.compile_flags + flags
- return cmd
-
- def compileCmd(self, infiles, out=None, flags=[]):
- cmd = self._basicCmd(infiles, out) + ['-x', 'c++', '-c']
- cmd += self.flags + self.compile_flags + flags
- return cmd
-
- def linkCmd(self, infiles, out=None, flags=[]):
- cmd = self._basicCmd(infiles, out, is_link=True)
- cmd += self.flags + self.link_flags + flags
- return cmd
-
- def compileLinkCmd(self, infiles, out=None, flags=[]):
- cmd = self._basicCmd(infiles, out, is_link=True) + ['-x', 'c++']
- cmd += self.flags + self.compile_flags + self.link_flags + flags
- return cmd
-
- def preprocess(self, infiles, out=None, flags=[], env=None, cwd=None):
- cmd = self.preprocessCmd(infiles, out, flags)
- out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
- return cmd, out, err, rc
-
- def compile(self, infiles, out=None, flags=[], env=None, cwd=None):
- cmd = self.compileCmd(infiles, out, flags)
- out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
- return cmd, out, err, rc
-
- def link(self, infiles, out=None, flags=[], env=None, cwd=None):
- cmd = self.linkCmd(infiles, out, flags)
- out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
- return cmd, out, err, rc
-
- def compileLink(self, infiles, out=None, flags=[], env=None, cwd=None):
- cmd = self.compileLinkCmd(infiles, out, flags)
- out, err, rc = lit.util.executeCommand(cmd, env=env, cwd=cwd)
- return cmd, out, err, rc
-
- def dumpMacros(self, infiles=None, flags=[], env=None, cwd=None):
- if infiles is None:
- infiles = '/dev/null'
- flags = ['-dM'] + flags
- cmd, out, err, rc = self.preprocess(infiles, flags=flags, env=env,
- cwd=cwd)
- if rc != 0:
- return None
- parsed_macros = dict()
- lines = [l.strip() for l in out.split('\n') if l.strip()]
- for l in lines:
- assert l.startswith('#define ')
- l = l[len('#define '):]
- macro, _, value = l.partition(' ')
- parsed_macros[macro] = value
- return parsed_macros
-
- def getTriple(self):
- cmd = [self.path] + self.flags + ['-dumpmachine']
- return lit.util.capture(cmd).strip()
Modified: libcxx/trunk/test/libcxx/test/config.py
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/test/config.py?rev=226575&r1=226574&r2=226575&view=diff
==============================================================================
--- libcxx/trunk/test/libcxx/test/config.py (original)
+++ libcxx/trunk/test/libcxx/test/config.py Tue Jan 20 10:14:18 2015
@@ -9,7 +9,7 @@ import lit.Test # pylint: disable=impor
import lit.util # pylint: disable=import-error,no-name-in-module
from libcxx.test.format import LibcxxTestFormat
-from libcxx.test.compiler import CXXCompiler
+from libcxx.compiler import CXXCompiler
class Configuration(object):
@@ -95,8 +95,9 @@ class Configuration(object):
'(e.g., --param=cxx_under_test=clang++)')
self.cxx = CXXCompiler(cxx)
cxx_type = self.cxx.type
- maj_v, min_v, _ = self.cxx.version
if cxx_type is not None:
+ assert self.cxx.version is not None
+ maj_v, min_v, _ = self.cxx.version
self.config.available_features.add(cxx_type)
self.config.available_features.add('%s-%s.%s' % (
cxx_type, maj_v, min_v))
@@ -413,24 +414,25 @@ class Configuration(object):
if sys.platform.startswith('linux'):
self.cxx.link_flags += ['-ldl']
if san == 'Address':
- self.cxx.compile_flags += ['-fsanitize=address']
+ self.cxx.flags += ['-fsanitize=address']
if llvm_symbolizer is not None:
self.env['ASAN_SYMBOLIZER_PATH'] = llvm_symbolizer
self.config.available_features.add('asan')
elif san == 'Memory' or san == 'MemoryWithOrigins':
- self.cxx.compile_flags += ['-fsanitize=memory']
+ self.cxx.flags += ['-fsanitize=memory']
if san == 'MemoryWithOrigins':
self.cxx.compile_flags += ['-fsanitize-memory-track-origins']
if llvm_symbolizer is not None:
self.env['MSAN_SYMBOLIZER_PATH'] = llvm_symbolizer
self.config.available_features.add('msan')
elif san == 'Undefined':
- self.cxx.compile_flags += ['-fsanitize=undefined',
- '-fno-sanitize=vptr,function',
- '-fno-sanitize-recover', '-O3']
+ self.cxx.flags += ['-fsanitize=undefined',
+ '-fno-sanitize=vptr,function',
+ '-fno-sanitize-recover']
+ self.cxx.compile_flags += ['-O3']
self.config.available_features.add('ubsan')
elif san == 'Thread':
- self.cxx.compile_flags += ['-fsanitize=thread']
+ self.cxx.flags += ['-fsanitize=thread']
self.config.available_features.add('tsan')
else:
self.lit_config.fatal('unsupported value for '
More information about the cfe-commits
mailing list