[clang] [clang] Add test for CWG1807 (PR #77637)

Vlad Serebrennikov via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 10 09:51:01 PST 2024


Endilll wrote:

Our C++ DR test suite has little codegen tests (around 3 or 4, depending on how you count). This rather simple DR about order of destruction of stack unwinding aims to establish a precedent for how such test should be written. Specific points I'd like to highlight:
1. Use of `llvm-cxxfilt`. This improves readability, but is rarely used in Clang and LLVM test suites. On this note, I don't really understand why `-n` is important, but it's present in most of the usages of `llvm-cxxfilt`.
2. Hard-coding register names. It doesn't feel good to hard-code them, but again helps readability. I'll leave a rewrite of this test without hard-coded register names. It should be noted that in this particular case names have been stable for 12 years [since 3.0](https://godbolt.org/z/jGW5T5fvx).
3. Richard has left 25 TODOs for codegen tests while working on DRs 0 through 700. I hope those are just TODOs, and not an indication that there are fundamental problems with this kind of tests. CC @zygoloid 

Test without register names hard-coded is going to look along those lines:
```
// CHECK:              invoke void @dr1807::S::S(){{.+}}
// CHECK-NEXT:         {{.+}} unwind label %[[LPAD:[a-z]+]]

// CHECK-LABEL:      [[LPAD]]:
// CHECK:              br {{.+}}, label {{.+}}, label %[[ARRAYDESTROY_BODY:[a-z.]+]]

// CHECK-LABEL:      [[ARRAYDESTROY_BODY]]:
// CHECK:              %[[ARRAYDESTROY_ELEMENT:[a-z.]+]] = getelementptr {{.+}}, i64 -1
// CXX98-NEXT:         invoke void @dr1807::S::~S(){{.*}}%[[ARRAYDESTROY_ELEMENT]]
// SINCE-CXX11-NEXT:   call void @dr1807::S::~S(){{.*}}%[[ARRAYDESTROY_ELEMENT]]
```

https://github.com/llvm/llvm-project/pull/77637


More information about the cfe-commits mailing list