Changeset 794db28
- Timestamp:
- Aug 18, 2020, 11:35:50 AM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 93526ef
- Parents:
- d2b5d2d (diff), 36de20d (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:
-
- 10 added
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
driver/cc1.cc
rd2b5d2d r794db28 10 10 // Created On : Fri Aug 26 14:23:51 2005 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 13 21:03:15202013 // Update Count : 4 0712 // Last Modified On : Sun Aug 16 21:03:02 2020 13 // Update Count : 413 14 14 // 15 15 … … 24 24 #include <unistd.h> // execvp, fork, unlink 25 25 #include <sys/wait.h> // wait 26 #include <fcntl.h> 26 #include <fcntl.h> // creat 27 27 28 28 … … 59 59 60 60 61 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); // " N__=" suffix61 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); // "__CFA_FLAG__=" suffix 62 62 63 63 static void checkEnv1( const char * args[], int & nargs ) { // stage 1 … … 111 111 } // checkEnv2 112 112 113 114 static char tmpname[] = P_tmpdir "/CFAXXXXXX.ifa"; 113 #define CFA_SUFFIX ".ifa" 114 115 static char tmpname[] = P_tmpdir "/CFAXXXXXX" CFA_SUFFIX; 115 116 static int tmpfilefd = -1; 116 117 static bool startrm = false; … … 321 322 322 323 if ( WIFSIGNALED(code) ) { // child failed ? 324 rmtmpfile(); // remove tmpname 323 325 cerr << "CC1 Translator error: stage 1, child failed " << WTERMSIG(code) << endl; 324 326 exit( EXIT_FAILURE ); 325 327 } // if 326 328 327 exit( WEXITSTATUS( code) );// bad cpp result stops top-level gcc329 exit( WEXITSTATUS( code ) ); // bad cpp result stops top-level gcc 328 330 } // Stage1 329 331 … … 373 375 } else if ( arg == "-fno-diagnostics-color" ) { 374 376 color_arg = Color_Auto; 375 } 377 } // if 376 378 377 379 if ( arg == "-quiet" || arg == "-version" || arg == "-fpreprocessed" || 378 // Currently CFA does not suppose precompiled .h files.379 prefix( arg, "--output-pch" ) ) {380 // Currently CFA does not suppose precompiled .h files. 381 prefix( arg, "--output-pch" ) ) { 380 382 381 383 // strip inappropriate flags with an argument … … 441 443 } // if 442 444 443 cfa_cpp_out = cfa_cpp_out.substr( 0, dot ) + ".ifa";445 cfa_cpp_out = cfa_cpp_out.substr( 0, dot ) + CFA_SUFFIX; 444 446 if ( creat( cfa_cpp_out.c_str(), 0666 ) == -1 ) { 445 447 perror( "CC1 Translator error: stage 2, creat" ); … … 462 464 // output. Otherwise, run the cfa-cpp preprocessor on the temporary file and save the result into the output file. 463 465 464 if ( fork() == 0 ) { // child runs CFA 466 if ( fork() == 0 ) { // child runs CFA preprocessor 465 467 cargs[0] = ( *new string( bprefix + "cfa-cpp" ) ).c_str(); 466 468 cargs[ncargs++] = cpp_in; … … 520 522 #endif // __DEBUG_H__ 521 523 522 if ( fork() == 0 ) { // child runs CFA524 if ( fork() == 0 ) { // child runs gcc 523 525 args[0] = compiler_path.c_str(); 524 526 args[nargs++] = "-S"; // only compile and put assembler output in specified file -
driver/cfa.cc
rd2b5d2d r794db28 10 10 // Created On : Tue Aug 20 13:44:49 2002 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Aug 13 17:22:02202013 // Update Count : 4 3512 // Last Modified On : Sun Aug 16 23:05:59 2020 13 // Update Count : 447 14 14 // 15 15 16 16 #include <iostream> 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 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 25 24 #include <sys/types.h> 26 25 #include <sys/stat.h> … … 34 33 using std::to_string; 35 34 36 // #define __DEBUG_H__ 37 38 // "N__=" suffix 39 static string __CFA_FLAGPREFIX__( "__CFA_FLAG" ); 40 41 void Putenv( char * argv[], string arg ) { 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 ) { 42 43 // environment variables must have unique names 43 44 static int flags = 0; … … 49 50 } // Putenv 50 51 51 // check if string has prefix 52 bool prefix( const string & arg, const string & pre ) { 52 static bool prefix( const string & arg, const string & pre ) { // check if string has prefix 53 53 return arg.substr( 0, pre.size() ) == pre; 54 54 } // prefix 55 55 56 inline bool ends_with(const string & str, const string & sfix) {56 static 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 bool suffix( const string & arg ) {62 static 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 73 72 static inline bool dirExists( const string & path ) { // check if directory exists 74 73 struct stat info; … … 79 78 static inline string dir(const string & path) { 80 79 return path.substr(0, path.find_last_of('/')); 81 } 80 } // dir 82 81 83 82 // Different path modes … … 118 117 } 119 118 120 121 #define xstr(s) str(s)122 #define str(s) #s123 119 124 120 int main( int argc, char * argv[] ) { … … 158 154 PathMode path = FromProc(); 159 155 160 const char * args[argc + 100]; // cfa command line values, plus some space for additional flags156 const char * args[argc + 100]; // cfa command line values, plus some space for additional flags 161 157 int sargs = 1; // starting location for arguments in args list 162 158 int nargs = sargs; // number of arguments in args list; 0 => command name 163 159 164 const char * libs[argc + 20]; // non-user libraries must come separately, plus some added libraries and flags160 const char * libs[argc + 20]; // non-user libraries must come separately, plus some added libraries and flags 165 161 int nlibs = 0; 166 162 … … 185 181 args[nargs++] = argv[i]; // pass argument along 186 182 if ( arg == "-o" ) o_file = i; // remember file 183 184 // CFA specific arguments 185 187 186 } else if ( strncmp(arg.c_str(), "-XCFA", 5) == 0 ) { // CFA pass through 188 187 if ( arg.size() == 5 ) { … … 203 202 } else if ( arg == "-nodebug" ) { 204 203 debug = false; // strip the nodebug flag 205 } else if ( arg == "-nolib" ) {206 nolib = true; // strip the nodebug flag207 204 } else if ( arg == "-quiet" ) { 208 205 quiet = true; // strip the quiet flag 209 206 } else if ( arg == "-noquiet" ) { 210 207 quiet = false; // strip the noquiet flag 208 } else if ( arg == "-no-include-stdhdr" ) { 209 noincstd_flag = true; // strip the no-include-stdhdr flag 210 } else if ( arg == "-nolib" ) { 211 nolib = true; // strip the nolib flag 211 212 } else if ( arg == "-help" ) { 212 213 help = true; // strip the help flag 213 214 } else if ( arg == "-nohelp" ) { 214 215 help = false; // strip the nohelp flag 215 } else if ( arg == "-no-include-stdhdr" ) {216 noincstd_flag = true; // strip the no-include-stdhdr flag217 216 } else if ( arg == "-cfalib") { 218 217 compiling_libs = true; … … 336 335 string libbase; 337 336 switch(path) { 338 case Installed:337 case Installed: 339 338 args[nargs++] = "-I" CFA_INCDIR; 340 339 // do not use during build … … 346 345 libbase = CFA_LIBDIR; 347 346 break; 348 case BuildTree:349 case Distributed:347 case BuildTree: 348 case Distributed: 350 349 args[nargs++] = "-I" TOP_SRCDIR "libcfa/src"; 351 350 // do not use during build … … 381 380 string libdir = libbase + arch + "-" + config; 382 381 383 if ( path != Distributed) {382 if ( path != Distributed ) { 384 383 if ( ! nolib && ! dirExists( libdir ) ) { 385 384 cerr << argv[0] << " internal error, configuration " << config << " not installed." << endl; … … 401 400 string preludedir; 402 401 switch(path) { 403 case Installed : preludedir = libdir; break;404 case BuildTree : preludedir = libdir + "/prelude"; break;405 case Distributed : preludedir = dir(argv[0]); break;406 } 402 case Installed : preludedir = libdir; break; 403 case BuildTree : preludedir = libdir + "/prelude"; break; 404 case Distributed : preludedir = dir(argv[0]); break; 405 } // switch 407 406 408 407 Putenv( argv, "--prelude-dir=" + preludedir ); … … 476 475 if ( bprefix.length() == 0 ) { 477 476 switch(path) { 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 } // if477 case Installed : bprefix = installlibdir; break; 478 case BuildTree : bprefix = srcdriverdir ; break; 479 case Distributed : bprefix = dir(argv[0]) ; break; 480 } // switch 481 } // if 482 if ( bprefix[bprefix.length() - 1] != '/' ) bprefix += '/'; 483 Putenv( argv, string("-B=") + bprefix ); 485 484 486 485 args[nargs++] = "-Xlinker"; // used by backtrace … … 504 503 args[nargs++] = "-Wno-cast-function-type"; 505 504 #endif // HAVE_CAST_FUNCTION_TYPE 506 if ( ! std_flag ) { // default c11, if none specified507 args[nargs++] = "-std=gnu11"; 505 if ( ! std_flag && ! x_flag ) { 506 args[nargs++] = "-std=gnu11"; // default c11, if none specified 508 507 } // if 509 508 args[nargs++] = "-fgnu89-inline"; … … 555 554 // execute the command and return the result 556 555 557 execvp( args[0], (char * const *)args );// should not return556 execvp( args[0], (char * const *)args ); // should not return 558 557 perror( "CFA Translator error: execvp" ); 559 558 exit( EXIT_FAILURE ); -
libcfa/src/common.hfa
rd2b5d2d r794db28 10 10 // Created On : Wed Jul 11 17:54:36 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jul 12 08:02:18 201813 // Update Count : 512 // Last Modified On : Sat Aug 15 08:51:29 2020 13 // Update Count : 14 14 14 // 15 15 … … 67 67 68 68 static inline { 69 char min( char t1, char t2 ) { return t1 < t2 ? t1 : t2; } // optimization 70 intptr_t min( intptr_t t1, intptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization 71 uintptr_t min( uintptr_t t1, uintptr_t t2 ) { return t1 < t2 ? t1 : t2; } // optimization 69 72 forall( otype T | { int ?<?( T, T ); } ) 70 73 T min( T t1, T t2 ) { return t1 < t2 ? t1 : t2; } 71 74 75 char max( char t1, char t2 ) { return t1 > t2 ? t1 : t2; } // optimization 76 intptr_t max( intptr_t t1, intptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization 77 uintptr_t max( uintptr_t t1, uintptr_t t2 ) { return t1 > t2 ? t1 : t2; } // optimization 72 78 forall( otype T | { int ?>?( T, T ); } ) 73 79 T max( T t1, T t2 ) { return t1 > t2 ? t1 : t2; } -
libcfa/src/concurrency/coroutine.cfa
rd2b5d2d r794db28 215 215 return cor; 216 216 } 217 218 struct $coroutine * __cfactx_cor_active(void) { 219 return active_coroutine(); 220 } 217 221 } 218 222 -
libcfa/src/concurrency/invoke.c
rd2b5d2d r794db28 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); 31 32 extern struct $coroutine * __cfactx_cor_finish(void); 32 33 extern void __cfactx_cor_leave ( struct $coroutine * ); … … 35 36 extern void disable_interrupts() OPTIONAL_THREAD; 36 37 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 } 37 42 38 43 void __cfactx_invoke_coroutine( -
libcfa/src/concurrency/invoke.h
rd2b5d2d r794db28 98 98 } 99 99 100 struct exception_context_t * this_exception_context(); 101 100 102 // struct which calls the monitor is accepting 101 103 struct __waitfor_mask_t { -
libcfa/src/exception.c
rd2b5d2d r794db28 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 64 61 // Get the current exception context. 65 62 // There can be a single global until multithreading occurs, then each stack 66 // needs its own. It will have to be updated to handle that. 67 struct exception_context_t * this_exception_context() { 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}; 68 66 return &shared_stack; 69 67 } -
libcfa/src/heap.cfa
rd2b5d2d r794db28 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Aug 9 12:23:20202013 // Update Count : 89412 // Last Modified On : Wed Aug 12 16:43:38 2020 13 // Update Count : 902 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 ) { 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; 653 656 #endif // BUCKETLOCK 654 657 total += size; … … 1162 1165 choose( option ) { 1163 1166 case M_TOP_PAD: 1164 heapExpand = ceiling ( value, pageSize ); return 1;1167 heapExpand = ceiling2( value, pageSize ); return 1; 1165 1168 case M_MMAP_THRESHOLD: 1166 1169 if ( setMmapStart( value ) ) return 1; -
libcfa/src/stdlib.hfa
rd2b5d2d r794db28 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Aug 11 21:11:46202013 // Update Count : 49512 // Last Modified On : Fri Aug 14 23:38:50 2020 13 // Update Count : 504 14 14 // 15 15 … … 39 39 //--------------------------------------- 40 40 41 #include "common.hfa" 42 43 //--------------------------------------- 44 41 45 // Macro because of returns 42 46 #define $VAR_ALLOC( allocation, alignment ) \ … … 152 156 } // alloc_set 153 157 154 T * alloc_set( size_t dim , const T fill[]) {155 return (T *)memcpy( (T *)alloc( dim ), fill, dim* sizeof(T) ); // initialize with fill value158 T * alloc_set( size_t dimNew, const T fill[], size_t dimOld ) { 159 return (T *)memcpy( (T *)alloc( dimNew ), fill, min( dimNew, dimOld ) * sizeof(T) ); // initialize with fill value 156 160 } // alloc_set 157 161 … … 220 224 } // alloc_align_set 221 225 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) );226 T * alloc_align_set( size_t align, size_t dimNew, const T fill[], size_t dimOld ) { 227 return (T *)memcpy( (T *)alloc_align( align, dimNew ), fill, min( dimNew, dimOld ) * sizeof(T) ); 224 228 } // alloc_align_set 225 229 … … 374 378 //--------------------------------------- 375 379 376 #include "common.hfa"377 378 //---------------------------------------379 380 380 extern bool threading_enabled(void) OPTIONAL_THREAD; 381 381 -
tests/.expect/minmax.txt
rd2b5d2d r794db28 1 1 char z a min a 2 signed int 4 3 min32 signed int 4 -3 min -3 3 3 unsigned int 4 3 min 3 4 signed long int 4 3 min34 signed long int 4 -3 min -3 5 5 unsigned long int 4 3 min 3 6 signed long long int 4 3 min36 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
rd2b5d2d r794db28 163 163 $(CFACOMPILETEST) -DERR2 -c -fsyntax-only -o $(abspath ${@}) 164 164 165 # Exception Tests 166 # 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 ${@}).o 170 $(CFACCLOCAL) $($(shell echo "${@}_FLAGSLD" | sed 's/-\|\//_/g')) $(abspath ${@}).o -o $(abspath ${@}) 171 165 172 #------------------------------------------------------------------------------ 166 173 # Other targets -
tests/alloc.cfa
rd2b5d2d r794db28 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Apr 6 21:08:23202013 // Update Count : 4 2812 // Last Modified On : Fri Aug 14 16:59:59 2020 13 // Update Count : 430 14 14 // 15 15 … … 90 90 // do not free 91 91 92 ip1 = alloc_set( 2 * dim, ip );// CFA array alloc, fill92 ip1 = alloc_set( 2 * dim, ip, 2 * dim ); // 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 );// CFA array memalign, fill290 stp1 = alloc_align_set( Alignment, dim, stp, dim ); // 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
rd2b5d2d r794db28 142 142 } 143 143 } 144 -
tests/heap.cfa
rd2b5d2d r794db28 10 10 // Created On : Tue Nov 6 17:54:56 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Aug 4 06:36:17202013 // Update Count : 5 612 // Last Modified On : Sun Aug 9 08:05:16 2020 13 // Update Count : 57 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" );235 234 if ( area[0] != '\0' || area[s - 1] != '\0' || 236 235 area[malloc_size( area ) - 1] != '\0' || 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 ) ); 236 ! malloc_zero_fill( area ) ) abort( "calloc/realloc/free corrupt storage3" ); 239 237 240 238 // Do not start this loop index at 0 because realloc of 0 bytes frees the storage. 241 239 for ( r; i ~ 256 * 1024 ~ 26 ) { // start at initial memory request 242 240 area = (char *)realloc( area, r ); // attempt to reuse storage 243 // if ( area == 0p ) abort( "calloc/realloc/free out of memory" );244 241 if ( area[0] != '\0' || area[r - 1] != '\0' || 245 242 area[malloc_size( area ) - 1] != '\0' || … … 255 252 // initial N byte allocation 256 253 char * area = (char *)memalign( a, amount ); // aligned N-byte allocation 257 // if ( area == 0p ) abort( "memalign/realloc/free out of memory" ); // no storage ?258 254 //sout | alignments[a] | area; 259 255 if ( (size_t)area % a != 0 || malloc_alignment( area ) != a ) { // check for initial alignment -
tests/linking/withthreads.cfa
rd2b5d2d r794db28 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // nothreads.cfa --7 // withthreads.cfa -- 8 8 // 9 9 // Author : Thierry Delisle -
tests/minmax.cfa
rd2b5d2d r794db28 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Dec 4 21:45:31 201813 // Update Count : 5 212 // Last Modified On : Sat Aug 15 08:28:01 2020 13 // Update Count : 54 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.