
This adds - The parsing of `trivially_relocatable_if_eligible`, `replaceable_if_eligible` keywords - `__builtin_trivially_relocate`, implemented in terms of memmove. In the future this should - Add the appropriate start/end lifetime markers that llvm does not have (`start_lifetime_as`) - Add support for ptrauth when that's upstreamed - the `__builtin_is_cpp_trivially_relocatable` and `__builtin_is_replaceable` traits Fixes #127609
43 lines
2.8 KiB
C++
43 lines
2.8 KiB
C++
// RUN: %clang_cc1 -std=c++03 -verify=expected,cxx11,cxx03 -fsyntax-only %s
|
|
// RUN: %clang_cc1 -std=c++11 -verify=expected,cxx11 -fsyntax-only %s
|
|
// RUN: %clang_cc1 -std=c++2c -verify=expected -fsyntax-only %s
|
|
|
|
|
|
class A trivially_relocatable_if_eligible {};
|
|
// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
class E final trivially_relocatable_if_eligible {};
|
|
// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
|
|
class G trivially_relocatable_if_eligible final{};
|
|
// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx03-warning@-2 {{'final' keyword is a C++11 extension}}
|
|
class I trivially_relocatable_if_eligible trivially_relocatable_if_eligible final {};
|
|
// expected-error@-1 {{class already marked 'trivially_relocatable_if_eligible'}}
|
|
// cxx11-warning@-2 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx03-warning@-3 {{'final' keyword is a C++11 extension}}
|
|
class trivially_relocatable_if_eligible trivially_relocatable_if_eligible {};
|
|
// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
class J replaceable_if_eligible{};
|
|
// cxx11-warning@-1 {{'replaceable_if_eligible' keyword is a C++2c extension}}
|
|
class K replaceable_if_eligible replaceable_if_eligible {};
|
|
// expected-error@-1 {{class already marked 'replaceable_if_eligible'}}
|
|
// cxx11-warning@-2 {{'replaceable_if_eligible' keyword is a C++2c extension}}
|
|
class replaceable_if_eligible replaceable_if_eligible {};
|
|
// cxx11-warning@-1 {{'replaceable_if_eligible' keyword is a C++2c extension}}
|
|
class L replaceable_if_eligible trivially_relocatable_if_eligible final {};
|
|
// cxx11-warning@-1 {{'replaceable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx11-warning@-2 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx03-warning@-3 {{'final' keyword is a C++11 extension}}
|
|
class M replaceable_if_eligible final trivially_relocatable_if_eligible {};
|
|
// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx11-warning@-2 {{'replaceable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx03-warning@-3 {{'final' keyword is a C++11 extension}}
|
|
class N final trivially_relocatable_if_eligible replaceable_if_eligible {};
|
|
// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx11-warning@-2 {{'replaceable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx03-warning@-3 {{'final' keyword is a C++11 extension}}
|
|
class O trivially_relocatable_if_eligible replaceable_if_eligible final {};
|
|
// cxx11-warning@-1 {{'trivially_relocatable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx11-warning@-2 {{'replaceable_if_eligible' keyword is a C++2c extension}}
|
|
// cxx03-warning@-3 {{'final' keyword is a C++11 extension}}
|