Changeset b2b039d
- Timestamp:
- Jun 21, 2016, 12:11:40 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 6bc4734
- Parents:
- f6d4204 (diff), 7ba3a25 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Files:
-
- 23 added
- 23 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
Jenkinsfile
rf6d4204 rb2b039d 5 5 //=========================================================================================================== 6 6 //Compilation script is done here but environnement set-up and error handling is done in main loop 7 def cfa_build( ) {7 def cfa_build(boolean full_build) { 8 8 build_stage 'Checkout' 9 9 def install_dir = pwd tmp: true 10 10 //checkout the source code and clean the repo 11 11 checkout scm 12 13 //Clean all temporary files to make sure no artifacts of the previous build remain 12 14 sh 'git clean -fdqx' 15 16 //Reset the git repo so no local changes persist 13 17 sh 'git reset --hard' 14 18 … … 26 30 build_stage 'Test' 27 31 28 //Run the tests from the exampledirectory32 //Run the tests from the tests directory 29 33 dir ('src/tests') { 30 sh './runTests.sh' 34 if (full_build) { 35 sh 'python test.py --all' 36 } 37 else { 38 sh './runTests.sh' 39 } 31 40 } 32 41 … … 35 44 //do a maintainer-clean to make sure we need to remake from scratch 36 45 sh 'make maintainer-clean > /dev/null' 46 } 47 48 def make_doc() { 49 def err = null 50 51 try { 52 sh 'make clean > /dev/null' 53 sh 'make > /dev/null 2>&1' 54 } 55 56 catch (Exception caughtError) { 57 //rethrow error later 58 err = caughtError 59 60 sh 'cat *.log' 61 } 62 63 finally { 64 /* Must re-throw exception to propagate error */ 65 if (err) { 66 throw err 67 } 68 } 69 } 70 71 def doc_build() { 72 stage 'Documentation' 73 74 status_prefix = 'Documentation' 75 76 dir ('doc/user') { 77 make_doc() 78 } 79 80 dir ('doc/refrat') { 81 make_doc() 82 } 37 83 } 38 84 … … 117 163 try { 118 164 //Prevent the build from exceeding 30 minutes 119 timeout( 30) {165 timeout(60) { 120 166 121 167 //Wrap build to add timestamp to command line … … 140 186 //Compile using gcc-4.9 141 187 currentCC = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9') 142 cfa_build( )188 cfa_build(doPromoteBuild2DoLang) 143 189 144 190 //Compile using gcc-5 145 191 currentCC = new CC_Desc('gcc-5', 'g++-5', 'gcc-5') 146 cfa_build( )192 cfa_build(doPromoteBuild2DoLang) 147 193 148 194 //Compile using gcc-4.9 149 195 currentCC = new CC_Desc('gcc-6', 'g++-6', 'gcc-6') 150 cfa_build() 196 cfa_build(doPromoteBuild2DoLang) 197 198 //Compile latex documentation 199 doc_build() 151 200 152 201 if( doPromoteBuild2DoLang ) { … … 185 234 //=========================================================================================================== 186 235 def notify_result(boolean promote, Exception err, String status, boolean log) { 236 echo 'Build completed, sending result notification' 187 237 if(promote) { 188 238 if( err ) { … … 224 274 def project_name = (env.JOB_NAME =~ /(.+)\/.+/)[0][1].toLowerCase() 225 275 226 sh "git rev-list --format=short ${gitRefOldValue}...${gitRefNewValue} > GIT_LOG" 227 def gitLog = readFile('GIT_LOG') 228 229 sh "git diff --stat ${gitRefNewValue} ${gitRefOldValue} > GIT_DIFF" 230 def gitDiff = readFile('GIT_DIFF') 276 def gitLog = 'Error retrieving git logs' 277 def gitDiff = 'Error retrieving git diff' 278 279 try { 280 281 sh "git rev-list --format=short ${gitRefOldValue}...${gitRefNewValue} > GIT_LOG" 282 gitLog = readFile('GIT_LOG') 283 284 sh "git diff --stat ${gitRefNewValue} ${gitRefOldValue} > GIT_DIFF" 285 gitDiff = readFile('GIT_DIFF') 286 } 287 catch (Exception error) {} 231 288 232 289 def email_subject = "[${project_name} git][BUILD# ${env.BUILD_NUMBER} - ${status}] - branch ${env.BRANCH_NAME}" -
doc/refrat/Makefile
rf6d4204 rb2b039d 2 2 3 3 TeXLIB = .:../LaTeXmacros:../LaTeXmacros/listings:../LaTeXmacros/enumitem:../bibliography/: 4 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex 4 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex -halt-on-error 5 5 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex 6 6 -
doc/user/Makefile
rf6d4204 rb2b039d 2 2 3 3 TeXLIB = .:../LaTeXmacros:../LaTeXmacros/listings:../LaTeXmacros/enumitem:../bibliography/: 4 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex 4 LaTeX = TEXINPUTS=${TeXLIB} && export TEXINPUTS && latex -halt-on-error 5 5 BibTeX = BIBINPUTS=${TeXLIB} && export BIBINPUTS && bibtex 6 6 -
src/tests/.expect/abs.txt
rf6d4204 rb2b039d 1 /usr/local/bin/cfa -g -Wall -Wno-unused-function abs.c -o abs2 CFA Version 1.0.0 (debug)3 1 char ¿ abs A 4 2 signed int -65 abs 65 -
src/tests/.expect/minmax.txt
rf6d4204 rb2b039d 1 char z a min a 2 signed int 4 3 min 3 3 unsigned int 4 3 min 3 4 signed long int 4 3 min 3 5 unsigned long int 4 3 min 3 6 signed long long int 4 3 min 3 7 unsigned long long int 4 3 min 3 8 float 4 3.1 min 3.1 9 double 4 3.1 min 3.1 10 long double 4 3.1 min 3.1 11 12 char z a max z 13 signed int 4 3 max 4 14 unsigned int 4 3 max 4 15 signed long int 4 3 max 4 16 unsigned long int 4 3 max 4 17 signed long long int 4 3 max 4 18 unsigned long long int 4 3 max 4 19 float 4 3.1 max 4 20 double 4 3.1 max 4 21 long double 4 3.1 max 4 -
src/tests/Cast.c
rf6d4204 rb2b039d 9 9 (int)f; 10 10 (void(*)())f; 11 ([long, long double, *[]()])([f, f, f]);11 // ([long, long double, *[]()])([f, f, f]); 12 12 } 13 13 -
src/tests/CommentMisc.c
rf6d4204 rb2b039d 1 /* single line */2 // single line3 4 // single line containing */5 // single line containing /*6 // single line containing /* */7 8 /* 1st */ int i;9 int i; /* 2nd */10 /* 1st */ int i; /* 2nd */11 /* 1st */ /* 2nd */12 13 /* 1st14 2nd */ int i;15 16 /*17 */18 19 /*20 21 */22 23 /*24 1st25 */26 27 /*28 1st29 2nd30 */31 32 // ignore preprocessor directives33 34 #line 235 #36 #include <fred>37 #define mary abc38 39 1 // alternative ANSI99 brackets 40 2 -
src/tests/Constant0-1.c
rf6d4204 rb2b039d 1 //Constant test declaration 2 // Cforall extension 1 // Constant test declaration 3 2 4 3 // value … … 6 5 int 0; 7 6 const int 0; 8 static const int 0;9 7 int 1; 10 8 const int 1; 11 static const int 1; 12 int 0, 1; 13 const int 0, 1; 9 struct { int i; } 0; 10 const struct { int i; } 1; 11 12 #ifdef DUPS 13 14 int 0; 15 const int 0; 16 int 1; 17 const int 1; 14 18 int (0), (1); 15 19 int ((0)), ((1)); 16 static const int 0, 1; 20 const int 0, 1; 21 const int (0), (1); 17 22 struct { int i; } 0; 18 23 const struct { int i; } 1; 19 static const struct { int i; } 1; 24 25 #endif // DUPS 26 27 #ifndef NEWDECL 20 28 21 29 // pointer 30 31 int *0, *1; 32 int * const (0), * const 1; 33 struct { int i; } *0; 34 const struct { int i; } *0; 35 int (*(* const x)), **0; 36 37 #ifdef DUPS 22 38 23 39 int *0, *1; … … 28 44 int (* const 0), (* const 1); 29 45 int ((* const 0)), ((* const 1)); 46 int (*(* const x)), *(*0); 47 int (*(* const x)), (*(*0)); 30 48 struct { int i; } *0; 49 const struct { int i; } *0; 50 int (*(* const x)), **0; 51 52 #endif // DUPS 53 54 #else 31 55 32 56 // Cforall style … … 34 58 * int x, 0; 35 59 const * int x, 0; 36 static const * int x, 0;37 60 * struct { int i; } 0; 38 61 const * struct { int i; } 0; 39 static const * struct { int i; } 0;40 static * int x, 0;41 static const * int x, 0;42 62 const * * int x, 0; 43 63 64 #ifdef DUPS 65 66 * int x, 0; 67 const * int x, 0; 68 69 #endif // DUPS 70 71 #endif // NEWDECL 72 44 73 int main() { 74 #ifndef NEWDECL 45 75 int 1, * 0; 76 #else 46 77 * int x, 0; 78 #endif // NEWDECL 47 79 } -
src/tests/Context.c
rf6d4204 rb2b039d 1 //cforall context declaration 2 context has_q( otype T ) { 1 // trait declaration 2 3 trait has_q( otype T ) { 3 4 T q( T ); 4 5 }; 5 6 6 7 forall( otype z | has_q( z ) ) void f() { 7 context has_r( otype T, otype U ) {8 trait has_r( otype T, otype U ) { 8 9 T r( T, T (T,U) ); 9 10 }; -
src/tests/Exception.c
rf6d4204 rb2b039d 10 10 try { 11 11 x/4; 12 } catch( int ) {12 } catch( int ) { 13 13 } catch( int x ) { 14 14 } catch( struct { int i; } ) { -
src/tests/Expression.c
rf6d4204 rb2b039d 1 int fred() {2 struct s { int i; } *p;3 int i ;1 int main() { 2 struct s { int i; } x, *p = &x; 3 int i = 3; 4 4 5 // order of evaluation (GCC is different)6 /*7 i = sizeof( (int) {3} );8 i = sizeof (int) {3};9 */10 5 // operators 11 6 … … 42 37 i||i; 43 38 p->i; 44 i+=i;45 i-=i;46 39 i*=i; 47 40 i/=i; 48 41 i%=i; 42 i+=i; 43 i-=i; 49 44 i&=i; 50 45 i|=i; … … 54 49 55 50 i?i:i; 56 57 // cast 58 /* 59 double d; 60 int *ip; 61 (int *) i; 62 (* int) i; 63 ([char, int *])[d, d]; 64 [i,ip,ip] = ([int, * int, int *])[1,(void *)2,(void *)3]; 65 [i,ip,ip] = ([int, * int, int *])([1,(void *)2,(void *)3]); 66 */ 67 } 68 69 //Dummy main 70 int main(int argc, char const *argv[]) 71 { 72 return 0; 73 } 51 } // main -
src/tests/Forall.c
rf6d4204 rb2b039d 10 10 void f( int ); 11 11 void h( void (*p)(void) ); 12 12 13 13 int x; 14 14 void (*y)(void); 15 15 char z; 16 16 float w; 17 17 18 18 f( x ); 19 19 f( y ); … … 26 26 forall( otype T ) void f( T, T ); 27 27 forall( otype T, otype U ) void f( T, U ); 28 28 29 29 int x; 30 30 float y; 31 31 int *z; 32 32 float *w; 33 33 34 34 f( x, y ); 35 35 f( z, w ); … … 46 46 } 47 47 48 context sumable( otype T ) {48 trait sumable( otype T ) { 49 49 const T 0; 50 50 T ?+?(T, T); -
src/tests/Makefile.am
rf6d4204 rb2b039d 11 11 ## Created On : Sun May 31 09:08:15 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Mon J an 25 22:31:42 201614 ## Update Count : 2513 ## Last Modified On : Mon Jun 20 14:30:52 2016 14 ## Update Count : 33 15 15 ############################################################################### 16 16 … … 23 23 vector_test_SOURCES = vector/vector_int.c vector/array.c vector/vector_test.c 24 24 avl_test_SOURCES = avltree/avl_test.c avltree/avl0.c avltree/avl1.c avltree/avl2.c avltree/avl3.c avltree/avl4.c avltree/avl-private.c 25 26 Constant0-1DP : Constant0-1.c 27 ${CC} ${CFLAGS} -DDUPS ${<} -o ${@} 28 29 Constant0-1ND : Constant0-1.c 30 ${CC} ${CFLAGS} -DNEWDECL ${<} -o ${@} 31 32 Constant0-1NDDP : Constant0-1.c 33 ${CC} ${CFLAGS} -DNEWDECL -DDUPS ${<} -o ${@} -
src/tests/Makefile.in
rf6d4204 rb2b039d 621 621 622 622 623 Constant0-1DP : Constant0-1.c 624 ${CC} ${CFLAGS} -DDUPS ${<} -o ${@} 625 626 Constant0-1ND : Constant0-1.c 627 ${CC} ${CFLAGS} -DNEWDECL ${<} -o ${@} 628 629 Constant0-1NDDP : Constant0-1.c 630 ${CC} ${CFLAGS} -DNEWDECL -DDUPS ${<} -o ${@} 631 623 632 # Tell versions [3.59,3.63) of GNU make to not export all variables. 624 633 # Otherwise a system limit (for SysV at least) may be exceeded. -
src/tests/Operators.c
rf6d4204 rb2b039d 1 int ?*?( int, int ); 1 int ?*?( int a, int b ) { 2 return 0; 3 } 2 4 3 5 int ?()( int number1, int number2 ) { … … 5 7 } 6 8 7 int ?+?( int, int ); 9 int ?+?( int a, int b ) { 10 return 0; 11 } 8 12 9 int ?=?( int *, int ); 13 int ?=?( int *a, int b ) { 14 return 0; 15 } 10 16 struct accumulator { 11 17 int total; 12 18 }; 13 19 14 char ?()( struct accumulator a, char number1, char number2 ); 20 char ?()( struct accumulator a, char number1, char number2 ) { 21 return 'a'; 22 } 15 23 16 24 void f( void ) { … … 23 31 } 24 32 33 int main(int argc, char const *argv[]) { 34 /* code */ 35 return 0; 36 } 37 25 38 // Local Variables: // 26 39 // tab-width: 4 // -
src/tests/Scope.c
rf6d4204 rb2b039d 15 15 y p; 16 16 17 context has_u( otype z ) {17 trait has_u( otype z ) { 18 18 z u(z); 19 19 }; -
src/tests/Subrange.c
rf6d4204 rb2b039d 1 1 // A small context defining the notion of an ordered otype. (The standard 2 2 // library should probably contain a context for this purpose.) 3 context ordered(otype T) {3 trait ordered(otype T) { 4 4 int ?<?(T, T), ?<=?(T, T); 5 5 }; -
src/tests/Switch.c
rf6d4204 rb2b039d 1 int fred() {1 int main(int argc, char const *argv[]) { 2 2 int i; 3 3 switch ( i ) case 3 : i = 1; -
src/tests/Typedef.c
rf6d4204 rb2b039d 18 18 a c; 19 19 20 typedef otypeof(3) x, y; // GCC20 typedef typeof(3) x, y; // GCC 21 21 22 22 x p; … … 24 24 25 25 int main() { 26 typedef otypeof(3) z, p;26 typedef typeof(3) z, p; 27 27 z w; 28 28 p x; -
src/tests/Typeof.c
rf6d4204 rb2b039d 1 1 int main() { 2 2 int *v1; 3 otypeof(v1) v2;4 otypeof(*v1) v3[4];3 typeof(v1) v2; 4 typeof(*v1) v3[4]; 5 5 char *v4[4]; 6 otypeof(otypeof(char *)[4]) v5;7 otypeof (int *) v6;8 otypeof( int ( int, int p ) ) *v7;9 otypeof( [int] ( int, int p ) ) *v8;6 typeof(typeof(char *)[4]) v5; 7 typeof (int *) v6; 8 typeof( int ( int, int p ) ) *v7; 9 typeof( [int] ( int, int p ) ) *v8; 10 10 } -
src/tests/limits.c
rf6d4204 rb2b039d 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // limits.c -- 7 // limits.c -- 8 8 // 9 9 // Author : Peter A. Buhr … … 12 12 // Last Modified On : Tue May 10 20:45:28 2016 13 13 // Update Count : 1 14 // 14 // 15 15 16 16 #include <limits> … … 109 109 long _Complex _1_sqrt_2 = _1_SQRT_2; 110 110 111 int main(int argc, char const *argv[]) { 112 //DUMMY 113 return 0; 114 } 115 111 116 // Local Variables: // 112 117 // tab-width: 4 // -
src/tests/runTests.sh
rf6d4204 rb2b039d 69 69 python test.py ${tests} 70 70 71 ret_val= 071 ret_val=$? 72 72 exit $((ret_val)) -
src/tests/test.py
rf6d4204 rb2b039d 3 3 4 4 from os import listdir 5 from os.path import isfile, join 5 from os.path import isfile, join, splitext 6 6 from subprocess import Popen, PIPE, STDOUT 7 7 … … 13 13 ################################################################################ 14 14 def listTests(): 15 list = [f.rstrip('.c') for f in listdir('.') 16 if not f.startswith('.') and ( 17 not isfile(f) or f.endswith('.c') 18 )] 15 list = [splitext(f)[0] for f in listdir('./.expect') 16 if not f.startswith('.') and f.endswith('.txt') 17 ] 19 18 20 19 return list … … 40 39 41 40 # build, skipping to next test on error 42 make_ret = sh("make -j 8 %s > %s 2>&1" % (test, out_file), dry_run)41 make_ret = sh("make -j 8 %s 2> %s 1> /dev/null" % (test, out_file), dry_run) 43 42 44 43 if make_ret == 0 : … … 51 50 retcode = 0 52 51 if not generate : 53 # touch expected files so empty output are supported by default54 sh("touch .expect/%s.txt" % test, dry_run)55 56 52 # diff the output of the files 57 53 retcode = sh("diff .expect/%s.txt .out/%s.log" % (test, test), dry_run) … … 67 63 68 64 if generate : 69 print( "Regenerate tests for: ", end="" ) 70 print( ", ".join( tests ) ) 65 print( "Regenerate tests for: " ) 71 66 72 67 failed = False; 73 68 for t in tests: 74 if not generate : 75 print("%20s " % t, end="") 69 print("%20s " % t, end="") 76 70 sys.stdout.flush() 77 71 test_failed = run_test_instance(t, generate, dry_run) … … 80 74 if not generate : 81 75 print("FAILED" if test_failed else "PASSED") 76 else : 77 print( "Done" ) 82 78 83 79 sh('make clean > /dev/null 2>&1', dry_run) 84 80 85 if generate : 86 print( "Done" ) 87 88 return 0 if failed else 1 81 return 1 if failed else 0 89 82 90 83 ################################################################################ … … 93 86 parser = argparse.ArgumentParser(description='Script which runs cforall tests') 94 87 parser.add_argument('--dry-run', help='Don\'t run the tests, only output the commands', action='store_true') 88 parser.add_argument('--list', help='List all test available', action='store_true') 95 89 parser.add_argument('--all', help='Run all test available', action='store_true') 96 parser.add_argument('-- generate-expected', help='Regenerate the .expect by running the specified tets, can be used with --all option', action='store_true')90 parser.add_argument('--regenerate-expected', help='Regenerate the .expect by running the specified tets, can be used with --all option', action='store_true') 97 91 parser.add_argument('tests', metavar='test', type=str, nargs='*', help='a list of tests to run') 98 92 99 93 options = parser.parse_args() 100 94 101 if len(options.tests) > 0 and options.all : 95 if (len(options.tests) > 0 and options.all and not options.list) \ 96 or (len(options.tests) == 0 and not options.all and not options.list) : 102 97 print('ERROR: must have option \'--all\' or non-empty test list', file=sys.stderr) 103 98 parser.print_help() 104 99 sys.exit(1) 105 100 106 tests = listTests() if options.all else options.tests 101 allTests = listTests() 107 102 108 sys.exit( run_tests(tests, options.generate_expected, options.dry_run) ) 103 if options.all or options.list : 104 tests = allTests 105 106 else : 107 tests = [] 108 for test in options.tests: 109 if test in allTests : 110 tests.append(test) 111 else : 112 print('ERROR: No expected file for test %s, ignoring it' % test, file=sys.stderr) 113 114 if len(tests) == 0 : 115 print('ERROR: No valid test to run', file=sys.stderr) 116 sys.exit(1) 117 118 if options.list : 119 print("\n".join(tests)) 120 121 else : 122 sys.exit( run_tests(tests, options.regenerate_expected, options.dry_run) )
Note: See TracChangeset
for help on using the changeset viewer.