Mercurial > hg > CbC > CbC_llvm
diff clang/test/FixIt/fixit-c++2a.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/FixIt/fixit-c++2a.cpp Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,49 @@ +// RUN: %clang_cc1 -verify -std=c++2a -pedantic-errors %s +// RUN: cp %s %t +// RUN: not %clang_cc1 -x c++ -std=c++2a -fixit %t +// RUN: %clang_cc1 -Wall -pedantic-errors -x c++ -std=c++2a %t +// RUN: cat %t | FileCheck %s + +/* This is a test of the various code modification hints that only + apply in C++2a. */ +template<typename ...T> void init_capture_pack(T ...a) { + [x... = a]{}; // expected-error {{must appear before the name}} + [x = a...]{}; // expected-error {{must appear before the name}} + [...&x = a]{}; // expected-error {{must appear before the name}} + [...a]{}; // expected-error {{must appear after the name}} + [&...a]{}; // expected-error {{must appear after the name}} + [...&a]{}; // expected-error {{must appear after the name}} +} + +namespace constinit_mismatch { + extern thread_local constinit int a; // expected-note {{declared constinit here}} + thread_local int a = 123; // expected-error {{'constinit' specifier missing on initializing declaration of 'a'}} + // CHECK: {{^}} constinit thread_local int a = 123; + + int b = 123; // expected-note {{add the 'constinit' specifier}} + extern constinit int b; // expected-error {{'constinit' specifier added after initialization of variable}} + // CHECK: {{^}} extern int b; + + template<typename> struct X { + template<int> static constinit int n; // expected-note {{constinit}} + }; + template<typename T> template<int N> + int X<T>::n = 123; // expected-error {{missing}} + // CHECK: {{^}} constinit int X<T>::n = 123; + +#define ABSL_CONST_INIT [[clang::require_constant_initialization]] + extern constinit int c; // expected-note {{constinit}} + int c; // expected-error {{missing}} + // CHECK: {{^}} ABSL_CONST_INIT int c; + +#define MY_CONST_INIT constinit + extern constinit int d; // expected-note {{constinit}} + int d; // expected-error {{missing}} + // CHECK: {{^}} MY_CONST_INIT int d; +#undef MY_CONST_INIT + + extern constinit int e; // expected-note {{constinit}} + int e; // expected-error {{missing}} + // CHECK: {{^}} ABSL_CONST_INIT int e; +#undef ABSL_CONST_INIT +}