@@ -753,54 +753,52 @@ optimizations(int nr)
753753 case '1' :
754754 dataflow = 1 - dataflow ; /* dataflow */
755755 if (verbose & 32 )
756- printf ("spin: dataflow optimizations turned %s\n" ,
757- dataflow ?"on" :"off" );
758- break ;
759- case '2' :
756+ printf ("spin: dataflow optimizations turned %s\n" ,
757+ dataflow ?"on" :"off" );
758+ break ;
759+ case '2' :
760760 /* dead variable elimination */
761761 deadvar = 1 - deadvar ;
762762 if (verbose & 32 )
763- printf ("spin: dead variable elimination turned %s\n" ,
764- deadvar ?"on" :"off" );
765- break ;
763+ printf ("spin: dead variable elimination turned %s\n" ,
764+ deadvar ?"on" :"off" );
765+ break ;
766766 case '3' :
767767 /* statement merging */
768768 merger = 1 - merger ;
769769 if (verbose & 32 )
770770 printf ("spin: statement merging turned %s\n" ,
771771 merger ?"on" :"off" );
772- break ;
773-
772+ break ;
774773 case '4' :
775774 /* rv optimization */
776775 rvopt = 1 - rvopt ;
777776 if (verbose & 32 )
778777 printf ("spin: rendezvous optimization turned %s\n" ,
779778 rvopt ?"on" :"off" );
780- break ;
779+ break ;
781780 case '5' :
782781 /* case caching */
783782 ccache = 1 - ccache ;
784783 if (verbose & 32 )
785- printf ("spin: case caching turned %s\n" ,
786- ccache ?"on" :"off" );
787- break ;
784+ printf ("spin: case caching turned %s\n" ,
785+ ccache ?"on" :"off" );
786+ break ;
788787 case '6' :
789788 old_priority_rules = 1 ;
790789 if (verbose & 32 )
791- printf ("spin: using old priority rules (pre version 6.2)\n" );
792- return 0 ; /* no break */
790+ printf ("spin: using old priority rules (pre version 6.2)\n" );
791+ return 0 ; /* no break */
793792 case '7' :
794793 implied_semis = 0 ;
795794 if (verbose & 32 )
796- printf ("spin: no implied semi-colons (pre version 6.3)\n" );
797- return 0 ; /* no break */
795+ printf ("spin: no implied semi-colons (pre version 6.3)\n" );
796+ return 0 ; /* no break */
798797 default :
799- printf ("spin: bad or missing parameter on -o\n" );
800- // usage();
801- break ;
798+ return -1 ; // TODO: Improve the failure mode for argument parsing
802799 }
803- return 1 ;
800+
801+ return 0 ;
804802}
805803
806804static void
@@ -1004,7 +1002,14 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
10041002 }
10051003 case 'n' : args -> T = atoi (arg ); tl_terse = 1 ; break ;
10061004 case 'O' : old_scope_rules = 1 ; break ;
1007- case 'o' : args -> usedopts += optimizations (atoi (arg )); break ;
1005+ case 'o' : {
1006+ args -> usedopts += optimizations (arg [0 ]);
1007+ if (args -> usedopts == -1 ) {
1008+ argp_failure (state , 0 , 1 , "bad or missing parameter on -o: %d" , atoi (arg ));
1009+ return EINVAL ;
1010+ }
1011+ break ;
1012+ }
10081013 case 'P' : {
10091014 assert (strlen (arg ) < sizeof (PreProc ));
10101015 strcpy (PreProc , arg );
0 commit comments