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 ' _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
