Mercurial > hg > graal-jvmci-8
comparison src/share/vm/adlc/adlparse.cpp @ 7996:39901f2f1abe
8007403: Incorrect format arguments in adlparse.cpp
Reviewed-by: kvn, twisti
author | mikael |
---|---|
date | Mon, 04 Feb 2013 10:28:39 -0800 |
parents | d336b3173277 |
children | c9ccd7b85f20 |
comparison
equal
deleted
inserted
replaced
7995:37c18711a0df | 7996:39901f2f1abe |
---|---|
166 else get_oplist(instr->_parameters, instr->_localNames); | 166 else get_oplist(instr->_parameters, instr->_localNames); |
167 skipws(); // Skip leading whitespace | 167 skipws(); // Skip leading whitespace |
168 // Check for block delimiter | 168 // Check for block delimiter |
169 if ( (_curchar != '%') | 169 if ( (_curchar != '%') |
170 || ( next_char(), (_curchar != '{')) ) { | 170 || ( next_char(), (_curchar != '{')) ) { |
171 parse_err(SYNERR, "missing '%{' in instruction definition\n"); | 171 parse_err(SYNERR, "missing '%%{' in instruction definition\n"); |
172 return; | 172 return; |
173 } | 173 } |
174 next_char(); // Maintain the invariant | 174 next_char(); // Maintain the invariant |
175 do { | 175 do { |
176 ident = get_ident(); // Grab next identifier | 176 ident = get_ident(); // Grab next identifier |
251 } | 251 } |
252 skipws(); | 252 skipws(); |
253 } while(_curchar != '%'); | 253 } while(_curchar != '%'); |
254 next_char(); | 254 next_char(); |
255 if (_curchar != '}') { | 255 if (_curchar != '}') { |
256 parse_err(SYNERR, "missing '%}' in instruction definition\n"); | 256 parse_err(SYNERR, "missing '%%}' in instruction definition\n"); |
257 return; | 257 return; |
258 } | 258 } |
259 // Check for "Set" form of chain rule | 259 // Check for "Set" form of chain rule |
260 adjust_set_rule(instr); | 260 adjust_set_rule(instr); |
261 if (_AD._pipeline ) { | 261 if (_AD._pipeline ) { |
421 } | 421 } |
422 else get_oplist(oper->_parameters, oper->_localNames); // Parse the component operand list | 422 else get_oplist(oper->_parameters, oper->_localNames); // Parse the component operand list |
423 skipws(); | 423 skipws(); |
424 // Check for block delimiter | 424 // Check for block delimiter |
425 if ((_curchar != '%') || (*(_ptr+1) != '{')) { // If not open block | 425 if ((_curchar != '%') || (*(_ptr+1) != '{')) { // If not open block |
426 parse_err(SYNERR, "missing '%c{' in operand definition\n","%"); | 426 parse_err(SYNERR, "missing '%%{' in operand definition\n"); |
427 return; | 427 return; |
428 } | 428 } |
429 next_char(); next_char(); // Skip over "%{" symbol | 429 next_char(); next_char(); // Skip over "%{" symbol |
430 do { | 430 do { |
431 ident = get_ident(); // Grab next identifier | 431 ident = get_ident(); // Grab next identifier |
481 } | 481 } |
482 skipws(); | 482 skipws(); |
483 } while(_curchar != '%'); | 483 } while(_curchar != '%'); |
484 next_char(); | 484 next_char(); |
485 if (_curchar != '}') { | 485 if (_curchar != '}') { |
486 parse_err(SYNERR, "missing '%}' in operand definition\n"); | 486 parse_err(SYNERR, "missing '%%}' in operand definition\n"); |
487 return; | 487 return; |
488 } | 488 } |
489 // Add operand to tail of operand list | 489 // Add operand to tail of operand list |
490 _AD.addForm(oper); | 490 _AD.addForm(oper); |
491 } | 491 } |
1322 | 1322 |
1323 skipws(); // Skip leading whitespace | 1323 skipws(); // Skip leading whitespace |
1324 // Check for block delimiter | 1324 // Check for block delimiter |
1325 if ( (_curchar != '%') | 1325 if ( (_curchar != '%') |
1326 || ( next_char(), (_curchar != '{')) ) { | 1326 || ( next_char(), (_curchar != '{')) ) { |
1327 parse_err(SYNERR, "missing '%{' in pipeline definition\n"); | 1327 parse_err(SYNERR, "missing '%%{' in pipeline definition\n"); |
1328 return; | 1328 return; |
1329 } | 1329 } |
1330 next_char(); // Maintain the invariant | 1330 next_char(); // Maintain the invariant |
1331 do { | 1331 do { |
1332 ident = get_ident(); // Grab next identifier | 1332 ident = get_ident(); // Grab next identifier |
1339 else if (!strcmp(ident, "pipe_class")) pipe_class_parse(*pipeline); | 1339 else if (!strcmp(ident, "pipe_class")) pipe_class_parse(*pipeline); |
1340 else if (!strcmp(ident, "define")) { | 1340 else if (!strcmp(ident, "define")) { |
1341 skipws(); | 1341 skipws(); |
1342 if ( (_curchar != '%') | 1342 if ( (_curchar != '%') |
1343 || ( next_char(), (_curchar != '{')) ) { | 1343 || ( next_char(), (_curchar != '{')) ) { |
1344 parse_err(SYNERR, "expected '%{'\n"); | 1344 parse_err(SYNERR, "expected '%%{'\n"); |
1345 return; | 1345 return; |
1346 } | 1346 } |
1347 next_char(); skipws(); | 1347 next_char(); skipws(); |
1348 | 1348 |
1349 char *node_class = get_ident(); | 1349 char *node_class = get_ident(); |
1395 bool vsi_seen = false; | 1395 bool vsi_seen = false; |
1396 | 1396 |
1397 skipws(); | 1397 skipws(); |
1398 if ( (_curchar != '%') | 1398 if ( (_curchar != '%') |
1399 || ( next_char(), (_curchar != '{')) ) { | 1399 || ( next_char(), (_curchar != '{')) ) { |
1400 parse_err(SYNERR, "expected '%{'\n"); | 1400 parse_err(SYNERR, "expected '%%{'\n"); |
1401 return; | 1401 return; |
1402 } | 1402 } |
1403 next_char(); skipws(); | 1403 next_char(); skipws(); |
1404 | 1404 |
1405 while (_curchar != '%') { | 1405 while (_curchar != '%') { |
1584 parse_err(SYNERR, "unknown specifier \"%s\"\n", ident); | 1584 parse_err(SYNERR, "unknown specifier \"%s\"\n", ident); |
1585 } | 1585 } |
1586 | 1586 |
1587 if ( (_curchar != '%') | 1587 if ( (_curchar != '%') |
1588 || ( next_char(), (_curchar != '}')) ) { | 1588 || ( next_char(), (_curchar != '}')) ) { |
1589 parse_err(SYNERR, "expected '%}', found \"%c\"\n", _curchar); | 1589 parse_err(SYNERR, "expected '%%}', found \"%c\"\n", _curchar); |
1590 } | 1590 } |
1591 next_char(); skipws(); | 1591 next_char(); skipws(); |
1592 | 1592 |
1593 if (pipeline->_maxInstrsPerBundle == 0) | 1593 if (pipeline->_maxInstrsPerBundle == 0) |
1594 parse_err(SYNERR, "\"max_instructions_per_bundle\" unspecified\n"); | 1594 parse_err(SYNERR, "\"max_instructions_per_bundle\" unspecified\n"); |
1610 skipws(); | 1610 skipws(); |
1611 } while(_curchar != '%'); | 1611 } while(_curchar != '%'); |
1612 | 1612 |
1613 next_char(); | 1613 next_char(); |
1614 if (_curchar != '}') { | 1614 if (_curchar != '}') { |
1615 parse_err(SYNERR, "missing \"%}\" in pipeline definition\n"); | 1615 parse_err(SYNERR, "missing \"%%}\" in pipeline definition\n"); |
1616 return; | 1616 return; |
1617 } | 1617 } |
1618 | 1618 |
1619 next_char(); | 1619 next_char(); |
1620 } | 1620 } |
1773 else get_oplist(pipe_class->_parameters, pipe_class->_localNames); | 1773 else get_oplist(pipe_class->_parameters, pipe_class->_localNames); |
1774 skipws(); // Skip leading whitespace | 1774 skipws(); // Skip leading whitespace |
1775 // Check for block delimiter | 1775 // Check for block delimiter |
1776 if ( (_curchar != '%') | 1776 if ( (_curchar != '%') |
1777 || ( next_char(), (_curchar != '{')) ) { | 1777 || ( next_char(), (_curchar != '{')) ) { |
1778 parse_err(SYNERR, "missing \"%{\" in pipe_class definition\n"); | 1778 parse_err(SYNERR, "missing \"%%{\" in pipe_class definition\n"); |
1779 return; | 1779 return; |
1780 } | 1780 } |
1781 next_char(); | 1781 next_char(); |
1782 | 1782 |
1783 do { | 1783 do { |
2060 return; | 2060 return; |
2061 } while(_curchar != '%'); | 2061 } while(_curchar != '%'); |
2062 | 2062 |
2063 next_char(); | 2063 next_char(); |
2064 if (_curchar != '}') { | 2064 if (_curchar != '}') { |
2065 parse_err(SYNERR, "missing \"%}\" in pipe_class definition\n"); | 2065 parse_err(SYNERR, "missing \"%%}\" in pipe_class definition\n"); |
2066 return; | 2066 return; |
2067 } | 2067 } |
2068 | 2068 |
2069 next_char(); | 2069 next_char(); |
2070 } | 2070 } |
3339 char *index = NULL; | 3339 char *index = NULL; |
3340 char *scale = NULL; | 3340 char *scale = NULL; |
3341 char *disp = NULL; | 3341 char *disp = NULL; |
3342 | 3342 |
3343 if (_curchar != '%') { | 3343 if (_curchar != '%') { |
3344 parse_err(SYNERR, "Missing '%{' for 'interface' block.\n"); | 3344 parse_err(SYNERR, "Missing '%%{' for 'interface' block.\n"); |
3345 return NULL; | 3345 return NULL; |
3346 } | 3346 } |
3347 next_char(); // Skip '%' | 3347 next_char(); // Skip '%' |
3348 if (_curchar != '{') { | 3348 if (_curchar != '{') { |
3349 parse_err(SYNERR, "Missing '%{' for 'interface' block.\n"); | 3349 parse_err(SYNERR, "Missing '%%{' for 'interface' block.\n"); |
3350 return NULL; | 3350 return NULL; |
3351 } | 3351 } |
3352 next_char(); // Skip '{' | 3352 next_char(); // Skip '{' |
3353 skipws(); | 3353 skipws(); |
3354 do { | 3354 do { |
3355 char *field = get_ident(); | 3355 char *field = get_ident(); |
3356 if (field == NULL) { | 3356 if (field == NULL) { |
3357 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%}' ending interface.\n"); | 3357 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%%}' ending interface.\n"); |
3358 return NULL; | 3358 return NULL; |
3359 } | 3359 } |
3360 if ( strcmp(field,"base") == 0 ) { | 3360 if ( strcmp(field,"base") == 0 ) { |
3361 base = interface_field_parse(); | 3361 base = interface_field_parse(); |
3362 } | 3362 } |
3368 } | 3368 } |
3369 else if ( strcmp(field,"disp") == 0 ) { | 3369 else if ( strcmp(field,"disp") == 0 ) { |
3370 disp = interface_field_parse(); | 3370 disp = interface_field_parse(); |
3371 } | 3371 } |
3372 else { | 3372 else { |
3373 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%}' ending interface.\n"); | 3373 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%%}' ending interface.\n"); |
3374 return NULL; | 3374 return NULL; |
3375 } | 3375 } |
3376 } while( _curchar != '%' ); | 3376 } while( _curchar != '%' ); |
3377 next_char(); // Skip '%' | 3377 next_char(); // Skip '%' |
3378 if ( _curchar != '}' ) { | 3378 if ( _curchar != '}' ) { |
3379 parse_err(SYNERR, "Missing '%}' for 'interface' block.\n"); | 3379 parse_err(SYNERR, "Missing '%%}' for 'interface' block.\n"); |
3380 return NULL; | 3380 return NULL; |
3381 } | 3381 } |
3382 next_char(); // Skip '}' | 3382 next_char(); // Skip '}' |
3383 | 3383 |
3384 // Construct desired object and return | 3384 // Construct desired object and return |
3401 const char *greater_equal_format = "ge"; | 3401 const char *greater_equal_format = "ge"; |
3402 const char *less_equal_format = "le"; | 3402 const char *less_equal_format = "le"; |
3403 const char *greater_format = "gt"; | 3403 const char *greater_format = "gt"; |
3404 | 3404 |
3405 if (_curchar != '%') { | 3405 if (_curchar != '%') { |
3406 parse_err(SYNERR, "Missing '%{' for 'cond_interface' block.\n"); | 3406 parse_err(SYNERR, "Missing '%%{' for 'cond_interface' block.\n"); |
3407 return NULL; | 3407 return NULL; |
3408 } | 3408 } |
3409 next_char(); // Skip '%' | 3409 next_char(); // Skip '%' |
3410 if (_curchar != '{') { | 3410 if (_curchar != '{') { |
3411 parse_err(SYNERR, "Missing '%{' for 'cond_interface' block.\n"); | 3411 parse_err(SYNERR, "Missing '%%{' for 'cond_interface' block.\n"); |
3412 return NULL; | 3412 return NULL; |
3413 } | 3413 } |
3414 next_char(); // Skip '{' | 3414 next_char(); // Skip '{' |
3415 skipws(); | 3415 skipws(); |
3416 do { | 3416 do { |
3417 char *field = get_ident(); | 3417 char *field = get_ident(); |
3418 if (field == NULL) { | 3418 if (field == NULL) { |
3419 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%}' ending interface.\n"); | 3419 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%%}' ending interface.\n"); |
3420 return NULL; | 3420 return NULL; |
3421 } | 3421 } |
3422 if ( strcmp(field,"equal") == 0 ) { | 3422 if ( strcmp(field,"equal") == 0 ) { |
3423 equal = interface_field_parse(&equal_format); | 3423 equal = interface_field_parse(&equal_format); |
3424 } | 3424 } |
3436 } | 3436 } |
3437 else if ( strcmp(field,"greater") == 0 ) { | 3437 else if ( strcmp(field,"greater") == 0 ) { |
3438 greater = interface_field_parse(&greater_format); | 3438 greater = interface_field_parse(&greater_format); |
3439 } | 3439 } |
3440 else { | 3440 else { |
3441 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%}' ending interface.\n"); | 3441 parse_err(SYNERR, "Expected keyword, base|index|scale|disp, or '%%}' ending interface.\n"); |
3442 return NULL; | 3442 return NULL; |
3443 } | 3443 } |
3444 } while( _curchar != '%' ); | 3444 } while( _curchar != '%' ); |
3445 next_char(); // Skip '%' | 3445 next_char(); // Skip '%' |
3446 if ( _curchar != '}' ) { | 3446 if ( _curchar != '}' ) { |
3447 parse_err(SYNERR, "Missing '%}' for 'interface' block.\n"); | 3447 parse_err(SYNERR, "Missing '%%}' for 'interface' block.\n"); |
3448 return NULL; | 3448 return NULL; |
3449 } | 3449 } |
3450 next_char(); // Skip '}' | 3450 next_char(); // Skip '}' |
3451 | 3451 |
3452 // Construct desired object and return | 3452 // Construct desired object and return |
3541 cnstr = NULL; // no constructor for this form | 3541 cnstr = NULL; // no constructor for this form |
3542 next_char(); // Move past the ';', replaced with '\0' | 3542 next_char(); // Move past the ';', replaced with '\0' |
3543 } | 3543 } |
3544 else if ((cnstr = find_cpp_block("match constructor")) == NULL ) { | 3544 else if ((cnstr = find_cpp_block("match constructor")) == NULL ) { |
3545 parse_err(SYNERR, "invalid construction of match rule\n" | 3545 parse_err(SYNERR, "invalid construction of match rule\n" |
3546 "Missing ';' or invalid '%{' and '%}' constructor\n"); | 3546 "Missing ';' or invalid '%%{' and '%%}' constructor\n"); |
3547 return NULL; // No MatchRule to return | 3547 return NULL; // No MatchRule to return |
3548 } | 3548 } |
3549 if (_AD._adl_debug > 1) | 3549 if (_AD._adl_debug > 1) |
3550 if (cnstr) fprintf(stderr,"Match Constructor: %s\n", cnstr); | 3550 if (cnstr) fprintf(stderr,"Match Constructor: %s\n", cnstr); |
3551 // Build new MatchRule object | 3551 // Build new MatchRule object |
3644 } // end while part of format description | 3644 } // end while part of format description |
3645 | 3645 |
3646 // Check for closing '"' and '%}' in format description | 3646 // Check for closing '"' and '%}' in format description |
3647 skipws(); // Move to closing '%}' | 3647 skipws(); // Move to closing '%}' |
3648 if ( _curchar != '%' ) { | 3648 if ( _curchar != '%' ) { |
3649 parse_err(SYNERR, "non-blank characters between closing '\"' and '%' in format"); | 3649 parse_err(SYNERR, "non-blank characters between closing '\"' and '%%' in format"); |
3650 return NULL; | 3650 return NULL; |
3651 } | 3651 } |
3652 } // Done with format description inside | 3652 } // Done with format description inside |
3653 | 3653 |
3654 skipws(); | 3654 skipws(); |
3655 // Past format description, at '%' | 3655 // Past format description, at '%' |
3656 if ( _curchar != '%' || *(_ptr+1) != '}' ) { | 3656 if ( _curchar != '%' || *(_ptr+1) != '}' ) { |
3657 parse_err(SYNERR, "missing '%}' at end of format block"); | 3657 parse_err(SYNERR, "missing '%%}' at end of format block"); |
3658 return NULL; | 3658 return NULL; |
3659 } | 3659 } |
3660 next_char(); // Move past the '%' | 3660 next_char(); // Move past the '%' |
3661 next_char(); // Move past the '}' | 3661 next_char(); // Move past the '}' |
3662 } | 3662 } |
3783 } | 3783 } |
3784 | 3784 |
3785 skipws(); | 3785 skipws(); |
3786 // Past format description, at '%' | 3786 // Past format description, at '%' |
3787 if ( _curchar != '%' || *(_ptr+1) != '}' ) { | 3787 if ( _curchar != '%' || *(_ptr+1) != '}' ) { |
3788 parse_err(SYNERR, "missing '%}' at end of format block"); | 3788 parse_err(SYNERR, "missing '%%}' at end of format block"); |
3789 return NULL; | 3789 return NULL; |
3790 } | 3790 } |
3791 next_char(); // Move past the '%' | 3791 next_char(); // Move past the '%' |
3792 next_char(); // Move past the '}' | 3792 next_char(); // Move past the '}' |
3793 | 3793 |
3832 // which has an ordered list of operands. | 3832 // which has an ordered list of operands. |
3833 // Check for block delimiter | 3833 // Check for block delimiter |
3834 skipws(); // Skip leading whitespace | 3834 skipws(); // Skip leading whitespace |
3835 if ((_curchar != '%') | 3835 if ((_curchar != '%') |
3836 || (next_char(), (_curchar != '{')) ) { // If not open block | 3836 || (next_char(), (_curchar != '{')) ) { // If not open block |
3837 parse_err(SYNERR, "missing '%{' in expand definition\n"); | 3837 parse_err(SYNERR, "missing '%%{' in expand definition\n"); |
3838 return(NULL); | 3838 return(NULL); |
3839 } | 3839 } |
3840 next_char(); // Maintain the invariant | 3840 next_char(); // Maintain the invariant |
3841 do { | 3841 do { |
3842 ident = get_ident(); // Grab next identifier | 3842 ident = get_ident(); // Grab next identifier |
3931 } | 3931 } |
3932 | 3932 |
3933 } while(_curchar != '%'); | 3933 } while(_curchar != '%'); |
3934 next_char(); | 3934 next_char(); |
3935 if (_curchar != '}') { | 3935 if (_curchar != '}') { |
3936 parse_err(SYNERR, "missing '%}' in expand rule definition\n"); | 3936 parse_err(SYNERR, "missing '%%}' in expand rule definition\n"); |
3937 return(NULL); | 3937 return(NULL); |
3938 } | 3938 } |
3939 next_char(); | 3939 next_char(); |
3940 | 3940 |
3941 // Debug Stuff | 3941 // Debug Stuff |