Quuxplusone added a comment.

Conspicuously missing: tests for `decltype(auto)` return types, tests for 
`co_return`.

Personally I'd rather see these new p2266-related tests go in a separate test 
file, not appended to the existing file, so as to keep each test file 
relatively simpler and shorter. (But I don't know that those-in-charge would 
agree.)



================
Comment at: clang/test/CXX/class/class.init/class.copy.elision/p3.cpp:5
+// RUN: %clang_cc1 -std=c++14 -fsyntax-only -fcxx-exceptions 
-verify=expected,cxx11_14_17_20,cxx11_14_17 %s
+// RUN: %clang_cc1 -std=c++11 -fsyntax-only -fcxx-exceptions 
-verify=expected,cxx11_14_17_20,cxx11_14_17 %s
 
----------------
These labels seem to be getting unwieldy. I propose that you rename 
`cxx11_14_17` to `cxx17` and `cxx11_14_17_20` to `cxx17_20`.

(There are no cases where C++11, '14, '17's behavior differ.)

So then we'll have `cxx17`, `cxx17_20`, `cxx20`, `cxx20_2b`, and `cxx2b`.
IMHO it might even be nice to eliminate the overlapping labels; just, when a 
message is expected in two out of three modes, write two expectations.
```
  B1(B1 &&) = delete;
    // cxx20-note@-1 {{'B1' has been explicitly marked deleted here}}
    // cxx2b-note@-2 {{'B1' has been explicitly marked deleted here}}
```
What do you think? (This could also be severed into its own earlier commit.)


================
Comment at: clang/test/CXX/class/class.init/class.copy.elision/p3.cpp:325
+  MoveOnly&& rr = test_3a(static_cast<MoveOnly&&>(w)); // cxx11_14_17_20-note 
{{in instantiation of function template specialization}}
+}
+
----------------
FWIW here I would prefer
```
template MoveOnly& test_3a<MoveOnly&>(MoveOnly&);
template MoveOnly&& test_3a<MoveOnly>(MoveOnly&&);
```
with an expected error on the second line. The parameter-ness of `w` seems like 
a red herring in your version.


================
Comment at: clang/test/CXX/class/class.init/class.copy.elision/p3.cpp:335
+  try {
+    throw x; // cxx11_14_17_20-error {{call to implicitly-deleted copy 
constructor}}
+  } catch(...) {}
----------------
I believe this is incorrect; `throw x` here shouldn't implicit-move because 
`x`'s scope exceeds the nearest enclosing try-block.


================
Comment at: clang/test/CXX/special/class.copy/p33-0x.cpp:3
+// RUN: %clang_cc1 -fcxx-exceptions -fexceptions -std=c++11 -fsyntax-only 
-verify=expected,cxx11 %s
+// cxx2b-no-diagnostics
 class X {
----------------
Could you please ensure that this test is updated to be tested in //all// 
modes? My interpretation of the old line 1 is it's been locked to run only in 
'11 mode (not '14 or '17 or '20), which is just bizarre. There's nothing 
'11-specific about this file that I can see. (And again that change can be 
severed from the rest of this PR and landed earlier, I hope.)


================
Comment at: clang/test/CXX/special/class.copy/p33-0x.cpp:41
         throw x2; // okay
-      throw x; // expected-error{{call to deleted constructor of 'PR10142::X'}}
+      throw x; // cxx11-error{{call to deleted constructor of 'PR10142::X'}}
     } catch (...) {
----------------
I believe this is incorrect; `throw x` here shouldn't implicit-move (not even 
in C++2b) because `x`'s scope exceeds the nearest enclosing try-block.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99005/new/

https://reviews.llvm.org/D99005

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to