Home | History | Annotate | Download | only in CodeGen

Lines Matching full:trap

2 // RUN: %clang_cc1 -fsanitize-undefined-trap-on-error -fsanitize=alignment,null,object-size,shift,return,signed-integer-overflow,vla-bound,float-cast-overflow,integer-divide-by-zero,bool -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefix=CHECK-TRAP
27 // CHECK-TRAP: @foo
31 // CHECK-TRAP: %[[CHECK0:.*]] = icmp ne {{.*}}* %[[PTR:.*]], null
38 // CHECK-TRAP: %[[I8PTR:.*]] = bitcast i32* %[[PTR]] to i8*
39 // CHECK-TRAP-NEXT: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64(i8* %[[I8PTR]], i1 false)
40 // CHECK-TRAP-NEXT: %[[CHECK1:.*]] = icmp uge i64 %[[SIZE]], 4
41 // CHECK-TRAP-NEXT: %[[CHECK01:.*]] = and i1 %[[CHECK0]], %[[CHECK1]]
47 // CHECK-TRAP: %[[PTRTOINT:.*]] = ptrtoint {{.*}}* %[[PTR]] to i64
48 // CHECK-TRAP-NEXT: %[[MISALIGN:.*]] = and i64 %[[PTRTOINT]], 3
49 // CHECK-TRAP-NEXT: %[[CHECK2:.*]] = icmp eq i64 %[[MISALIGN]], 0
54 // CHECK-TRAP: %[[OK:.*]] = and i1 %[[CHECK01]], %[[CHECK2]]
55 // CHECK-TRAP-NEXT: br i1 %[[OK]], {{.*}}
60 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW:#[0-9]+]]
61 // CHECK-TRAP-NEXT: unreachable
72 // CHECK-TRAP: @bar
77 // CHECK-TRAP: %[[SIZE:.*]] = call i64 @llvm.objectsize.i64
78 // CHECK-TRAP-NEXT: icmp uge i64 %[[SIZE]], 4
84 // CHECK-TRAP: %[[PTRINT:.*]] = ptrtoint
85 // CHECK-TRAP-NEXT: %[[MISALIGN:.*]] = and i64 %[[PTRINT]], 3
86 // CHECK-TRAP-NEXT: icmp eq i64 %[[MISALIGN]], 0
91 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
92 // CHECK-TRAP-NEXT: unreachable
105 // CHECK-TRAP: @lsh_overflow
110 // CHECK-TRAP: %[[INBOUNDS:.*]] = icmp ule i32 %[[RHS:.*]], 31
111 // CHECK-TRAP-NEXT: br i1 %[[INBOUNDS]], label %[[CHECKBB:.*]], label %[[CONTBB:.*]]
118 // CHECK-TRAP: %[[SHIFTED_OUT_WIDTH:.*]] = sub nuw nsw i32 31, %[[RHS]]
119 // CHECK-TRAP-NEXT: %[[SHIFTED_OUT:.*]] = lshr i32 %[[LHS:.*]], %[[SHIFTED_OUT_WIDTH]]
120 // CHECK-TRAP-NEXT: %[[NO_OVERFLOW:.*]] = icmp eq i32 %[[SHIFTED_OUT]], 0
121 // CHECK-TRAP-NEXT: br label %[[CONTBB]]
126 // CHECK-TRAP: %[[VALID:.*]] = phi i1 [ %[[INBOUNDS]], {{.*}} ], [ %[[NO_OVERFLOW]], %[[CHECKBB]] ]
127 // CHECK-TRAP-NEXT: br i1 %[[VALID]]
135 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
136 // CHECK-TRAP: unreachable
137 // CHECK-TRAP-NOT: call void @llvm.trap()
142 // CHECK-TRAP: %[[RET:.*]] = shl i32 %[[LHS]], %[[RHS]]
143 // CHECK-TRAP-NEXT: ret i32 %[[RET]]
149 // CHECK-TRAP: @rsh_inbounds
154 // CHECK-TRAP: %[[INBOUNDS:.*]] = icmp ule i32 %[[RHS:.*]], 31
155 // CHECK-TRAP: br i1 %[[INBOUNDS]]
161 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
162 // CHECK-TRAP-NEXT: unreachable
167 // CHECK-TRAP: %[[RET:.*]] = ashr i32 %[[LHS]], %[[RHS]]
168 // CHECK-TRAP-NEXT: ret i32 %[[RET]]
174 // CHECK-TRAP: @load
178 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
179 // CHECK-TRAP-NEXT: unreachable
185 // CHECK-TRAP: @store
189 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
190 // CHECK-TRAP-NEXT: unreachable
198 // CHECK-TRAP: @member_access
202 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
203 // CHECK-TRAP-NEXT: unreachable
209 // CHECK-TRAP: @signed_overflow
215 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
216 // CHECK-TRAP-NEXT: unreachable
222 // CHECK-TRAP: @no_return
231 // CHECK-TRAP-NOT: call
232 // CHECK-TRAP-NOT: unreachable
233 // CHECK-TRAP: ret i32
253 // CHECK-TRAP: @int_float_overflow
259 // CHECK-TRAP: %[[INBOUNDS:.*]] = icmp ule i128 %{{.*}}, -20282409603651670423947251286016
260 // CHECK-TRAP-NEXT: br i1 %[[INBOUNDS]]
262 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
263 // CHECK-TRAP-NEXT: unreachable
268 // CHECK-TRAP: @int_fp16_overflow
275 // CHECK-TRAP: %[[GE:.*]] = icmp sge i32 %{{.*}}, -65504
276 // CHECK-TRAP: %[[LE:.*]] = icmp sle i32 %{{.*}}, 65504
277 // CHECK-TRAP: %[[INBOUNDS:.*]] = and i1 %[[GE]], %[[LE]]
278 // CHECK-TRAP-NEXT: br i1 %[[INBOUNDS]]
280 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
281 // CHECK-TRAP-NEXT: unreachable
286 // CHECK-TRAP: @float_int_overflow
293 // CHECK-TRAP: %[[GE:.*]] = fcmp oge float %[[F:.*]], 0xC1E0000000000000
294 // CHECK-TRAP: %[[LE:.*]] = fcmp ole float %[[F]], 0x41DFFFFFE0000000
295 // CHECK-TRAP: %[[INBOUNDS:.*]] = and i1 %[[GE]], %[[LE]]
296 // CHECK-TRAP-NEXT: br i1 %[[INBOUNDS]]
298 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
299 // CHECK-TRAP-NEXT: unreachable
304 // CHECK-TRAP: @float_uint_overflow
311 // CHECK-TRAP: %[[GE:.*]] = fcmp oge float %[[F:.*]], 0.{{0*}}e+00
312 // CHECK-TRAP: %[[LE:.*]] = fcmp ole float %[[F]], 0x41EFFFFFE0000000
313 // CHECK-TRAP: %[[INBOUNDS:.*]] = and i1 %[[GE]], %[[LE]]
314 // CHECK-TRAP-NEXT: br i1 %[[INBOUNDS]]
316 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
317 // CHECK-TRAP-NEXT: unreachable
322 // CHECK-TRAP: @fp16_char_overflow
329 // CHECK-TRAP: %[[GE:.*]] = fcmp oge float %[[F:.*]], -1.28{{0*}}e+02
330 // CHECK-TRAP: %[[LE:.*]] = fcmp ole float %[[F]], 1.27{{0*}}e+02
331 // CHECK-TRAP: %[[INBOUNDS:.*]] = and i1 %[[GE]], %[[LE]]
332 // CHECK-TRAP-NEXT: br i1 %[[INBOUNDS]]
334 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
335 // CHECK-TRAP-NEXT: unreachable
340 // CHECK-TRAP: @float_float_overflow
347 // CHECK-TRAP: %[[GE:.*]] = fcmp oge double %[[F:.*]], 0xC7EFFFFFE0000000
348 // CHECK-TRAP: %[[LE:.*]] = fcmp ole double %[[F]], 0x47EFFFFFE0000000
349 // CHECK-TRAP: %[[INBOUNDS:.*]] = and i1 %[[GE]], %[[LE]]
350 // CHECK-TRAP-NEXT: br i1 %[[INBOUNDS]]
352 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
353 // CHECK-TRAP-NEXT: unreachable
362 // CHECK-TRAP: %[[ZERO:.*]] = icmp ne i32 %[[B:.*]], 0
372 // CHECK-TRAP: %[[AOK:.*]] = icmp ne i32 %[[A:.*]], -2147483648
373 // CHECK-TRAP-NEXT: %[[BOK:.*]] = icmp ne i32 %[[B]], -1
374 // CHECK-TRAP-NEXT: %[[OVER:.*]] = or i1 %[[AOK]], %[[BOK]]
381 // CHECK-TRAP: %[[OK:.*]] = and i1 %[[ZERO]], %[[OVER]]
382 // CHECK-TRAP: br i1 %[[OK]]
384 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
385 // CHECK-TRAP: unreachable
390 // CHECK-TRAP: }
399 // CHECK-TRAP: %[[OK:.*]] = icmp ule i8 {{.*}}, 1
400 // CHECK-TRAP: br i1 %[[OK]]
402 // CHECK-TRAP: call void @llvm.trap() [[NR_NUW]]
403 // CHECK-TRAP: unreachable
409 // CHECK-TRAP: attributes [[NR_NUW]] = { noreturn nounwind }