[clang] Enable C++11-style attributes in all language modes
This also ignores and deprecates the `-fdouble-square-bracket-attributes` command line flag, which seems to not be used anywhere. At least a code search exclusively found mentions of it in documentation: https://sourcegraph.com/search?q=context:global+-fdouble-square-bracket-attributes+-file:clang/*+-file:test/Sema/*+-file:test/Parser/*+-file:test/AST/*+-file:test/Preprocessor/*+-file:test/Misc/*+archived:yes&patternType=standard&sm=0&groupBy=repo
RFC: https://discourse.llvm.org/t/rfc-enable-c-11-c2x-attributes-in-all-standard-modes-as-an-extension-and-remove-fdouble-square-bracket-attributes
This enables `[[]]` attributes in all C and C++ language modes without warning by default. `-Wc++-extensions` does warn. GCC has enabled this extension in all C modes since GCC 10.
Reviewed By: aaron.ballman, MaskRay
Spies: #clang-vendors, beanz, JDevlieghere, Michael137, MaskRay, sstefan1, jplehr, cfe-commits, lldb-commits, dmgreen, jdoerfert, wenlei, wlei
Differential Revision: https://reviews.llvm.org/D151683
2023-07-22 09:33:55 -07:00
// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -fsyntax-only -verify %s
2018-02-24 17:16:42 +00:00
2022-02-03 16:39:21 -05:00
[ [ clang : : availability ( macosx , introduced = 10.4 , deprecated = 10.2 ) ] ] void f0 ( void ) ; // expected-warning{{feature cannot be deprecated in macOS version 10.2 before it was introduced in version 10.4; attribute ignored}}
[ [ clang : : availability ( ios , obsoleted = 2.1 , deprecated = 3.0 ) ] ] void f1 ( void ) ; // expected-warning{{feature cannot be obsoleted in iOS version 2.1 before it was deprecated in version 3.0; attribute ignored}}
[ [ clang : : availability ( ios , introduced = 2.1 , deprecated = 2.1 ) ] ] void f2 ( void ) ;
2018-02-24 17:16:42 +00:00
2021-07-01 12:39:17 -04:00
[ [ clang : : availability ( macosx , introduced = 8.0 , deprecated = 9.0 , message = " use CTFontCopyFullName " ) ] ]
2018-02-24 17:16:42 +00:00
extern void
2021-07-01 12:39:17 -04:00
ATSFontGetName ( const char * oName ) ; // expected-note {{'ATSFontGetName' has been explicitly marked deprecated here}}
2018-02-24 17:16:42 +00:00
2022-02-03 16:39:21 -05:00
void test_10095131 ( void ) {
2018-02-24 17:16:42 +00:00
ATSFontGetName ( " Hello " ) ; // expected-warning {{'ATSFontGetName' is deprecated: first deprecated in macOS 9.0 - use CTFontCopyFullName}}
}
enum
[ [ clang : : availability ( macos , unavailable ) ] ]
{
NSDataWritingFileProtectionWriteOnly = 0x30000000 ,
NSDataWritingFileProtectionCompleteUntilUserAuthentication = 0x40000000 ,
} ;
extern int x [ [ clang : : availability ( macosx , introduced = 10.5 ) ] ] ;
extern int x ;
int i [ [ clang : : availability ( this , should = 1.0 ) ] ] ; / / expected - error { { ' should ' is not an availability stage ; use ' introduced ' , ' deprecated ' , or ' obsoleted ' } } \
// expected-warning {{unknown platform 'this' in availability macro}}