X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=main.c;h=a0f17a5dff9473bf1ed162d4ca25d0888e46287d;hb=2151f7ff22ee388e6a57ff024d2558101907e7f7;hp=2794b908318c25ace020d74712cd7fdbfed23319;hpb=0f265f03620d44d482ca996d6e19d02c0889ab44;p=cparser diff --git a/main.c b/main.c index 2794b90..a0f17a5 100644 --- a/main.c +++ b/main.c @@ -105,7 +105,7 @@ bool strict_mode = false; /* to switch on printing of implicit casts */ extern bool print_implicit_casts; -/* to switch on printing of srenthesis to indicate operator precedence */ +/* to switch on printing of parenthesis to indicate operator precedence */ extern bool print_parenthesis; static int verbose; @@ -362,6 +362,7 @@ int main(int argc, char **argv) const char *dumpfunction = NULL; compile_mode_t mode = CompileAssembleLink; int opt_level = 1; + int result = EXIT_SUCCESS; obstack_init(&cppflags_obst); obstack_init(&ldflags_obst); @@ -415,7 +416,6 @@ int main(int argc, char **argv) /* fallthrough */ case 2: firm_option("inline"); - firm_option("no-strength-red"); firm_option("deconv"); firm_be_option("omitfp"); break; @@ -687,29 +687,35 @@ int main(int argc, char **argv) FILE *preprocessed_in = preprocess(in, input); translation_unit_t *const unit = do_parsing(preprocessed_in, input); - int result = pclose(preprocessed_in); - if(result != 0) { - return result; + int res = pclose(preprocessed_in); + if(res != 0) { + return res; } - if(unit == NULL) { + + if(error_count > 0) { /* parsing failed because of errors */ fprintf(stderr, "%u error(s), %u warning(s)\n", error_count, warning_count); - return EXIT_FAILURE; - } - if (warning_count > 0) { + result = EXIT_FAILURE; + } else if(warning_count > 0) { fprintf(stderr, "%u warning(s)\n", warning_count); } if(mode == BenchmarkParser) { - return 0; + return result; } + /* prints the AST even if errors occurred */ if(mode == PrintAst) { type_set_output(out); ast_set_output(out); print_ast(unit); - return 0; + return result; } + + /* cannot handle other modes with errors */ + if(result != EXIT_SUCCESS) + return result; + if(mode == PrintFluffy) { type_set_output(out); ast_set_output(out);