@@ -105,20 +105,34 @@ impl TargetDataLayout {
105
105
let mut dl = TargetDataLayout :: default ( ) ;
106
106
let mut i128_align_src = 64 ;
107
107
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 {
109
111
[ "e" ] => dl. endian = Endian :: Little ,
110
112
[ "E" ] => dl. endian = Endian :: Big ,
111
113
[ p] if p. starts_with ( "P" ) => {
112
114
dl. instruction_address_space = parse_address_space ( & p[ 1 ..] , "P" ) ?
113
115
}
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.
118
131
dl. pointer_size = size ( s, p) ?;
119
132
dl. pointer_align = align ( a, p) ?;
120
133
}
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.
122
136
let bits = match s[ 1 ..] . parse :: < u64 > ( ) {
123
137
Ok ( bits) => bits,
124
138
Err ( _) => {
@@ -142,7 +156,8 @@ impl TargetDataLayout {
142
156
dl. i128_align = a;
143
157
}
144
158
}
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.
146
161
let v_size = size ( & s[ 1 ..] , "v" ) ?;
147
162
let a = align ( a, s) ?;
148
163
if let Some ( v) = dl. vector_align . iter_mut ( ) . find ( |v| v. 0 == v_size) {
0 commit comments