GkvJwa wrote:

> @GkvJwa My point is that the `ll` could already be considered ill formed - as 
> explained in `Now what actually causes the issue`. But I agree that not only 
> the clang frontend but also LLC should reject this IMO. Besides that your 
> test does actually include the clang frontend here.

Okay, so if we find a class object in llvm.eh.exceptionCode, is it feasible to 
directly refuse compilation?

```
catch.dispatch:                                   ; preds = %invoke.cont, %entry
  %2 = catchswitch within none [label %__except] unwind to caller

__except:                                         ; preds = %catch.dispatch
  %3 = catchpad within %2 [ptr null]
  catchret from %3 to label %__except2

__except2:                                        ; preds = %__except
  %4 = call i32 @llvm.eh.exceptioncode(token %3)
  store i32 %4, ptr %__exception_code, align 4
  call void @"?bb@aa@@SA?AV1@XZ"(ptr dead_on_unwind writable sret(%class.aa) 
align 1 %agg.tmp.ensured)
  invoke void @llvm.seh.scope.begin()
          to label %invoke.cont3 unwind label %ehcleanup

invoke.cont3:                                     ; preds = %__except2
  invoke void @llvm.seh.try.end()
          to label %invoke.cont4 unwind label %ehcleanup

invoke.cont4:                                     ; preds = %invoke.cont3
  call void @"??1aa@@QEAA@XZ"(ptr noundef nonnull align 1 dereferenceable(1) 
%agg.tmp.ensured) #5
  br label %__try.cont

__try.cont:                                       ; preds = %invoke.cont4, 
%invoke.cont1
  ret void

invoke.cont1:                                     ; preds = %invoke.cont
  br label %__try.cont

ehcleanup:                                        ; preds = %invoke.cont3, 
%__except2
  %5 = cleanuppad within none []
  call void @"??1aa@@QEAA@XZ"(ptr noundef nonnull align 1 dereferenceable(1) 
%agg.tmp.ensured) #5 [ "funclet"(token %5) ]
  cleanupret from %5 unwind to caller
}

__except2:                                        ; preds = %__except
  %4 = call i32 @llvm.eh.exceptioncode(token %3)
  store i32 %4, ptr %__exception_code, align 4
  call void @"?bb@aa@@SA?AV1@XZ"(ptr dead_on_unwind writable sret(%class.aa) 
align 1 %agg.tmp.ensured)
  invoke void @llvm.seh.scope.begin()
// has callinst
```

https://github.com/llvm/llvm-project/pull/172287
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to