Changeset dffaeac for src/driver/cc1.cc
- Timestamp:
- Jul 13, 2018, 6:34:11 PM (6 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- 6b8b767
- Parents:
- 26ef3b2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/driver/cc1.cc
r26ef3b2 rdffaeac 10 10 // Created On : Fri Aug 26 14:23:51 2005 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat May 12 16:11:53201813 // Update Count : 9412 // Last Modified On : Fri Jul 13 17:40:10 2018 13 // Update Count : 110 14 14 // 15 15 … … 44 44 } // prefix 45 45 46 enum { NumSuffixes = 2 }; 47 const string suffixes[NumSuffixes] = { "cfa", "hfa", }; 48 49 bool suffix( string arg ) { 50 //std::cerr << arg << std::endl; 51 size_t dot = arg.find_last_of( "." ); 52 //std::cerr << dot << " " << (dot != string::npos ? arg.substr( dot + 1 ) : "fred" ) << std::endl; 53 if ( dot == string::npos ) return false; 54 string sx = arg.substr( dot + 1 ); 55 for ( int i = 0; i < NumSuffixes; i += 1 ) { 56 if ( sx == suffixes[i] ) return true; 57 } // for 58 return false; 59 } // suffix 60 46 61 47 62 void checkEnv( const char *args[], int &nargs ) { … … 51 66 if ( value != NULL ) { 52 67 compiler_name = value; 53 #ifdef __DEBUG_H__68 #ifdef __DEBUG_H__ 54 69 cerr << "env arg:\"" << compiler_name << "\"" << endl; 55 #endif // __DEBUG_H__70 #endif // __DEBUG_H__ 56 71 } // if 57 72 … … 59 74 if ( value != NULL ) { 60 75 args[nargs] = ( *new string( value ) ).c_str(); // pass the argument along 61 #ifdef __DEBUG_H__76 #ifdef __DEBUG_H__ 62 77 cerr << "env arg:\"" << args[nargs] << "\"" << endl; 63 #endif // __DEBUG_H__78 #endif // __DEBUG_H__ 64 79 nargs += 1; 65 80 } // if … … 68 83 if ( value != NULL ) { 69 84 args[nargs] = ( *new string( value ) ).c_str(); // pass the argument along 70 #ifdef __DEBUG_H__85 #ifdef __DEBUG_H__ 71 86 cerr << "env arg:\"" << args[nargs] << "\"" << endl; 72 #endif // __DEBUG_H__87 #endif // __DEBUG_H__ 73 88 nargs += 1; 74 89 } // if … … 115 130 signal( SIGTERM, sigTermHandler ); 116 131 117 #ifdef __DEBUG_H__132 #ifdef __DEBUG_H__ 118 133 cerr << "Stage1" << endl; 119 #endif // __DEBUG_H__134 #endif // __DEBUG_H__ 120 135 121 136 // process all the arguments … … 124 139 125 140 for ( i = 1; i < argc; i += 1 ) { 126 #ifdef __DEBUG_H__141 #ifdef __DEBUG_H__ 127 142 cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl; 128 #endif // __DEBUG_H__143 #endif // __DEBUG_H__ 129 144 arg = argv[i]; 130 #ifdef __DEBUG_H__145 #ifdef __DEBUG_H__ 131 146 cerr << "arg:\"" << arg << "\"" << endl; 132 #endif // __DEBUG_H__147 #endif // __DEBUG_H__ 133 148 if ( prefix( arg, "-" ) ) { 134 149 // strip g++ flags that are inappropriate or cause duplicates in subsequent passes … … 164 179 ncargs += 1; 165 180 i += 1; // and the argument 166 } else if ( prefix( arg, D__GCC_X__ ) ) {167 args[nargs] = "-x";168 nargs += 1;169 args[nargs] = ( *new string( arg.substr( D__GCC_X__.size() ) ) ).c_str(); // pass the flag along170 nargs += 1;171 } else if ( arg == "-D" && prefix( argv[i + 1], D__GCC_X__.substr(2) ) ) {172 args[nargs] = "-x";173 nargs += 1;174 args[nargs] = ( *new string( string( argv[i + 1] ).substr( D__GCC_X__.size() - 2 ) ) ).c_str(); // pass the flag along175 nargs += 1;176 i += 1; // and the argument181 // } else if ( prefix( arg, D__GCC_X__ ) ) { 182 // args[nargs] = "-x"; 183 // nargs += 1; 184 // args[nargs] = ( *new string( arg.substr( D__GCC_X__.size() ) ) ).c_str(); // pass the flag along 185 // nargs += 1; 186 // } else if ( arg == "-D" && prefix( argv[i + 1], D__GCC_X__.substr(2) ) ) { 187 // args[nargs] = "-x"; 188 // nargs += 1; 189 // args[nargs] = ( *new string( string( argv[i + 1] ).substr( D__GCC_X__.size() - 2 ) ) ).c_str(); // pass the flag along 190 // nargs += 1; 191 // i += 1; // and the argument 177 192 } else if ( prefix( arg, D__GCC_BPREFIX__ ) ) { 178 193 bprefix = arg.substr( D__GCC_BPREFIX__.size() ); … … 196 211 args[nargs] = argv[i]; // pass the argument along 197 212 nargs += 1; 198 #ifdef __DEBUG_H__213 #ifdef __DEBUG_H__ 199 214 cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl; 200 #endif // __DEBUG_H__215 #endif // __DEBUG_H__ 201 216 } else if ( arg == "-MD" || arg == "-MMD" ) { 202 217 args[nargs] = "-MF"; // insert before file … … 205 220 args[nargs] = argv[i]; // pass the argument along 206 221 nargs += 1; 207 #ifdef __DEBUG_H__222 #ifdef __DEBUG_H__ 208 223 cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl; 209 #endif // __DEBUG_H__224 #endif // __DEBUG_H__ 210 225 } // if 211 226 } // if … … 213 228 if ( cpp_in == NULL ) { 214 229 cpp_in = argv[i]; 215 #ifdef __DEBUG_H__230 #ifdef __DEBUG_H__ 216 231 cerr << "cpp_in:\"" << cpp_in << "\"" << endl; 217 #endif // __DEBUG_H__232 #endif // __DEBUG_H__ 218 233 } else if ( cpp_out == NULL ) { 219 234 cpp_out = argv[i]; 220 #ifdef __DEBUG_H__235 #ifdef __DEBUG_H__ 221 236 cerr << "cpp_out:\"" << cpp_out << "\""<< endl; 222 #endif // __DEBUG_H__237 #endif // __DEBUG_H__ 223 238 } else { 224 239 cerr << "Usage: " << argv[0] << " input-file [output-file] [options]" << endl; … … 228 243 } // for 229 244 230 #ifdef __DEBUG_H__245 #ifdef __DEBUG_H__ 231 246 cerr << "args:"; 232 247 for ( i = 1; i < nargs; i += 1 ) { … … 236 251 if ( cpp_out != NULL ) cerr << " " << cpp_out; 237 252 cerr << endl; 238 #endif // __DEBUG_H__253 #endif // __DEBUG_H__ 239 254 240 255 if ( cpp_in == NULL ) { … … 258 273 args[nargs] = NULL; // terminate argument list 259 274 260 #ifdef __DEBUG_H__275 #ifdef __DEBUG_H__ 261 276 cerr << "nargs: " << nargs << endl; 262 277 for ( i = 0; args[i] != NULL; i += 1 ) { … … 264 279 } // for 265 280 cerr << endl; 266 #endif // __DEBUG_H__281 #endif // __DEBUG_H__ 267 282 268 283 execvp( args[0], (char *const *)args ); // should not return … … 279 294 } // if 280 295 281 #ifdef __DEBUG_H__296 #ifdef __DEBUG_H__ 282 297 cerr << "tmpname:" << tmpname << " tmpfilefd:" << tmpfilefd << endl; 283 #endif // __DEBUG_H__298 #endif // __DEBUG_H__ 284 299 285 300 // Run the C preprocessor and save the output in tmpfile. … … 295 310 296 311 args[0] = compiler_name.c_str(); 312 if ( suffix( cpp_in ) ) { 313 args[nargs] = "-x"; 314 nargs += 1; 315 args[nargs] = "c"; 316 nargs += 1; 317 } // if 297 318 args[nargs] = cpp_in; // input to cpp 298 319 nargs += 1; 299 320 args[nargs] = NULL; // terminate argument list 300 321 301 #ifdef __DEBUG_H__322 #ifdef __DEBUG_H__ 302 323 cerr << "cpp nargs: " << nargs << endl; 303 324 for ( i = 0; args[i] != NULL; i += 1 ) { … … 305 326 } // for 306 327 cerr << endl; 307 #endif // __DEBUG_H__328 #endif // __DEBUG_H__ 308 329 309 330 execvp( args[0], (char *const *)args ); // should not return … … 314 335 wait( &code ); // wait for child to finish 315 336 316 #ifdef __DEBUG_H__337 #ifdef __DEBUG_H__ 317 338 cerr << "return code from cpp:" << WEXITSTATUS(code) << endl; 318 #endif // __DEBUG_H__339 #endif // __DEBUG_H__ 319 340 320 341 if ( WIFSIGNALED(code) != 0 ) { // child failed ? … … 352 373 cargs[ncargs] = NULL; // terminate argument list 353 374 354 #ifdef __DEBUG_H__375 #ifdef __DEBUG_H__ 355 376 cerr << "cfa-cpp ncargs: " << o_name << " " << CFA_flag << " " << ncargs << endl; 356 377 for ( i = 0; cargs[i] != NULL; i += 1 ) { … … 358 379 } // for 359 380 cerr << endl; 360 #endif // __DEBUG_H__381 #endif // __DEBUG_H__ 361 382 362 383 execvp( cargs[0], (char * const *)cargs ); // should not return … … 367 388 wait( &code ); // wait for child to finish 368 389 369 #ifdef __DEBUG_H__390 #ifdef __DEBUG_H__ 370 391 cerr << "return code from cfa-cpp:" << WEXITSTATUS(code) << endl; 371 #endif // __DEBUG_H__392 #endif // __DEBUG_H__ 372 393 373 394 // Must unlink here because file must exist across execvp. … … 393 414 int nargs = 1; // number of arguments in args list; 0 => command name 394 415 395 #ifdef __DEBUG_H__416 #ifdef __DEBUG_H__ 396 417 cerr << "Stage2" << endl; 397 #endif // __DEBUG_H__418 #endif // __DEBUG_H__ 398 419 399 420 // process all the arguments … … 402 423 403 424 for ( i = 1; i < argc; i += 1 ) { 404 #ifdef __DEBUG_H__425 #ifdef __DEBUG_H__ 405 426 cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl; 406 #endif // __DEBUG_H__427 #endif // __DEBUG_H__ 407 428 arg = argv[i]; 408 #ifdef __DEBUG_H__429 #ifdef __DEBUG_H__ 409 430 cerr << "arg:\"" << arg << "\"" << endl; 410 #endif // __DEBUG_H__431 #endif // __DEBUG_H__ 411 432 if ( prefix( arg, "-" ) ) { 412 433 // strip inappropriate flags 413 434 414 435 if ( arg == "-quiet" || arg == "-version" || arg == "-fpreprocessed" || 415 416 436 // Currently CFA does not suppose precompiled .h files. 437 prefix( arg, "--output-pch" ) ) { 417 438 418 439 // strip inappropriate flags with an argument … … 420 441 } else if ( arg == "-auxbase" || arg == "-auxbase-strip" || arg == "-dumpbase" ) { 421 442 i += 1; 422 #ifdef __DEBUG_H__443 #ifdef __DEBUG_H__ 423 444 cerr << "arg:\"" << argv[i] << "\"" << endl; 424 #endif // __DEBUG_H__445 #endif // __DEBUG_H__ 425 446 426 447 // all other flags … … 433 454 args[nargs] = argv[i]; // pass the argument along 434 455 nargs += 1; 435 #ifdef __DEBUG_H__456 #ifdef __DEBUG_H__ 436 457 cerr << "arg:\"" << argv[i] << "\"" << endl; 437 #endif // __DEBUG_H__458 #endif // __DEBUG_H__ 438 459 } // if 439 460 } // if … … 441 462 if ( cpp_in == NULL ) { 442 463 cpp_in = argv[i]; 443 #ifdef __DEBUG_H__464 #ifdef __DEBUG_H__ 444 465 cerr << "cpp_in:\"" << cpp_in << "\"" << endl; 445 #endif // __DEBUG_H__466 #endif // __DEBUG_H__ 446 467 } else { 447 468 cerr << "Usage: " << argv[0] << " input-file [output-file] [options]" << endl; … … 451 472 } // for 452 473 453 #ifdef __DEBUG_H__474 #ifdef __DEBUG_H__ 454 475 cerr << "args:"; 455 476 for ( i = 1; i < nargs; i += 1 ) { … … 458 479 cerr << endl; 459 480 if ( cpp_in != NULL ) cerr << " " << cpp_in; 460 #endif // __DEBUG_H__481 #endif // __DEBUG_H__ 461 482 462 483 args[0] = compiler_name.c_str(); … … 467 488 args[nargs] = NULL; // terminate argument list 468 489 469 #ifdef __DEBUG_H__490 #ifdef __DEBUG_H__ 470 491 cerr << "stage2 nargs: " << nargs << endl; 471 492 for ( i = 0; args[i] != NULL; i += 1 ) { … … 473 494 } // for 474 495 cerr << endl; 475 #endif // __DEBUG_H__496 #endif // __DEBUG_H__ 476 497 477 498 execvp( args[0], (char * const *)args ); // should not return … … 482 503 483 504 int main( const int argc, const char * const argv[], __attribute__((unused)) const char * const env[] ) { 484 #ifdef __DEBUG_H__505 #ifdef __DEBUG_H__ 485 506 for ( int i = 0; env[i] != NULL; i += 1 ) { 486 507 cerr << env[i] << endl; 487 508 } // for 488 #endif // __DEBUG_H__509 #endif // __DEBUG_H__ 489 510 490 511 string arg = argv[1];
Note: See TracChangeset
for help on using the changeset viewer.