invoke.ll 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. ; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s
  2. ; PR1042
  3. define i32 @foo() {
  4. ; CHECK: The unwind destination does not have a landingpad instruction
  5. %A = invoke i32 @foo( )
  6. to label %L unwind label %L ; <i32> [#uses=1]
  7. L: ; preds = %0, %0
  8. ret i32 %A
  9. }
  10. ; PR1042
  11. define i32 @bar() {
  12. br i1 false, label %L1, label %L2
  13. L1: ; preds = %0
  14. %A = invoke i32 @bar( )
  15. to label %L unwind label %L ; <i32> [#uses=1]
  16. L2: ; preds = %0
  17. br label %L
  18. L: ; preds = %L2, %L1, %L1
  19. ; CHECK: The unwind destination does not have a landingpad instruction
  20. ret i32 %A
  21. }
  22. declare i32 @__gxx_personality_v0(...)
  23. declare void @llvm.donothing()
  24. declare void @llvm.trap()
  25. declare i8 @llvm.expect.i8(i8,i8)
  26. declare i32 @fn(i8 (i8, i8)*)
  27. define void @f1() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
  28. entry:
  29. ; OK
  30. invoke void @llvm.donothing()
  31. to label %conta unwind label %contb
  32. conta:
  33. ret void
  34. contb:
  35. %0 = landingpad { i8*, i32 }
  36. filter [0 x i8*] zeroinitializer
  37. ret void
  38. }
  39. define i8 @f2() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
  40. entry:
  41. ; CHECK: Cannot invoke an intrinsinc other than donothing or patchpoint
  42. invoke void @llvm.trap()
  43. to label %cont unwind label %lpad
  44. cont:
  45. ret i8 3
  46. lpad:
  47. %0 = landingpad { i8*, i32 }
  48. filter [0 x i8*] zeroinitializer
  49. ret i8 2
  50. }
  51. define i32 @f3() {
  52. entry:
  53. ; CHECK: Cannot take the address of an intrinsic
  54. %call = call i32 @fn(i8 (i8, i8)* @llvm.expect.i8)
  55. ret i32 %call
  56. }
  57. define void @f4() personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
  58. entry:
  59. invoke void @llvm.donothing()
  60. to label %cont unwind label %cont
  61. cont:
  62. ; CHECK: Block containing LandingPadInst must be jumped to only by the unwind edge of an invoke.
  63. %0 = landingpad { i8*, i32 }
  64. filter [0 x i8*] zeroinitializer
  65. ret void
  66. }