@@ -105,20 +105,34 @@ impl TargetDataLayout {
105105 let mut dl = TargetDataLayout :: default ( ) ;
106106 let mut i128_align_src = 64 ;
107107 for spec in target. data_layout . split ( '-' ) {
108- match spec. split ( ':' ) . collect :: < Vec < _ > > ( ) [ ..] {
108+ let spec_parts = spec. split ( ':' ) . collect :: < Vec < _ > > ( ) ;
109+
110+ match & * spec_parts {
109111 [ "e" ] => dl. endian = Endian :: Little ,
110112 [ "E" ] => dl. endian = Endian :: Big ,
111113 [ p] if p. starts_with ( "P" ) => {
112114 dl. instruction_address_space = parse_address_space ( & p[ 1 ..] , "P" ) ?
113115 }
114- [ "a" , ref a..] => dl. aggregate_align = align ( a, "a" ) ?,
115- [ "f32" , ref a..] => dl. f32_align = align ( a, "f32" ) ?,
116- [ "f64" , ref a..] => dl. f64_align = align ( a, "f64" ) ?,
117- [ p @ "p" , s, ref a..] | [ p @ "p0" , s, ref a..] => {
116+ // FIXME: Ping cfg(bootstrap) -- Use `ref a @ ..` with new bootstrap compiler.
117+ [ "a" , ..] => {
118+ let a = & spec_parts[ 1 ..] ; // FIXME inline into pattern.
119+ dl. aggregate_align = align ( a, "a" ) ?
120+ }
121+ [ "f32" , ..] => {
122+ let a = & spec_parts[ 1 ..] ; // FIXME inline into pattern.
123+ dl. f32_align = align ( a, "f32" ) ?
124+ }
125+ [ "f64" , ..] => {
126+ let a = & spec_parts[ 1 ..] ; // FIXME inline into pattern.
127+ dl. f64_align = align ( a, "f64" ) ?
128+ }
129+ [ p @ "p" , s, ..] | [ p @ "p0" , s, ..] => {
130+ let a = & spec_parts[ 2 ..] ; // FIXME inline into pattern.
118131 dl. pointer_size = size ( s, p) ?;
119132 dl. pointer_align = align ( a, p) ?;
120133 }
121- [ s, ref a..] if s. starts_with ( "i" ) => {
134+ [ s, ..] if s. starts_with ( "i" ) => {
135+ let a = & spec_parts[ 1 ..] ; // FIXME inline into pattern.
122136 let bits = match s[ 1 ..] . parse :: < u64 > ( ) {
123137 Ok ( bits) => bits,
124138 Err ( _) => {
@@ -142,7 +156,8 @@ impl TargetDataLayout {
142156 dl. i128_align = a;
143157 }
144158 }
145- [ s, ref a..] if s. starts_with ( "v" ) => {
159+ [ s, ..] if s. starts_with ( "v" ) => {
160+ let a = & spec_parts[ 1 ..] ; // FIXME inline into pattern.
146161 let v_size = size ( & s[ 1 ..] , "v" ) ?;
147162 let a = align ( a, s) ?;
148163 if let Some ( v) = dl. vector_align . iter_mut ( ) . find ( |v| v. 0 == v_size) {
0 commit comments