llvm-project/clang/test/Parser/gcc-__final-compatibility.cpp
Andrey Bokhanko 276055bb2f [GCC] Support for __final specifier
As reported in bug 28473, GCC supports "final" functionality in pre-C++11 code using the __final keyword. Clang currently supports the "final" keyword in accordance with the C++11 specification, however it ALSO supports it in pre-C++11 mode, with a warning.

This patch adds the "__final" keyword for compatibility with GCC in GCC Keywords mode (so it is enabled with existing flags), and issues a warning on its usage (suggesting switching to the C++11 keyword). This patch also adds a regression test for the functionality described. I believe this patch has minimal impact, as it simply adds a new keyword for existing behavior.

This has been validated with check-clang to avoid regressions. Patch is created in reference to revisions 276665.

Patch by Erich Keane.

Differential Revision: https://reviews.llvm.org/D22919

llvm-svn: 277134
2016-07-29 10:42:48 +00:00

10 lines
387 B
C++

// RUN: %clang_cc1 -std=c++98 -fgnu-keywords -fsyntax-only -verify %s
// RUN: %clang_cc1 -std=c++11 -fgnu-keywords -fsyntax-only -verify %s
struct B {
virtual void g();
};
struct D __final : B { // expected-warning {{__final is a GNU extension, consider using C++11 final}}
virtual void g() __final; // expected-warning {{__final is a GNU extension, consider using C++11 final}}
};