From 3e83d81b09606791b05715e6680ea57e65f06234 Mon Sep 17 00:00:00 2001 From: Petteri Aimonen Date: Wed, 9 Apr 2014 19:28:57 +0300 Subject: Use -fsanitize=undefined when running tests with clang --- tests/SConstruct | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/tests/SConstruct b/tests/SConstruct index e7aa4717..0ad833d1 100644 --- a/tests/SConstruct +++ b/tests/SConstruct @@ -33,13 +33,16 @@ env.Append(PROTOCPATH = '#../generator') # Check the compilation environment, unless we are just cleaning up. if not env.GetOption('clean'): - def check_ccflags(context, flags): + def check_ccflags(context, flags, linkflags = ''): '''Check if given CCFLAGS are supported''' context.Message('Checking support for CCFLAGS="%s"... ' % flags) oldflags = context.env['CCFLAGS'] + oldlinkflags = context.env['CCFLAGS'] context.env.Append(CCFLAGS = flags) + context.env.Append(LINKFLAGS = linkflags) result = context.TryCompile("int main() {return 0;}", '.c') context.env.Replace(CCFLAGS = oldflags) + context.env.Replace(LINKFLAGS = oldlinkflags) context.Result(result) return result @@ -83,6 +86,13 @@ if not env.GetOption('clean'): if conf.CheckCCFLAGS(extra): conf.env.Append(CORECFLAGS = extra) + # Check if we can use undefined behaviour sanitizer (only with clang) + extra = '-fsanitize=undefined ' + if 'clang' in env['CC']: + if conf.CheckCCFLAGS(extra, linkflags = extra): + conf.env.Append(CORECFLAGS = extra) + conf.env.Append(LINKFLAGS = extra) + # End the config stuff env = conf.Finish() @@ -119,9 +129,9 @@ elif 'tcc' in env['CC']: env.SetDefault(CORECFLAGS = '') -if 'clang++' in env['CXX']: +if 'clang' in env['CXX']: env.Append(CXXFLAGS = '-g -O0 -Wall -Werror -Wextra -Wno-missing-field-initializers') -elif 'g++' in env['CXX']: +elif 'g++' in env['CXX'] or 'gcc' in env['CXX']: env.Append(CXXFLAGS = '-g -O0 -Wall -Werror -Wextra -Wno-missing-field-initializers') elif 'cl' in env['CXX']: env.Append(CXXFLAGS = '/Zi /W2 /WX') -- cgit 1.2.3-korg