Skip to content

crash with StackOverflowError #1661

Closed
Closed
@helloqirun

Description

@helloqirun

This case is a bit large. I tried to minimize it, without much luck.

$ cat abc.scala

sealed trait C
case object C65 extends C
case object C66 extends C
case object C67 extends C
case object C68 extends C
case object C69 extends C
case object C70 extends C
case object C71 extends C
case object C72 extends C
case object C73 extends C
case object C74 extends C
case object C75 extends C
case object C76 extends C
case object C77 extends C
case object C78 extends C
case object C79 extends C
case object C80 extends C
case object C81 extends C
case object C82 extends C
case object C83 extends C
case object C84 extends C
case object C85 extends C
case object C86 extends C
case object C87 extends C
case object C88 extends C
case object C89 extends C
case object C90 extends C
case object C91 extends C
case object C92 extends C
case object C93 extends C
case object C94 extends C
case object C95 extends C
case object C96 extends C
case object C97 extends C
case object C98 extends C
case object C99 extends C
case object C100 extends C
case object C101 extends C
case object C102 extends C
case object C103 extends C
case object C104 extends C
case object C105 extends C
case object C106 extends C
case object C107 extends C
case object C108 extends C
case object C109 extends C
case object C110 extends C
case object C111 extends C
case object C112 extends C
case object C113 extends C
case object C114 extends C
case object C115 extends C
case object C116 extends C
case object C117 extends C
case object C118 extends C
case object C119 extends C
case object C120 extends C
case object C121 extends C
case object C122 extends C
case object C123 extends C
case object C124 extends C
case object C125 extends C
case object C126 extends C
case object C127 extends C
case object C128 extends C
case object C129 extends C
case object C130 extends C
case object C131 extends C
case object C132 extends C
case object C133 extends C
case object C134 extends C
case object C135 extends C
case object C136 extends C
case object C137 extends C
case object C138 extends C
case object C139 extends C
case object C140 extends C
case object C141 extends C
case object C142 extends C
case object C143 extends C
case object C144 extends C
case object C145 extends C
case object C146 extends C
case object C147 extends C
case object C148 extends C
case object C149 extends C
case object C150 extends C
case object C151 extends C
case object C152 extends C
case object C153 extends C
case object C154 extends C
case object C155 extends C
case object C156 extends C
case object C157 extends C
case object C158 extends C
case object C159 extends C
case object C160 extends C
case object C161 extends C
case object C162 extends C
case object C163 extends C
case object C164 extends C
case object C165 extends C
case object C166 extends C
case object C167 extends C
case object C168 extends C
case object C169 extends C
case object C170 extends C
case object C171 extends C
case object C172 extends C
case object C173 extends C
case object C174 extends C
case object C175 extends C
case object C176 extends C
case object C177 extends C
case object C178 extends C
case object C179 extends C
case object C180 extends C
case object C181 extends C
case object C182 extends C
case object C183 extends C
case object C184 extends C
case object C185 extends C
case object C186 extends C
case object C187 extends C
case object C188 extends C
case object C189 extends C
case object C190 extends C
case object C191 extends C
case object C192 extends C
case object C193 extends C
case object C194 extends C
case object C195 extends C
case object C196 extends C
case object C197 extends C
case object C198 extends C
case object C199 extends C
case object C231 extends C
case object C232 extends C
case object C233 extends C
case object C234 extends C
case object C235 extends C
case object C236 extends C
case object C237 extends C
case object C238 extends C
case object C239 extends C
case object C240 extends C
case object C241 extends C
case object C242 extends C
case object C243 extends C
case object C244 extends C
case object C245 extends C
case object C246 extends C
case object C247 extends C
case object C248 extends C
case object C249 extends C
case object C250 extends C
case object C251 extends C
case object C252 extends C
case object C253 extends C
case object C254 extends C
case object C255 extends C
case object C256 extends C
case object C257 extends C
case object C258 extends C
case object C259 extends C
case object C260 extends C
case object C261 extends C
case object C262 extends C
case object C263 extends C
case object C264 extends C
case object C265 extends C
case object C266 extends C
case object C267 extends C
case object C268 extends C
case object C269 extends C
case object C270 extends C
case object C271 extends C
case object C272 extends C
case object C273 extends C
case object C274 extends C
case object C275 extends C
case object C276 extends C
case object C277 extends C
case object C278 extends C
case object C279 extends C
case object C280 extends C
case object C281 extends C
case object C282 extends C
case object C283 extends C
case object C284 extends C
case object C285 extends C
case object C286 extends C
case object C287 extends C
case object C288 extends C
case object C289 extends C
case object C290 extends C
case object C291 extends C
case object C292 extends C
case object C293 extends C
case object C294 extends C
case object C295 extends C
case object C296 extends C
case object C297 extends C
case object C298 extends C
case object C299 extends C
object M {
  def f(c: C): Int = c match {
    case C65 => 65
    case C66 => 66
    case C67 => 67
    case C68 => 68
    case C69 => 69
    case C132 => 133
    case C71 => 71
    case C72 => 72
    case C73 => 73
    case C74 => 74
    case C75 => 75
    case C76 => 76
    case C77 => 77
    case C78 => 78
    case C79 => 79
    case C80 => 80
    case C81 => 81
    case C82 => 82
    case C83 => 83
    case C84 => 84
    case C85 => 85
    case C86 => 86
    case C87 => 87
    case C88 => 88
    case C89 => 89
    case C90 => 90
    case C91 => 91
    case C92 => 92
    case C93 => 93
    case C94 => 94
    case C95 => 95
    case C96 => 96
    case C97 => 97
    case C98 => 98
    case C99 => 99
    case C100 => 100
    case C101 => 101
    case C102 => 102
    case C103 => 103
    case C104 => 104
    case C105 => 105
    case C106 => 106
    case C107 => 107
    case C108 => 108
    case C109 => 109
    case C110 => 110
    case C111 => 111
    case C112 => 112
    case C113 => 113
    case C114 => 114
    case C115 => 115
    case C116 => 116
    case C117 => 117
    case C118 => 118
    case C119 => 119
    case C120 => 120
    case C121 => 121
    case C122 => 122
    case C123 => 123
    case C124 => 124
    case C125 => 125
    case C126 => 126
    case C127 => 127
    case C128 => 128
    case C129 => 129
    case C130 => 130
    case C131 => 131
    case C132 => 132
    case C133 => 133
    case C134 => 134
    case C135 => 135
    case C136 => 136
    case C137 => 137
    case C138 => 138
    case C139 => 139
    case C140 => 140
    case C141 => 141
    case C142 => 142
    case C143 => 143
    case C144 => 144
    case C145 => 145
    case C146 => 146
    case C147 => 147
    case C148 => 148
    case C149 => 149
    case C150 => 150
    case C151 => 151
    case C152 => 152
    case C153 => 153
    case C154 => 154
    case C155 => 155
    case C156 => 156
    case C157 => 157
    case C158 => 158
    case C159 => 159
    case C160 => 160
    case C161 => 161
    case C162 => 162
    case C163 => 163
    case C164 => 164
    case C165 => 165
    case C166 => 166
    case C167 => 167
    case C168 => 168
    case C169 => 169
    case C170 => 170
    case C171 => 171
    case C172 => 172
    case C173 => 173
    case C174 => 174
    case C175 => 175
    case C176 => 176
    case C177 => 177
    case C178 => 178
    case C179 => 179
    case C180 => 180
    case C181 => 181
    case C182 => 182
    case C183 => 183
    case C184 => 184
    case C185 => 185
    case C186 => 186
    case C187 => 187
    case C188 => 188
    case C189 => 189
    case C190 => 190
    case C191 => 191
    case C192 => 192
    case C193 => 193
    case C194 => 194
    case C195 => 195
    case C196 => 196
    case C197 => 197
    case C198 => 198
    case C199 => 199
    case C231 => 231
    case C232 => 232
    case C233 => 233
    case C234 => 234
    case C235 => 235
    case C236 => 236
    case C237 => 237
    case C238 => 238
    case C239 => 239
    case C240 => 240
    case C241 => 241
    case C242 => 242
    case C243 => 243
    case C244 => 244
    case C245 => 245
    case C246 => 246
    case C247 => 247
    case C248 => 248
    case C249 => 249
    case C250 => 250
    case C251 => 251
    case C252 => 252
    case C253 => 253
    case C254 => 254
    case C255 => 255
    case C256 => 256
    case C257 => 257
    case C258 => 258
    case C259 => 259
    case C260 => 260
    case C261 => 261
    case C262 => 262
    case C263 => 263
    case C264 => 264
    case C265 => 265
    case C266 => 266
    case C267 => 267
    case C268 => 268
    case C269 => 269
    case C270 => 270
    case C271 => 271
    case C272 => 272
    case C273 => 273
    case C274 => 274
    case C275 => 275
    case C276 => 276
    case C277 => 277
    case C278 => 278
    case C279 => 279
    case C280 => 280
    case C281 => 281
    case C282 => 282
    case C283 => 283
    case C284 => 284
    case C285 => 285
    case C286 => 286
    case C287 => 287
    case C288 => 288
    case C289 => 289
    case C290 => 290
    case C291 => 291
    case C292 => 292
    case C293 => 293
    case C294 => 294
    case C295 => 295
    case C296 => 296
    case C297 => 297
    case C298 => 298
    case C299 => 299
  }
}

$ dotc abc.scala

-- Warning: abc.scala --------------------------------------------------------------------------------------------------
207 |  def f(c: C): Int = c match {
    |                     ^
    |                     match may not be exhaustive.
    |                     It would fail on the following input: C70
208 |    case C65 => 65
209 |    case C66 => 66
210 |    case C67 => 67
211 |    case C68 => 68
212 |    case C69 => 69
<snipped>
Exception in thread "main" java.lang.StackOverflowError
        at dotty.tools.dotc.core.TypeErasure.eraseResult(TypeErasure.scala:442)
        at dotty.tools.dotc.core.TypeErasure.dotty$tools$dotc$core$TypeErasure$$apply(TypeErasure.scala:367)
        at dotty.tools.dotc.core.TypeErasure.eraseInfo(TypeErasure.scala:424)
        at dotty.tools.dotc.core.TypeErasure$.transformInfo(TypeErasure.scala:178)
        at dotty.tools.dotc.transform.Erasure.transform(Erasure.scala:60)
        at dotty.tools.dotc.core.Denotations$SingleDenotation.current(Denotations.scala:797)
        at dotty.tools.dotc.core.Types$NamedType.computeDenot(Types.scala:1434)
<snipped>

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions