diff --git a/maint/extracterrmsgs b/maint/extracterrmsgs index df26c4cf0fb..1bb41dbb20e 100755 --- a/maint/extracterrmsgs +++ b/maint/extracterrmsgs @@ -648,8 +648,14 @@ sub ReadErrnamesFile { # The last two are used to provide better error reporting. # $filename = ""; # Make global so that other routines can echo filename +%KnownErrRoutines; + sub ProcessFile { + if (!%KnownErrRoutines) { + load_KnownErrRoutines(); + } + # Leave filename global for AddTest $filename = $_[0]; my $linecount = 0; @@ -672,74 +678,13 @@ sub ProcessFile $_ = StripComments( FD, $_ ); # Skip the definition of the function if (/int\s+MPI[OUR]_Err_create_code/) { $remainder = ""; next; } - # Match the known routines and macros. - # Then check that the arguments match if there is a - # specific string (number of args matches the number present) - # MPIR_ERR_CHK(FATAL)?ANDJUMP[1-4]?(cond,code,class,gmsg[,smsg,args]) - # MPIR_ERR_SET(FATAL)?ANDJUMP[1-4]?(code,class,gmsg[,smsg,args]) - # MPIR_ERR_CHK(FATAL)?ANDSTMT[1-4]?(cond,code,class,stmt,gmsg[,smsg,args]) - # MPIR_ERR_SET(FATAL)?ANDSTMT[1-4]?(code,class,stmt,gmsg[,smsg,args]) - # Value is a tuple of: - # the count of args where the generic msg begins (starting from 0) - # location of __LINE__ (-1 for none) - # specific msg arg required (0 for no, > 0 for yes) - # is the generic message an indirect from errnames.txt (1=yes 0=no) - # location of the error class - %KnownErrRoutines = ( 'MPIR_Err_create_code' => '5:3:1:1:4', - 'MPIO_Err_create_code' => '5:3:1:0:-1', - 'MPIR_ERR_SET' => '2:-1:0:1:1', - 'MPIR_ERR_SETSIMPLE' => '2:-1:0:1:1', - 'MPIR_ERR_SET1' => '2:-1:1:1:1', - 'MPIR_ERR_SET2' => '2:-1:2:1:1', - 'MPIR_ERR_SETANDSTMT' => '3:-1:0:1:1', - 'MPIR_ERR_SETANDSTMT1' => '3:-1:1:1:1', - 'MPIR_ERR_SETANDSTMT2' => '3:-1:1:1:1', - 'MPIR_ERR_SETANDSTMT3' => '3:-1:1:1:1', - 'MPIR_ERR_SETANDSTMT4' => '3:-1:1:1:1', - 'MPIR_ERR_SETANDJUMP' => '2:-1:0:1:1', - 'MPIR_ERR_SETANDJUMP1' => '2:-1:1:1:1', - 'MPIR_ERR_SETANDJUMP2' => '2:-1:1:1:1', - 'MPIR_ERR_SETANDJUMP3' => '2:-1:1:1:1', - 'MPIR_ERR_SETANDJUMP4' => '2:-1:1:1:1', - 'MPIR_ERR_CHKANDSTMT' => '4:-1:0:1:2', - 'MPIR_ERR_CHKANDSTMT1' => '4:-1:1:1:2', - 'MPIR_ERR_CHKANDSTMT2' => '4:-1:1:1:2', - 'MPIR_ERR_CHKANDSTMT3' => '4:-1:1:1:2', - 'MPIR_ERR_CHKANDSTMT4' => '4:-1:1:1:2', - 'MPIR_ERR_CHKANDJUMP' => '3:-1:0:1:2', - 'MPIR_ERR_CHKANDJUMP1' => '3:-1:1:1:2', - 'MPIR_ERR_CHKANDJUMP2' => '3:-1:1:1:2', - 'MPIR_ERR_CHKANDJUMP3' => '3:-1:1:1:2', - 'MPIR_ERR_CHKANDJUMP4' => '3:-1:1:1:2', - 'MPIR_ERR_SETFATAL' => '2:-1:0:1:1', - 'MPIR_ERR_SETFATALSIMPLE' => '2:-1:0:1:1', - 'MPIR_ERR_SETFATAL1' => '2:-1:1:1:1', - 'MPIR_ERR_SETFATAL2' => '2:-1:2:1:1', - 'MPIR_ERR_SETFATALANDSTMT' => '3:-1:0:1:1', - 'MPIR_ERR_SETFATALANDSTMT1' => '3:-1:1:1:1', - 'MPIR_ERR_SETFATALANDSTMT2' => '3:-1:1:1:1', - 'MPIR_ERR_SETFATALANDSTMT3' => '3:-1:1:1:1', - 'MPIR_ERR_SETFATALANDSTMT4' => '3:-1:1:1:1', - 'MPIR_ERR_SETFATALANDJUMP' => '2:-1:0:1:1', - 'MPIR_ERR_SETFATALANDJUMP1' => '2:-1:1:1:1', - 'MPIR_ERR_SETFATALANDJUMP2' => '2:-1:1:1:1', - 'MPIR_ERR_SETFATALANDJUMP3' => '2:-1:1:1:1', - 'MPIR_ERR_SETFATALANDJUMP4' => '2:-1:1:1:1', - 'MPIR_ERR_CHKFATALANDSTMT' => '4:-1:0:1:2', - 'MPIR_ERR_CHKFATALANDSTMT1' => '4:-1:1:1:2', - 'MPIR_ERR_CHKFATALANDSTMT2' => '4:-1:1:1:2', - 'MPIR_ERR_CHKFATALANDSTMT3' => '4:-1:1:1:2', - 'MPIR_ERR_CHKFATALANDSTMT4' => '4:-1:1:1:2', - 'MPIR_ERR_CHKFATALANDJUMP' => '3:-1:0:1:2', - 'MPIR_ERR_CHKFATALANDJUMP1' => '3:-1:1:1:2', - 'MPIR_ERR_CHKFATALANDJUMP2' => '3:-1:1:1:2', - 'MPIR_ERR_CHKFATALANDJUMP3' => '3:-1:1:1:2', - 'MPIR_ERR_CHKFATALANDJUMP4' => '3:-1:1:1:2', - 'MPIR_ERRTEST_VALID_HANDLE' => '4:-1:0:1:3', - ); - while (/(MPI[OUR]_E[A-Za-z0-9_]+)\s*(\(.*)$/) { + while (/(MPI[OUR]_Err[A-Za-z0-9_]+)\s*(\(.*)$/i) { my $routineName = $1; my $arglist = $2; + if ($routineName =~ /MPIR_ERR_(CHECK|POP|ADD|GET_CLASS|COLL_CHECKANDCONT|is_fatal)/i) { + # skip known false positives + next; + } if (!defined($KnownErrRoutines{$routineName})) { print "Skipping $routineName\n" if $debug; last; @@ -939,7 +884,74 @@ sub ExpandDir { return @files; } - +sub load_KnownErrRoutines { + # Match the known routines and macros. + # Then check that the arguments match if there is a + # specific string (number of args matches the number present) + # MPIR_ERR_CHK(FATAL)?ANDJUMP[1-4]?(cond,code,class,gmsg[,smsg,args]) + # MPIR_ERR_SET(FATAL)?ANDJUMP[1-4]?(code,class,gmsg[,smsg,args]) + # MPIR_ERR_CHK(FATAL)?ANDSTMT[1-4]?(cond,code,class,stmt,gmsg[,smsg,args]) + # MPIR_ERR_SET(FATAL)?ANDSTMT[1-4]?(code,class,stmt,gmsg[,smsg,args]) + # Value is a tuple of: + # the count of args where the generic msg begins (starting from 0) + # location of __LINE__ (-1 for none) + # specific msg arg required (0 for no, > 0 for yes) + # is the generic message an indirect from errnames.txt (1=yes 0=no) + # location of the error class + %KnownErrRoutines = ( + 'MPIR_Err_create_code' => '5:3:1:1:4', + 'MPIO_Err_create_code' => '5:3:1:0:-1', + 'MPIR_ERR_SET' => '2:-1:0:1:1', + 'MPIR_ERR_SETSIMPLE' => '2:-1:0:1:1', + 'MPIR_ERR_SET1' => '2:-1:1:1:1', + 'MPIR_ERR_SET2' => '2:-1:2:1:1', + 'MPIR_ERR_SETANDSTMT' => '3:-1:0:1:1', + 'MPIR_ERR_SETANDSTMT1' => '3:-1:1:1:1', + 'MPIR_ERR_SETANDSTMT2' => '3:-1:1:1:1', + 'MPIR_ERR_SETANDSTMT3' => '3:-1:1:1:1', + 'MPIR_ERR_SETANDSTMT4' => '3:-1:1:1:1', + 'MPIR_ERR_SETANDJUMP' => '2:-1:0:1:1', + 'MPIR_ERR_SETANDJUMP1' => '2:-1:1:1:1', + 'MPIR_ERR_SETANDJUMP2' => '2:-1:1:1:1', + 'MPIR_ERR_SETANDJUMP3' => '2:-1:1:1:1', + 'MPIR_ERR_SETANDJUMP4' => '2:-1:1:1:1', + 'MPIR_ERR_CHKANDSTMT' => '4:-1:0:1:2', + 'MPIR_ERR_CHKANDSTMT1' => '4:-1:1:1:2', + 'MPIR_ERR_CHKANDSTMT2' => '4:-1:1:1:2', + 'MPIR_ERR_CHKANDSTMT3' => '4:-1:1:1:2', + 'MPIR_ERR_CHKANDSTMT4' => '4:-1:1:1:2', + 'MPIR_ERR_CHKANDJUMP' => '3:-1:0:1:2', + 'MPIR_ERR_CHKANDJUMP1' => '3:-1:1:1:2', + 'MPIR_ERR_CHKANDJUMP2' => '3:-1:1:1:2', + 'MPIR_ERR_CHKANDJUMP3' => '3:-1:1:1:2', + 'MPIR_ERR_CHKANDJUMP4' => '3:-1:1:1:2', + 'MPIR_ERR_SETFATAL' => '2:-1:0:1:1', + 'MPIR_ERR_SETFATALSIMPLE' => '2:-1:0:1:1', + 'MPIR_ERR_SETFATAL1' => '2:-1:1:1:1', + 'MPIR_ERR_SETFATAL2' => '2:-1:2:1:1', + 'MPIR_ERR_SETFATALANDSTMT' => '3:-1:0:1:1', + 'MPIR_ERR_SETFATALANDSTMT1' => '3:-1:1:1:1', + 'MPIR_ERR_SETFATALANDSTMT2' => '3:-1:1:1:1', + 'MPIR_ERR_SETFATALANDSTMT3' => '3:-1:1:1:1', + 'MPIR_ERR_SETFATALANDSTMT4' => '3:-1:1:1:1', + 'MPIR_ERR_SETFATALANDJUMP' => '2:-1:0:1:1', + 'MPIR_ERR_SETFATALANDJUMP1' => '2:-1:1:1:1', + 'MPIR_ERR_SETFATALANDJUMP2' => '2:-1:1:1:1', + 'MPIR_ERR_SETFATALANDJUMP3' => '2:-1:1:1:1', + 'MPIR_ERR_SETFATALANDJUMP4' => '2:-1:1:1:1', + 'MPIR_ERR_CHKFATALANDSTMT' => '4:-1:0:1:2', + 'MPIR_ERR_CHKFATALANDSTMT1' => '4:-1:1:1:2', + 'MPIR_ERR_CHKFATALANDSTMT2' => '4:-1:1:1:2', + 'MPIR_ERR_CHKFATALANDSTMT3' => '4:-1:1:1:2', + 'MPIR_ERR_CHKFATALANDSTMT4' => '4:-1:1:1:2', + 'MPIR_ERR_CHKFATALANDJUMP' => '3:-1:0:1:2', + 'MPIR_ERR_CHKFATALANDJUMP1' => '3:-1:1:1:2', + 'MPIR_ERR_CHKFATALANDJUMP2' => '3:-1:1:1:2', + 'MPIR_ERR_CHKFATALANDJUMP3' => '3:-1:1:1:2', + 'MPIR_ERR_CHKFATALANDJUMP4' => '3:-1:1:1:2', + 'MPIR_ERRTEST_VALID_HANDLE' => '4:-1:0:1:3', + ); +} # # Other todos: