MaskRay added a comment.

It will take some time to fix all tests properly. Let's have a guideline how to 
fix them properly. I tried fixing some using several patterns in the last 
revision. I didn't fix all, because it would likely lead to an unsatisfactory 
result and I would spend more time :)

A construct which causes an error with C++17 onwards
----------------------------------------------------

I keep the existing `RUN:` lines and use something like

  #if __cplusplus < 201703L
  void* operator new[](std::size_t) throw(std::bad_alloc); 
  #endif

it the construct appears tested elsewhere or

  register int ro; // expected-error {{illegal storage class on file-scoped 
variable}}
  #if __cplusplus >= 201703L
  // expected-error@-2 {{ISO C++17 does not allow 'register' storage class 
specifier}}
  #elif __cplusplus >= 201103L
  // expected-warning@-4 {{'register' storage class specifier is deprecated}}
  #endif

if the test file appears the proper place to test the construct.

Pre-C++17 and C++17 have different results
------------------------------------------

I use something like

  // RUN: %clang_cc1 %s -fsyntax-only -verify=expected,precxx17 -std=c++14 
-fdata-sections -fcolor-diagnostics
  // RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++17 -fdata-sections 
-fcolor-diagnostics
  
  ...
    TypedefAligned4 TA8c = TA8a + TA8b;  // expected-warning {{passing 4-byte 
aligned argument to 8-byte aligned parameter 'this' of 'operator+' may result 
in an unaligned pointer access}}
                                         // expected-warning@-1 {{passing 
4-byte aligned argument to 8-byte aligned parameter 1 of 'operator+' may result 
in an unaligned pointer access}}
                                         // precxx17-warning@-2 {{passing 
4-byte aligned argument to 8-byte aligned parameter 'this' of 'StructAligned8' 
may result in an unaligned pointer access}}

Since every RUN line uses -std=.
Pros: using `-verify` avoids `#if` directives which make the result look better.
Cons: when we upgrade to C++20, 23, ..., the tests will become less relevant.

Discussion
----------

Do we want to prefer `#if` in all cases? They work well with `-verify` tests 
but not so well with `FileCheck` since `FileCheck` does not ignore preprocessor 
skipped ranges.
Do all `CodeGenCXX` tests have to be fixed?



================
Comment at: clang/test/AST/ast-dump-undeduced-expr.cpp:1
-// RUN: not %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck 
%s
+// RUN: not %clang_cc1 -std=c++14 -triple x86_64-unknown-unknown -ast-dump %s 
| FileCheck %s
 
----------------
aaron.ballman wrote:
> What from this test requires C++14?
The C++17 diagnostics uses `static inline constexpr` while pre-C++17 uses 
`static constexpr`. Used a regex instead.


================
Comment at: clang/test/AST/sourceranges.cpp:1-2
-// RUN: %clang_cc1 -triple i686-mingw32 -ast-dump %s | FileCheck %s
+// RUN: %clang_cc1 -std=c++14 -triple i686-mingw32 -ast-dump %s | FileCheck %s
 // RUN: %clang_cc1 -triple i686-mingw32 -std=c++1z -ast-dump %s | FileCheck %s 
-check-prefix=CHECK-1Z
 
----------------
aaron.ballman wrote:
> I assume this change is because we're testing c++17 on the next RUN line and 
> you want to be sure we still get the old test coverage?
> 
> The trouble is, when we bump from C++17 to C++20, we'll lose the test 
> coverage for the latest standard.
> 
> (Not your problem per se, but I continue to think we have a lit deficiency 
> where we need some facilities to say "run this test in C++N and later", "run 
> this test in C89 through CN", or "run this test in all C++ language modes", 
> etc.)
`FileCheck` does not ignore preprocessor skipped ranges, so it is very 
difficult to work with both C++14/C++17 defaults, if our intention is to not 
touch such tests in the default changing patch.

I think the best strategy is to do another pass to clean up the tests after the 
transition, not trying to address everything in this patch.


================
Comment at: clang/test/Analysis/blocks.m:2
 // RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 
-analyzer-checker=core -fblocks -verify -Wno-strict-prototypes %s
-// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 
-analyzer-checker=core -fblocks -verify -x objective-c++ %s
+// RUN: %clang_analyze_cc1 -triple x86_64-apple-darwin10 
-analyzer-checker=core -fblocks -verify -x objective-c++ -std=c++14 %s
 
----------------
aaron.ballman wrote:
> What from this test is invalid in C++17?
Added `__attribute__((__nothrow__))` in C++17 mode.


================
Comment at: clang/test/CXX/except/except.spec/p2-dynamic-types.cpp:1
-// RUN: %clang_cc1 -fexceptions -fcxx-exceptions -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fexceptions -fcxx-exceptions -fsyntax-only -verify 
-std=c++14 %s
 
----------------
aaron.ballman wrote:
> Why not pass `-Wno-dynamic-exception-spec` instead of limiting the test (we 
> support dynamic exception specifications in newer language modes and it would 
> be good to not lose that test coverage there).
TIL `-Wno-dynamic-exception-spec`. Adopted.


================
Comment at: clang/test/CXX/except/except.spec/p9-dynamic.cpp:1
-// RUN: %clang_cc1 -no-opaque-pointers %s -triple=x86_64-apple-darwin10 
-emit-llvm -o - -fcxx-exceptions -fexceptions | FileCheck %s 
--check-prefixes=CHECK,CHECK-PRE17
+// RUN: %clang_cc1 -std=c++14 -no-opaque-pointers %s 
-triple=x86_64-apple-darwin10 -emit-llvm -o - -fcxx-exceptions -fexceptions | 
FileCheck %s --check-prefixes=CHECK,CHECK-PRE17
 // RUN: %clang_cc1 -no-opaque-pointers %s -triple=x86_64-apple-darwin10 
-std=c++17 -Wno-dynamic-exception-spec -emit-llvm -o - -fcxx-exceptions 
-fexceptions | FileCheck %s --check-prefixes=CHECK,CHECK-17
----------------
aaron.ballman wrote:
> Same question here as above
The check prefixes assume that this is for C++14.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D131464

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

Reply via email to