@@ -133,7 +133,10 @@ impl EarlyProps {
133133 fn ignore_gdb ( config : & Config , line : & str ) -> bool {
134134 if let Some ( actual_version) = config. gdb_version {
135135 if let Some ( rest) = line. strip_prefix ( "min-gdb-version:" ) . map ( str:: trim) {
136- let ( start_ver, end_ver) = extract_version_range ( rest, extract_gdb_version) ;
136+ let ( start_ver, end_ver) = extract_version_range ( rest, extract_gdb_version)
137+ . unwrap_or_else ( || {
138+ panic ! ( "couldn't parse version range: {:?}" , rest) ;
139+ } ) ;
137140
138141 if start_ver != end_ver {
139142 panic ! ( "Expected single GDB version" )
@@ -143,7 +146,9 @@ impl EarlyProps {
143146 return actual_version < start_ver;
144147 } else if let Some ( rest) = line. strip_prefix ( "ignore-gdb-version:" ) . map ( str:: trim) {
145148 let ( min_version, max_version) =
146- extract_version_range ( rest, extract_gdb_version) ;
149+ extract_version_range ( rest, extract_gdb_version) . unwrap_or_else ( || {
150+ panic ! ( "couldn't parse version range: {:?}" , rest) ;
151+ } ) ;
147152
148153 if max_version < min_version {
149154 panic ! ( "Malformed GDB version range: max < min" )
@@ -197,7 +202,10 @@ impl EarlyProps {
197202 } else if let Some ( rest) = line. strip_prefix ( "ignore-llvm-version:" ) . map ( str:: trim)
198203 {
199204 // Syntax is: "ignore-llvm-version: <version1> [- <version2>]"
200- let ( v_min, v_max) = extract_version_range ( rest, extract_llvm_version) ;
205+ let ( v_min, v_max) = extract_version_range ( rest, extract_llvm_version)
206+ . unwrap_or_else ( || {
207+ panic ! ( "couldn't parse version range: {:?}" , rest) ;
208+ } ) ;
201209 if v_max < v_min {
202210 panic ! ( "Malformed LLVM version range: max < min" )
203211 }
@@ -940,28 +948,28 @@ pub fn extract_llvm_version(version: &str) -> Option<u32> {
940948// tuple: (<version1> as u32, <version2> as u32)
941949// If the <version2> part is omitted, the second component of the tuple
942950// is the same as <version1>.
943- fn extract_version_range < F > ( line : & str , parse : F ) -> ( u32 , u32 )
951+ fn extract_version_range < F > ( line : & str , parse : F ) -> Option < ( u32 , u32 ) >
944952where
945953 F : Fn ( & str ) -> Option < u32 > ,
946954{
947- let range_components = line
948- . split ( & [ ' ' , '-' ] [ ..] )
949- . filter ( |word| !word. is_empty ( ) )
950- . map ( parse)
951- . skip_while ( Option :: is_none)
952- . take ( 3 ) // 3 or more = invalid, so take at most 3.
953- . collect :: < Vec < Option < u32 > > > ( ) ;
954-
955- match * range_components {
956- [ v] => {
957- let v = v. unwrap ( ) ;
958- ( v, v)
959- }
960- [ min, max] => {
961- let v_min = min. unwrap ( ) ;
962- let v_max = max. expect ( "Malformed version directive" ) ;
963- ( v_min, v_max)
964- }
965- _ => panic ! ( "Malformed version directive" ) ,
955+ let mut splits = line. splitn ( 2 , "- " ) . map ( str:: trim) ;
956+ let min = splits. next ( ) . unwrap ( ) ;
957+ if min. ends_with ( '-' ) {
958+ return None ;
959+ }
960+
961+ let max = splits. next ( ) ;
962+
963+ if min. is_empty ( ) {
964+ return None ;
966965 }
966+
967+ let min = parse ( min) ?;
968+ let max = match max {
969+ Some ( max) if max. is_empty ( ) => return None ,
970+ Some ( max) => parse ( max) ?,
971+ _ => min,
972+ } ;
973+
974+ Some ( ( min, max) )
967975}
0 commit comments