Author: compnerd Date: Thu Feb 18 00:49:31 2016 New Revision: 261192 URL: http://llvm.org/viewvc/llvm-project?rev=261192&view=rev Log: Sema: provide an extension warning for enable_if
Clang implements an enable_if attribute as an extension. Hook up `-Wpedantic` to issue an extension usage warning when __enable_if__ is used. Added: cfe/trunk/test/Sema/enable_if-ext.c Modified: cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td cfe/trunk/lib/Sema/SemaDeclAttr.cpp Modified: cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td?rev=261192&r1=261191&r2=261192&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td (original) +++ cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td Thu Feb 18 00:49:31 2016 @@ -157,6 +157,8 @@ def ext_old_implicitly_unsigned_long_cxx "this literal will %select{have type 'long long'|be ill-formed}0 " "in C++11 onwards">, InGroup<CXX11Compat>; +def ext_clang_enable_if : Extension<"'enable_if' is a clang extension">, + InGroup<GccCompat>; // SEH def err_seh_expected_handler : Error< Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=261192&r1=261191&r2=261192&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original) +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Thu Feb 18 00:49:31 2016 @@ -804,6 +804,8 @@ static void handleLocksExcludedAttr(Sema } static void handleEnableIfAttr(Sema &S, Decl *D, const AttributeList &Attr) { + S.Diag(Attr.getLoc(), diag::ext_clang_enable_if); + Expr *Cond = Attr.getArgAsExpr(0); if (!Cond->isTypeDependent()) { ExprResult Converted = S.PerformContextuallyConvertToBool(Cond); Added: cfe/trunk/test/Sema/enable_if-ext.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/enable_if-ext.c?rev=261192&view=auto ============================================================================== --- cfe/trunk/test/Sema/enable_if-ext.c (added) +++ cfe/trunk/test/Sema/enable_if-ext.c Thu Feb 18 00:49:31 2016 @@ -0,0 +1,50 @@ +// RUN: %clang_cc1 -fsyntax-only %s -include %s -verify +// RUN: %clang_cc1 -Wpedantic -fsyntax-only %s -include %s -verify -DWARN_PEDANTIC + +#ifndef enable_if_ext_included +#define enable_if_ext_included + +#if !defined(WARN_PEDANTIC) +// expected-no-diagnostics +#endif + +__attribute__ (( enable_if(1, "") )) +#if defined(WARN_PEDANTIC) +// expected-warning@-2 {{'enable_if' is a clang extension}} +#endif +void f() { } + +__attribute__ (( __enable_if__(1, "") )) +#if defined(WARN_PEDANTIC) +// expected-warning@-2 {{'enable_if' is a clang extension}} +#endif +void g() { } + +__attribute__ (( enable_if(0, "") )) +#if defined(WARN_PEDANTIC) +// expected-warning@-2 {{'enable_if' is a clang extension}} +#endif +void h() { } + +__attribute__ (( __enable_if__(0, "") )) +#if defined(WARN_PEDANTIC) +// expected-warning@-2 {{'enable_if' is a clang extension}} +#endif +void i() { } + +#pragma clang system_header + +__attribute__ (( enable_if(1, "") )) +void j() { } + +__attribute__ (( __enable_if__(1, "") )) +void k() { } + +__attribute__ (( enable_if(0, "") )) +void l() { } + +__attribute__ (( __enable_if__(0, "") )) +void m() { } + +#endif + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits