Changes in / [794db28:d2b5d2d]
- Files:
-
- 10 deleted
- 16 edited
-
driver/cc1.cc (modified) (9 diffs)
-
driver/cfa.cc (modified) (17 diffs)
-
libcfa/src/common.hfa (modified) (2 diffs)
-
libcfa/src/concurrency/coroutine.cfa (modified) (1 diff)
-
libcfa/src/concurrency/invoke.c (modified) (2 diffs)
-
libcfa/src/concurrency/invoke.h (modified) (1 diff)
-
libcfa/src/exception.c (modified) (1 diff)
-
libcfa/src/heap.cfa (modified) (3 diffs)
-
libcfa/src/stdlib.hfa (modified) (5 diffs)
-
tests/.expect/minmax.txt (modified) (2 diffs)
-
tests/Makefile.am (modified) (1 diff)
-
tests/alloc.cfa (modified) (3 diffs)
-
tests/exceptions/.expect/conditional-threads.txt (deleted)
-
tests/exceptions/.expect/defaults-threads.txt (deleted)
-
tests/exceptions/.expect/finally-threads.txt (deleted)
-
tests/exceptions/.expect/resume-threads.txt (deleted)
-
tests/exceptions/.expect/terminate-threads.txt (deleted)
-
tests/exceptions/terminate.cfa (modified) (1 diff)
-
tests/exceptions/with-threads.hfa (deleted)
-
tests/heap.cfa (modified) (3 diffs)
-
tests/linking/.expect/exception-nothreads.txt (deleted)
-
tests/linking/.expect/exception-withthreads.txt (deleted)
-
tests/linking/exception-nothreads.cfa (deleted)
-
tests/linking/exception-withthreads.cfa (deleted)
-
tests/linking/withthreads.cfa (modified) (1 diff)
-
tests/minmax.cfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
driver/cc1.cc
r794db28 rd2b5d2d 10 10 // Created On : Fri Aug 26 14:23:51 2005 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 16 21:03:02202013 // Update Count : 4 1312 // Last Modified On : Thu Aug 13 21:03:15 2020 13 // Update Count : 407 14 14 // 15 15 … … 24 24 #include <unistd.h> // execvp, fork, unlink 25 25 #include <sys/wait.h> // wait 26 #include <fcntl.h> // creat26 #include <fcntl.h> 27 27 28 28 … … 59 59 60 60 61 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); // " __CFA_FLAG__=" suffix61 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); // "N__=" suffix 62 62 63 63 static void checkEnv1( const char * args[], int & nargs ) { // stage 1 … … 111 111 } // checkEnv2 112 112 113 #define CFA_SUFFIX ".ifa" 114 115 static char tmpname[] = P_tmpdir "/CFAXXXXXX" CFA_SUFFIX; 113 114 static char tmpname[] = P_tmpdir "/CFAXXXXXX.ifa"; 116 115 static int tmpfilefd = -1; 117 116 static bool startrm = false; … … 322 321 323 322 if ( WIFSIGNALED(code) ) { // child failed ? 324 rmtmpfile(); // remove tmpname325 323 cerr << "CC1 Translator error: stage 1, child failed " << WTERMSIG(code) << endl; 326 324 exit( EXIT_FAILURE ); 327 325 } // if 328 326 329 exit( WEXITSTATUS( code ) );// bad cpp result stops top-level gcc327 exit( WEXITSTATUS(code) ); // bad cpp result stops top-level gcc 330 328 } // Stage1 331 329 … … 375 373 } else if ( arg == "-fno-diagnostics-color" ) { 376 374 color_arg = Color_Auto; 377 } // if375 } 378 376 379 377 if ( arg == "-quiet" || arg == "-version" || arg == "-fpreprocessed" || 380 // Currently CFA does not suppose precompiled .h files.381 prefix( arg, "--output-pch" ) ) {378 // Currently CFA does not suppose precompiled .h files. 379 prefix( arg, "--output-pch" ) ) { 382 380 383 381 // strip inappropriate flags with an argument … … 443 441 } // if 444 442 445 cfa_cpp_out = cfa_cpp_out.substr( 0, dot ) + CFA_SUFFIX;443 cfa_cpp_out = cfa_cpp_out.substr( 0, dot ) + ".ifa"; 446 444 if ( creat( cfa_cpp_out.c_str(), 0666 ) == -1 ) { 447 445 perror( "CC1 Translator error: stage 2, creat" ); … … 464 462 // output. Otherwise, run the cfa-cpp preprocessor on the temporary file and save the result into the output file. 465 463 466 if ( fork() == 0 ) { // child runs CFA preprocessor464 if ( fork() == 0 ) { // child runs CFA 467 465 cargs[0] = ( *new string( bprefix + "cfa-cpp" ) ).c_str(); 468 466 cargs[ncargs++] = cpp_in; … … 522 520 #endif // __DEBUG_H__ 523 521 524 if ( fork() == 0 ) { // child runs gcc522 if ( fork() == 0 ) { // child runs CFA 525 523 args[0] = compiler_path.c_str(); 526 524 args[nargs++] = "-S"; // only compile and put assembler output in specified file -
driver/cfa.cc
r794db28 rd2b5d2d 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 16 23:05:59202013 // Update Count : 4 4712 // Last Modified On : Thu Aug 13 17:22:02 2020 13 // Update Count : 435 14 14 // 15 15 16 16 #include <iostream> 17 #include <cstdio> // perror 18 #include <cstdlib> // putenv, exit 19 #include <climits> // PATH_MAX 20 #include <string> // STL version 21 #include <algorithm> // find 22 23 #include <unistd.h> // execvp 17 #include <cstdio> // perror 18 #include <cstdlib> // putenv, exit 19 #include <climits> // PATH_MAX 20 #include <unistd.h> // execvp 21 #include <string> // STL version 22 #include <string.h> // strcmp 23 #include <algorithm> // find 24 24 25 #include <sys/types.h> 25 26 #include <sys/stat.h> … … 33 34 using std::to_string; 34 35 35 //#define __DEBUG_H__ 36 37 #define xstr(s) str(s) 38 #define str(s) #s 39 40 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); // "__CFA_FLAG__=" suffix 41 42 static void Putenv( char * argv[], string arg ) { 36 // #define __DEBUG_H__ 37 38 // "N__=" suffix 39 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); 40 41 void Putenv( char * argv[], string arg ) { 43 42 // environment variables must have unique names 44 43 static int flags = 0; … … 50 49 } // Putenv 51 50 52 static bool prefix( const string & arg, const string & pre ) { // check if string has prefix 51 // check if string has prefix 52 bool prefix( const string & arg, const string & pre ) { 53 53 return arg.substr( 0, pre.size() ) == pre; 54 54 } // prefix 55 55 56 staticinline bool ends_with(const string & str, const string & sfix) {56 inline bool ends_with(const string & str, const string & sfix) { 57 57 if (sfix.size() > str.size()) return false; 58 58 return std::equal(str.rbegin(), str.rbegin() + sfix.size(), sfix.rbegin(), sfix.rend()); … … 60 60 61 61 // check if string has suffix 62 staticbool suffix( const string & arg ) {62 bool suffix( const string & arg ) { 63 63 enum { NumSuffixes = 3 }; 64 64 static const string suffixes[NumSuffixes] = { "cfa", "hfa", "ifa" }; … … 70 70 } // suffix 71 71 72 72 73 static inline bool dirExists( const string & path ) { // check if directory exists 73 74 struct stat info; … … 78 79 static inline string dir(const string & path) { 79 80 return path.substr(0, path.find_last_of('/')); 80 } // dir81 } 81 82 82 83 // Different path modes … … 117 118 } 118 119 120 121 #define xstr(s) str(s) 122 #define str(s) #s 119 123 120 124 int main( int argc, char * argv[] ) { … … 154 158 PathMode path = FromProc(); 155 159 156 const char * args[argc + 100]; // cfa command line values, plus some space for additional flags160 const char *args[argc + 100]; // cfa command line values, plus some space for additional flags 157 161 int sargs = 1; // starting location for arguments in args list 158 162 int nargs = sargs; // number of arguments in args list; 0 => command name 159 163 160 const char * libs[argc + 20]; // non-user libraries must come separately, plus some added libraries and flags164 const char *libs[argc + 20]; // non-user libraries must come separately, plus some added libraries and flags 161 165 int nlibs = 0; 162 166 … … 181 185 args[nargs++] = argv[i]; // pass argument along 182 186 if ( arg == "-o" ) o_file = i; // remember file 183 184 // CFA specific arguments185 186 187 } else if ( strncmp(arg.c_str(), "-XCFA", 5) == 0 ) { // CFA pass through 187 188 if ( arg.size() == 5 ) { … … 202 203 } else if ( arg == "-nodebug" ) { 203 204 debug = false; // strip the nodebug flag 205 } else if ( arg == "-nolib" ) { 206 nolib = true; // strip the nodebug flag 204 207 } else if ( arg == "-quiet" ) { 205 208 quiet = true; // strip the quiet flag 206 209 } else if ( arg == "-noquiet" ) { 207 210 quiet = false; // strip the noquiet flag 208 } else if ( arg == "-no-include-stdhdr" ) {209 noincstd_flag = true; // strip the no-include-stdhdr flag210 } else if ( arg == "-nolib" ) {211 nolib = true; // strip the nolib flag212 211 } else if ( arg == "-help" ) { 213 212 help = true; // strip the help flag 214 213 } else if ( arg == "-nohelp" ) { 215 214 help = false; // strip the nohelp flag 215 } else if ( arg == "-no-include-stdhdr" ) { 216 noincstd_flag = true; // strip the no-include-stdhdr flag 216 217 } else if ( arg == "-cfalib") { 217 218 compiling_libs = true; … … 335 336 string libbase; 336 337 switch(path) { 337 case Installed:338 case Installed: 338 339 args[nargs++] = "-I" CFA_INCDIR; 339 340 // do not use during build … … 345 346 libbase = CFA_LIBDIR; 346 347 break; 347 case BuildTree:348 case Distributed:348 case BuildTree: 349 case Distributed: 349 350 args[nargs++] = "-I" TOP_SRCDIR "libcfa/src"; 350 351 // do not use during build … … 380 381 string libdir = libbase + arch + "-" + config; 381 382 382 if ( path != Distributed) {383 if (path != Distributed) { 383 384 if ( ! nolib && ! dirExists( libdir ) ) { 384 385 cerr << argv[0] << " internal error, configuration " << config << " not installed." << endl; … … 400 401 string preludedir; 401 402 switch(path) { 402 case Installed : preludedir = libdir; break;403 case BuildTree : preludedir = libdir + "/prelude"; break;404 case Distributed : preludedir = dir(argv[0]); break;405 } // switch403 case Installed : preludedir = libdir; break; 404 case BuildTree : preludedir = libdir + "/prelude"; break; 405 case Distributed : preludedir = dir(argv[0]); break; 406 } 406 407 407 408 Putenv( argv, "--prelude-dir=" + preludedir ); … … 475 476 if ( bprefix.length() == 0 ) { 476 477 switch(path) { 477 case Installed : bprefix = installlibdir; break;478 case BuildTree : bprefix = srcdriverdir ; break;479 case Distributed : bprefix = dir(argv[0]) ; break;480 } // switch481 } // if482 if ( bprefix[bprefix.length() - 1] != '/' ) bprefix += '/';483 Putenv( argv, string("-B=") + bprefix );478 case Installed : bprefix = installlibdir; break; 479 case BuildTree : bprefix = srcdriverdir ; break; 480 case Distributed : bprefix = dir(argv[0]) ; break; 481 } 482 if ( bprefix[bprefix.length() - 1] != '/' ) bprefix += '/'; 483 Putenv( argv, string("-B=") + bprefix ); 484 } // if 484 485 485 486 args[nargs++] = "-Xlinker"; // used by backtrace … … 503 504 args[nargs++] = "-Wno-cast-function-type"; 504 505 #endif // HAVE_CAST_FUNCTION_TYPE 505 if ( ! std_flag && ! x_flag ) {506 args[nargs++] = "-std=gnu11"; // default c11, if none specified506 if ( ! std_flag ) { // default c11, if none specified 507 args[nargs++] = "-std=gnu11"; 507 508 } // if 508 509 args[nargs++] = "-fgnu89-inline"; … … 554 555 // execute the command and return the result 555 556 556 execvp( args[0], (char * const *)args );// should not return557 execvp( args[0], (char *const *)args ); // should not return 557 558 perror( "CFA Translator error: execvp" ); 558 559 exit( EXIT_FAILURE ); -
libcfa/src/common.hfa
r794db28 rd2b5d2d 10 10 // Created On : Wed Jul 11 17:54:36 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Aug 15 08:51:29 202013 // Update Count : 1412 // Last Modified On : Thu Jul 12 08:02:18 2018 13 // Update Count : 5 14 14 // 15 15 … … 67 67 68 68 static inline { 69 char min( char t1, char t2 ) { return t1 < t2 ? t1 : t2; } // optimization70 intptr_t min( intptr_t t1, intptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization71 uintptr_t min( uintptr_t t1, uintptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization72 69 forall( otype T | { int ?<?( T, T ); } ) 73 70 T min( T t1, T t2 ) { return t1 < t2 ? t1 : t2; } 74 71 75 char max( char t1, char t2 ) { return t1 > t2 ? t1 : t2; } // optimization76 intptr_t max( intptr_t t1, intptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization77 uintptr_t max( uintptr_t t1, uintptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization78 72 forall( otype T | { int ?>?( T, T ); } ) 79 73 T max( T t1, T t2 ) { return t1 > t2 ? t1 : t2; } -
libcfa/src/concurrency/coroutine.cfa
r794db28 rd2b5d2d 215 215 return cor; 216 216 } 217 218 struct $coroutine * __cfactx_cor_active(void) {219 return active_coroutine();220 }221 217 } 222 218 -
libcfa/src/concurrency/invoke.c
r794db28 rd2b5d2d 29 29 // Called from the kernel when starting a coroutine or task so must switch back to user mode. 30 30 31 extern struct $coroutine * __cfactx_cor_active(void);32 31 extern struct $coroutine * __cfactx_cor_finish(void); 33 32 extern void __cfactx_cor_leave ( struct $coroutine * ); … … 36 35 extern void disable_interrupts() OPTIONAL_THREAD; 37 36 extern void enable_interrupts( __cfaabi_dbg_ctx_param ); 38 39 struct exception_context_t * this_exception_context() {40 return &__get_stack( __cfactx_cor_active() )->exception_context;41 }42 37 43 38 void __cfactx_invoke_coroutine( -
libcfa/src/concurrency/invoke.h
r794db28 rd2b5d2d 98 98 } 99 99 100 struct exception_context_t * this_exception_context();101 102 100 // struct which calls the monitor is accepting 103 101 struct __waitfor_mask_t { -
libcfa/src/exception.c
r794db28 rd2b5d2d 59 59 60 60 61 // Temperary global exception context. Does not work with concurency. 62 static struct exception_context_t shared_stack = {NULL, NULL}; 63 61 64 // Get the current exception context. 62 65 // There can be a single global until multithreading occurs, then each stack 63 // needs its own. We get this from libcfathreads (no weak attribute). 64 __attribute__((weak)) struct exception_context_t * this_exception_context() { 65 static struct exception_context_t shared_stack = {NULL, NULL}; 66 // needs its own. It will have to be updated to handle that. 67 struct exception_context_t * this_exception_context() { 66 68 return &shared_stack; 67 69 } -
libcfa/src/heap.cfa
r794db28 rd2b5d2d 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Aug 12 16:43:38202013 // Update Count : 90212 // Last Modified On : Sun Aug 9 12:23:20 2020 13 // Update Count : 894 14 14 // 15 15 … … 650 650 for ( HeapManager.Storage * p = freeLists[i].freeList; p != 0p; p = p->header.kind.real.next ) { 651 651 #else 652 // for ( HeapManager.Storage * p = top( freeLists[i].freeList ); p != 0p; p = (p)`next->top ) { 653 for ( HeapManager.Storage * p = top( freeLists[i].freeList ); p != 0p; /* p = getNext( p )->top */) { 654 typeof(p) temp = (( p )`next)->top; // FIX ME: direct assignent fails, initialization works 655 p = temp; 652 for ( HeapManager.Storage * p = top( freeLists[i].freeList ); p != 0p; p = (p)`next->top ) { 656 653 #endif // BUCKETLOCK 657 654 total += size; … … 1165 1162 choose( option ) { 1166 1163 case M_TOP_PAD: 1167 heapExpand = ceiling 2( value, pageSize ); return 1;1164 heapExpand = ceiling( value, pageSize ); return 1; 1168 1165 case M_MMAP_THRESHOLD: 1169 1166 if ( setMmapStart( value ) ) return 1; -
libcfa/src/stdlib.hfa
r794db28 rd2b5d2d 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Aug 14 23:38:50202013 // Update Count : 50412 // Last Modified On : Tue Aug 11 21:11:46 2020 13 // Update Count : 495 14 14 // 15 15 … … 39 39 //--------------------------------------- 40 40 41 #include "common.hfa"42 43 //---------------------------------------44 45 41 // Macro because of returns 46 42 #define $VAR_ALLOC( allocation, alignment ) \ … … 156 152 } // alloc_set 157 153 158 T * alloc_set( size_t dim New, const T fill[], size_t dimOld) {159 return (T *)memcpy( (T *)alloc( dim New ), fill, min( dimNew, dimOld )* sizeof(T) ); // initialize with fill value154 T * alloc_set( size_t dim, const T fill[] ) { 155 return (T *)memcpy( (T *)alloc( dim ), fill, dim * sizeof(T) ); // initialize with fill value 160 156 } // alloc_set 161 157 … … 224 220 } // alloc_align_set 225 221 226 T * alloc_align_set( size_t align, size_t dim New, const T fill[], size_t dimOld) {227 return (T *)memcpy( (T *)alloc_align( align, dim New ), fill, min( dimNew, dimOld )* sizeof(T) );222 T * alloc_align_set( size_t align, size_t dim, const T fill[] ) { 223 return (T *)memcpy( (T *)alloc_align( align, dim ), fill, dim * sizeof(T) ); 228 224 } // alloc_align_set 229 225 … … 378 374 //--------------------------------------- 379 375 376 #include "common.hfa" 377 378 //--------------------------------------- 379 380 380 extern bool threading_enabled(void) OPTIONAL_THREAD; 381 381 -
tests/.expect/minmax.txt
r794db28 rd2b5d2d 1 1 char z a min a 2 signed int 4 -3 min -32 signed int 4 3 min 3 3 3 unsigned int 4 3 min 3 4 signed long int 4 -3 min -34 signed long int 4 3 min 3 5 5 unsigned long int 4 3 min 3 6 signed long long int 4 -3 min -36 signed long long int 4 3 min 3 7 7 unsigned long long int 4 3 min 3 8 8 float 4. 3.1 min 3.1 … … 11 11 12 12 char z a max z 13 signed int 4 -3 max 413 signed int 4 3 max 4 14 14 unsigned int 4 3 max 4 15 signed long int 4 -3 max 415 signed long int 4 3 max 4 16 16 unsigned long int 4 3 max 4 17 signed long long int 4 -3 max 417 signed long long int 4 3 max 4 18 18 unsigned long long int 4 3 max 4 19 19 float 4. 3.1 max 4. -
tests/Makefile.am
r794db28 rd2b5d2d 163 163 $(CFACOMPILETEST) -DERR2 -c -fsyntax-only -o $(abspath ${@}) 164 164 165 # Exception Tests166 # Test with libcfathread; it changes how storage works.167 168 exceptions/%-threads : exceptions/%.cfa $(CFACCBIN)169 $(CFACOMPILETEST) -include exceptions/with-threads.hfa -c -o $(abspath ${@}).o170 $(CFACCLOCAL) $($(shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g')) $(abspath ${@}).o -o $(abspath ${@})171 172 165 #------------------------------------------------------------------------------ 173 166 # Other targets -
tests/alloc.cfa
r794db28 rd2b5d2d 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Aug 14 16:59:59202013 // Update Count : 4 3012 // Last Modified On : Mon Apr 6 21:08:23 2020 13 // Update Count : 428 14 14 // 15 15 … … 90 90 // do not free 91 91 92 ip1 = alloc_set( 2 * dim, ip , 2 * dim );// CFA array alloc, fill92 ip1 = alloc_set( 2 * dim, ip ); // CFA array alloc, fill 93 93 printf( "CFA array alloc, fill from array\n" ); 94 94 for ( i; 2 * dim ) { printf( "%#x %#x, ", ip[i], ip1[i] ); } … … 288 288 // do not free 289 289 290 stp1 = alloc_align_set( Alignment, dim, stp , dim );// CFA array memalign, fill290 stp1 = alloc_align_set( Alignment, dim, stp ); // CFA array memalign, fill 291 291 assert( (uintptr_t)stp % Alignment == 0 ); 292 292 printf( "CFA array alloc_align, fill array\n" ); -
tests/exceptions/terminate.cfa
r794db28 rd2b5d2d 142 142 } 143 143 } 144 -
tests/heap.cfa
r794db28 rd2b5d2d 10 10 // Created On : Tue Nov 6 17:54:56 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 9 08:05:16202013 // Update Count : 5 712 // Last Modified On : Tue Aug 4 06:36:17 2020 13 // Update Count : 56 14 14 // 15 15 … … 232 232 size_t s = i + default_mmap_start(); // cross over point 233 233 char * area = (char *)calloc( 1, s ); 234 // if ( area == 0p ) abort( "calloc/realloc/free out of memory" ); 234 235 if ( area[0] != '\0' || area[s - 1] != '\0' || 235 236 area[malloc_size( area ) - 1] != '\0' || 236 ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage3" ); 237 ! malloc_zero_fill( area ) ) //abort( "calloc/realloc/free corrupt storage3" ); 238 printf( "C %zd %d %d %d %d\n", s, area[0] != '\0', area[s - 1] != '\0', area[malloc_size( area ) - 1] != '\0', ! malloc_zero_fill( area ) ); 237 239 238 240 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage. 239 241 for ( r; i ~ 256 * 1024 ~ 26 ) { // start at initial memory request 240 242 area = (char *)realloc( area, r ); // attempt to reuse storage 243 // if ( area == 0p ) abort( "calloc/realloc/free out of memory" ); 241 244 if ( area[0] != '\0' || area[r - 1] != '\0' || 242 245 area[malloc_size( area ) - 1] != '\0' || … … 252 255 // initial N byte allocation 253 256 char * area = (char *)memalign( a, amount ); // aligned N-byte allocation 257 // if ( area == 0p ) abort( "memalign/realloc/free out of memory" ); // no storage ? 254 258 //sout | alignments[a] | area; 255 259 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment -
tests/linking/withthreads.cfa
r794db28 rd2b5d2d 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // withthreads.cfa --7 // nothreads.cfa -- 8 8 // 9 9 // Author : Thierry Delisle -
tests/minmax.cfa
r794db28 rd2b5d2d 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Aug 15 08:28:01 202013 // Update Count : 5 412 // Last Modified On : Tue Dec 4 21:45:31 2018 13 // Update Count : 52 14 14 // 15 15 … … 23 23 24 24 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ); 25 sout | "signed int\t\t" | 4 | -3 | "\tmin" | min( 4, -3 );25 sout | "signed int\t\t" | 4 | 3 | "\tmin" | min( 4, 3 ); 26 26 sout | "unsigned int\t\t" | 4u | 3u | "\tmin" | min( 4u, 3u ); 27 sout | "signed long int\t\t" | 4l | -3l | "\tmin" | min( 4l, -3l );27 sout | "signed long int\t\t" | 4l | 3l | "\tmin" | min( 4l, 3l ); 28 28 sout | "unsigned long int\t" | 4ul | 3ul | "\tmin" | min( 4ul, 3ul ); 29 sout | "signed long long int\t" | 4ll | -3ll | "\tmin" | min( 4ll, -3ll );29 sout | "signed long long int\t" | 4ll | 3ll | "\tmin" | min( 4ll, 3ll ); 30 30 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmin" | min( 4ull, 3ull ); 31 31 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ); … … 36 36 37 37 sout | "char\t\t\t" | 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ); 38 sout | "signed int\t\t" | 4 | -3 | "\tmax" | max( 4, -3 );38 sout | "signed int\t\t" | 4 | 3 | "\tmax" | max( 4, 3 ); 39 39 sout | "unsigned int\t\t" | 4u | 3u | "\tmax" | max( 4u, 3u ); 40 sout | "signed long int\t\t" | 4l | -3l | "\tmax" | max( 4l, -3l );40 sout | "signed long int\t\t" | 4l | 3l | "\tmax" | max( 4l, 3l ); 41 41 sout | "unsigned long int\t" | 4ul | 3ul | "\tmax" | max( 4ul, 3ul ); 42 sout | "signed long long int\t" | 4ll | -3ll | "\tmax" | max( 4ll, -3ll );42 sout | "signed long long int\t" | 4ll | 3ll | "\tmax" | max( 4ll, 3ll ); 43 43 sout | "unsigned long long int\t" | 4ull | 3ull | "\tmax" | max( 4ull, 3ull ); 44 44 sout | "float\t\t\t" | 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f );
Note:
See TracChangeset
for help on using the changeset viewer.