bug: nesting pattern types in enums doesn't use layout optimizations · flip1995/rust@2db07f9 (original) (raw)

``

1

`+

error: layout_of(NonZeroU32) = Layout {

`

``

2

`+

size: Size(4 bytes),

`

``

3

`+

align: AbiAndPrefAlign {

`

``

4

`+

abi: Align(4 bytes),

`

``

5

`+

pref: Align(8 bytes),

`

``

6

`+

},

`

``

7

`+

abi: Scalar(

`

``

8

`+

Initialized {

`

``

9

`+

value: Int(

`

``

10

`+

I32,

`

``

11

`+

false,

`

``

12

`+

),

`

``

13

`+

valid_range: 1..=4294967295,

`

``

14

`+

},

`

``

15

`+

),

`

``

16

`+

fields: Arbitrary {

`

``

17

`+

offsets: [

`

``

18

`+

Size(0 bytes),

`

``

19

`+

],

`

``

20

`+

memory_index: [

`

``

21

`+

0,

`

``

22

`+

],

`

``

23

`+

},

`

``

24

`+

largest_niche: Some(

`

``

25

`+

Niche {

`

``

26

`+

offset: Size(0 bytes),

`

``

27

`+

value: Int(

`

``

28

`+

I32,

`

``

29

`+

false,

`

``

30

`+

),

`

``

31

`+

valid_range: 1..=4294967295,

`

``

32

`+

},

`

``

33

`+

),

`

``

34

`+

variants: Single {

`

``

35

`+

index: 0,

`

``

36

`+

},

`

``

37

`+

max_repr_align: None,

`

``

38

`+

unadjusted_abi_align: Align(4 bytes),

`

``

39

`+

}

`

``

40

`+

--> $DIR/range_patterns.rs:9:1

`

``

41

`+

|

`

``

42

`+

LL | type X = std::num::NonZeroU32;

`

``

43

`+

| ^^^^^^

`

``

44

+

``

45

`+

error: layout_of((u32) is 1..=) = Layout {

`

``

46

`+

size: Size(4 bytes),

`

``

47

`+

align: AbiAndPrefAlign {

`

``

48

`+

abi: Align(4 bytes),

`

``

49

`+

pref: Align(4 bytes),

`

``

50

`+

},

`

``

51

`+

abi: Scalar(

`

``

52

`+

Initialized {

`

``

53

`+

value: Int(

`

``

54

`+

I32,

`

``

55

`+

false,

`

``

56

`+

),

`

``

57

`+

valid_range: 1..=4294967295,

`

``

58

`+

},

`

``

59

`+

),

`

``

60

`+

fields: Primitive,

`

``

61

`+

largest_niche: None,

`

``

62

`+

variants: Single {

`

``

63

`+

index: 0,

`

``

64

`+

},

`

``

65

`+

max_repr_align: None,

`

``

66

`+

unadjusted_abi_align: Align(4 bytes),

`

``

67

`+

}

`

``

68

`+

--> $DIR/range_patterns.rs:11:1

`

``

69

`+

|

`

``

70

`+

LL | type Y = pattern_type!(u32 is 1..);

`

``

71

`+

| ^^^^^^

`

``

72

+

``

73

`+

error: layout_of(Option<(u32) is 1..=>) = Layout {

`

``

74

`+

size: Size(8 bytes),

`

``

75

`+

align: AbiAndPrefAlign {

`

``

76

`+

abi: Align(4 bytes),

`

``

77

`+

pref: Align(8 bytes),

`

``

78

`+

},

`

``

79

`+

abi: ScalarPair(

`

``

80

`+

Initialized {

`

``

81

`+

value: Int(

`

``

82

`+

I32,

`

``

83

`+

false,

`

``

84

`+

),

`

``

85

`+

valid_range: 0..=1,

`

``

86

`+

},

`

``

87

`+

Union {

`

``

88

`+

value: Int(

`

``

89

`+

I32,

`

``

90

`+

false,

`

``

91

`+

),

`

``

92

`+

},

`

``

93

`+

),

`

``

94

`+

fields: Arbitrary {

`

``

95

`+

offsets: [

`

``

96

`+

Size(0 bytes),

`

``

97

`+

],

`

``

98

`+

memory_index: [

`

``

99

`+

0,

`

``

100

`+

],

`

``

101

`+

},

`

``

102

`+

largest_niche: Some(

`

``

103

`+

Niche {

`

``

104

`+

offset: Size(0 bytes),

`

``

105

`+

value: Int(

`

``

106

`+

I32,

`

``

107

`+

false,

`

``

108

`+

),

`

``

109

`+

valid_range: 0..=1,

`

``

110

`+

},

`

``

111

`+

),

`

``

112

`+

variants: Multiple {

`

``

113

`+

tag: Initialized {

`

``

114

`+

value: Int(

`

``

115

`+

I32,

`

``

116

`+

false,

`

``

117

`+

),

`

``

118

`+

valid_range: 0..=1,

`

``

119

`+

},

`

``

120

`+

tag_encoding: Direct,

`

``

121

`+

tag_field: 0,

`

``

122

`+

variants: [

`

``

123

`+

Layout {

`

``

124

`+

size: Size(4 bytes),

`

``

125

`+

align: AbiAndPrefAlign {

`

``

126

`+

abi: Align(1 bytes),

`

``

127

`+

pref: Align(8 bytes),

`

``

128

`+

},

`

``

129

`+

abi: Aggregate {

`

``

130

`+

sized: true,

`

``

131

`+

},

`

``

132

`+

fields: Arbitrary {

`

``

133

`+

offsets: [],

`

``

134

`+

memory_index: [],

`

``

135

`+

},

`

``

136

`+

largest_niche: None,

`

``

137

`+

variants: Single {

`

``

138

`+

index: 0,

`

``

139

`+

},

`

``

140

`+

max_repr_align: None,

`

``

141

`+

unadjusted_abi_align: Align(1 bytes),

`

``

142

`+

},

`

``

143

`+

Layout {

`

``

144

`+

size: Size(8 bytes),

`

``

145

`+

align: AbiAndPrefAlign {

`

``

146

`+

abi: Align(4 bytes),

`

``

147

`+

pref: Align(8 bytes),

`

``

148

`+

},

`

``

149

`+

abi: ScalarPair(

`

``

150

`+

Initialized {

`

``

151

`+

value: Int(

`

``

152

`+

I32,

`

``

153

`+

false,

`

``

154

`+

),

`

``

155

`+

valid_range: 0..=1,

`

``

156

`+

},

`

``

157

`+

Union {

`

``

158

`+

value: Int(

`

``

159

`+

I32,

`

``

160

`+

false,

`

``

161

`+

),

`

``

162

`+

},

`

``

163

`+

),

`

``

164

`+

fields: Arbitrary {

`

``

165

`+

offsets: [

`

``

166

`+

Size(4 bytes),

`

``

167

`+

],

`

``

168

`+

memory_index: [

`

``

169

`+

0,

`

``

170

`+

],

`

``

171

`+

},

`

``

172

`+

largest_niche: None,

`

``

173

`+

variants: Single {

`

``

174

`+

index: 1,

`

``

175

`+

},

`

``

176

`+

max_repr_align: None,

`

``

177

`+

unadjusted_abi_align: Align(4 bytes),

`

``

178

`+

},

`

``

179

`+

],

`

``

180

`+

},

`

``

181

`+

max_repr_align: None,

`

``

182

`+

unadjusted_abi_align: Align(4 bytes),

`

``

183

`+

}

`

``

184

`+

--> $DIR/range_patterns.rs:13:1

`

``

185

`+

|

`

``

186

`+

LL | type Z = Option<pattern_type!(u32 is 1..)>;

`

``

187

`+

| ^^^^^^

`

``

188

+

``

189

`+

error: layout_of(Option) = Layout {

`

``

190

`+

size: Size(4 bytes),

`

``

191

`+

align: AbiAndPrefAlign {

`

``

192

`+

abi: Align(4 bytes),

`

``

193

`+

pref: Align(8 bytes),

`

``

194

`+

},

`

``

195

`+

abi: Scalar(

`

``

196

`+

Initialized {

`

``

197

`+

value: Int(

`

``

198

`+

I32,

`

``

199

`+

false,

`

``

200

`+

),

`

``

201

`+

valid_range: (..=0) | (1..),

`

``

202

`+

},

`

``

203

`+

),

`

``

204

`+

fields: Arbitrary {

`

``

205

`+

offsets: [

`

``

206

`+

Size(0 bytes),

`

``

207

`+

],

`

``

208

`+

memory_index: [

`

``

209

`+

0,

`

``

210

`+

],

`

``

211

`+

},

`

``

212

`+

largest_niche: None,

`

``

213

`+

variants: Multiple {

`

``

214

`+

tag: Initialized {

`

``

215

`+

value: Int(

`

``

216

`+

I32,

`

``

217

`+

false,

`

``

218

`+

),

`

``

219

`+

valid_range: (..=0) | (1..),

`

``

220

`+

},

`

``

221

`+

tag_encoding: Niche {

`

``

222

`+

untagged_variant: 1,

`

``

223

`+

niche_variants: 0..=0,

`

``

224

`+

niche_start: 0,

`

``

225

`+

},

`

``

226

`+

tag_field: 0,

`

``

227

`+

variants: [

`

``

228

`+

Layout {

`

``

229

`+

size: Size(0 bytes),

`

``

230

`+

align: AbiAndPrefAlign {

`

``

231

`+

abi: Align(1 bytes),

`

``

232

`+

pref: Align(8 bytes),

`

``

233

`+

},

`

``

234

`+

abi: Aggregate {

`

``

235

`+

sized: true,

`

``

236

`+

},

`

``

237

`+

fields: Arbitrary {

`

``

238

`+

offsets: [],

`

``

239

`+

memory_index: [],

`

``

240

`+

},

`

``

241

`+

largest_niche: None,

`

``

242

`+

variants: Single {

`

``

243

`+

index: 0,

`

``

244

`+

},

`

``

245

`+

max_repr_align: None,

`

``

246

`+

unadjusted_abi_align: Align(1 bytes),

`

``

247

`+

},

`

``

248

`+

Layout {

`

``

249

`+

size: Size(4 bytes),

`

``

250

`+

align: AbiAndPrefAlign {

`

``

251

`+

abi: Align(4 bytes),

`

``

252

`+

pref: Align(8 bytes),

`

``

253

`+

},

`

``

254

`+

abi: Scalar(

`

``

255

`+

Initialized {

`

``

256

`+

value: Int(

`

``

257

`+

I32,

`

``

258

`+

false,

`

``

259

`+

),

`

``

260

`+

valid_range: 1..=4294967295,

`

``

261

`+

},

`

``

262

`+

),

`

``

263

`+

fields: Arbitrary {

`

``

264

`+

offsets: [

`

``

265

`+

Size(0 bytes),

`

``

266

`+

],

`

``

267

`+

memory_index: [

`

``

268

`+

0,

`

``

269

`+

],

`

``

270

`+

},

`

``

271

`+

largest_niche: Some(

`

``

272

`+

Niche {

`

``

273

`+

offset: Size(0 bytes),

`

``

274

`+

value: Int(

`

``

275

`+

I32,

`

``

276

`+

false,

`

``

277

`+

),

`

``

278

`+

valid_range: 1..=4294967295,

`

``

279

`+

},

`

``

280

`+

),

`

``

281

`+

variants: Single {

`

``

282

`+

index: 1,

`

``

283

`+

},

`

``

284

`+

max_repr_align: None,

`

``

285

`+

unadjusted_abi_align: Align(4 bytes),

`

``

286

`+

},

`

``

287

`+

],

`

``

288

`+

},

`

``

289

`+

max_repr_align: None,

`

``

290

`+

unadjusted_abi_align: Align(4 bytes),

`

``

291

`+

}

`

``

292

`+

--> $DIR/range_patterns.rs:15:1

`

``

293

`+

|

`

``

294

`+

LL | type A = Optionstd::num::NonZeroU32;

`

``

295

`+

| ^^^^^^

`

``

296

+

``

297

`+

error: layout_of(NonZeroU32New) = Layout {

`

``

298

`+

size: Size(4 bytes),

`

``

299

`+

align: AbiAndPrefAlign {

`

``

300

`+

abi: Align(4 bytes),

`

``

301

`+

pref: Align(8 bytes),

`

``

302

`+

},

`

``

303

`+

abi: Scalar(

`

``

304

`+

Initialized {

`

``

305

`+

value: Int(

`

``

306

`+

I32,

`

``

307

`+

false,

`

``

308

`+

),

`

``

309

`+

valid_range: 1..=4294967295,

`

``

310

`+

},

`

``

311

`+

),

`

``

312

`+

fields: Arbitrary {

`

``

313

`+

offsets: [

`

``

314

`+

Size(0 bytes),

`

``

315

`+

],

`

``

316

`+

memory_index: [

`

``

317

`+

0,

`

``

318

`+

],

`

``

319

`+

},

`

``

320

`+

largest_niche: Some(

`

``

321

`+

Niche {

`

``

322

`+

offset: Size(0 bytes),

`

``

323

`+

value: Int(

`

``

324

`+

I32,

`

``

325

`+

false,

`

``

326

`+

),

`

``

327

`+

valid_range: 1..=4294967295,

`

``

328

`+

},

`

``

329

`+

),

`

``

330

`+

variants: Single {

`

``

331

`+

index: 0,

`

``

332

`+

},

`

``

333

`+

max_repr_align: None,

`

``

334

`+

unadjusted_abi_align: Align(4 bytes),

`

``

335

`+

}

`

``

336

`+

--> $DIR/range_patterns.rs:17:1

`

``

337

`+

|

`

``

338

`+

LL | struct NonZeroU32New(pattern_type!(u32 is 1..));

`

``

339

`+

| ^^^^^^^^^^^^^^^^^^^^

`

``

340

+

``

341

`+

error: aborting due to 5 previous errors

`

``

342

+