@@ -144,18 +144,100 @@ impl<'b, 'a, 'tcx:'b> ConstPropagator<'b, 'a, 'tcx> {
144
144
} ;
145
145
let r = match f ( self ) {
146
146
Ok ( val) => Some ( val) ,
147
- Err ( err) => {
148
- match err. kind {
147
+ Err ( error) => {
148
+ let ( stacktrace, span) = self . ecx . generate_stacktrace ( None ) ;
149
+ let diagnostic = ConstEvalErr { span, error, stacktrace } ;
150
+ use rustc:: mir:: interpret:: EvalErrorKind :: * ;
151
+ match diagnostic. error . kind {
149
152
// don't report these, they make no sense in a const prop context
150
- EvalErrorKind :: MachineError ( _) => { } ,
151
- _ => {
152
- let ( frames, span) = self . ecx . generate_stacktrace ( None ) ;
153
- let err = ConstEvalErr {
154
- span,
155
- error : err,
156
- stacktrace : frames,
157
- } ;
158
- err. report_as_lint (
153
+ | MachineError ( _)
154
+ // at runtime these transformations might make sense
155
+ // FIXME: figure out the rules and start linting
156
+ | FunctionPointerTyMismatch ( ..)
157
+ // fine at runtime, might be a register address or sth
158
+ | ReadBytesAsPointer
159
+ // fine at runtime
160
+ | ReadForeignStatic
161
+ | Unimplemented ( _)
162
+ // don't report const evaluator limits
163
+ | StackFrameLimitReached
164
+ | NoMirFor ( ..)
165
+ | InlineAsm
166
+ => { } ,
167
+
168
+ | InvalidMemoryAccess
169
+ | DanglingPointerDeref
170
+ | DoubleFree
171
+ | InvalidFunctionPointer
172
+ | InvalidBool
173
+ | InvalidDiscriminant
174
+ | PointerOutOfBounds { .. }
175
+ | InvalidNullPointerUsage
176
+ | MemoryLockViolation { .. }
177
+ | MemoryAcquireConflict { .. }
178
+ | ValidationFailure ( ..)
179
+ | InvalidMemoryLockRelease { .. }
180
+ | DeallocatedLockedMemory { .. }
181
+ | InvalidPointerMath
182
+ | ReadUndefBytes
183
+ | DeadLocal
184
+ | InvalidBoolOp ( _)
185
+ | DerefFunctionPointer
186
+ | ExecuteMemory
187
+ | Intrinsic ( ..)
188
+ | InvalidChar ( ..)
189
+ | AbiViolation ( _)
190
+ | AlignmentCheckFailed { ..}
191
+ | CalledClosureAsFunction
192
+ | VtableForArgumentlessMethod
193
+ | ModifiedConstantMemory
194
+ | AssumptionNotHeld
195
+ // FIXME: should probably be removed and turned into a bug! call
196
+ | TypeNotPrimitive ( _)
197
+ | ReallocatedWrongMemoryKind ( _, _)
198
+ | DeallocatedWrongMemoryKind ( _, _)
199
+ | ReallocateNonBasePtr
200
+ | DeallocateNonBasePtr
201
+ | IncorrectAllocationInformation ( ..)
202
+ | UnterminatedCString ( _)
203
+ | HeapAllocZeroBytes
204
+ | HeapAllocNonPowerOfTwoAlignment ( _)
205
+ | Unreachable
206
+ | ReadFromReturnPointer
207
+ | GeneratorResumedAfterReturn
208
+ | GeneratorResumedAfterPanic
209
+ | ReferencedConstant ( _)
210
+ | InfiniteLoop
211
+ => {
212
+ // FIXME: report UB here
213
+ } ,
214
+
215
+ | OutOfTls
216
+ | TlsOutOfBounds
217
+ | PathNotFound ( _)
218
+ => bug ! ( "these should not be in rustc, but in miri's machine errors" ) ,
219
+
220
+ | Layout ( _)
221
+ | UnimplementedTraitSelection
222
+ | TypeckError
223
+ | TooGeneric
224
+ | CheckMatchError
225
+ // these are just noise
226
+ => { } ,
227
+
228
+ // non deterministic
229
+ | ReadPointerAsBytes
230
+ // FIXME: implement
231
+ => { } ,
232
+
233
+ | Panic
234
+ | BoundsCheck { ..}
235
+ | Overflow ( _)
236
+ | OverflowNeg
237
+ | DivisionByZero
238
+ | RemainderByZero
239
+ => {
240
+ diagnostic. report_as_lint (
159
241
self . ecx . tcx ,
160
242
"this expression will panic at runtime" ,
161
243
lint_root,
0 commit comments