Author: Tom Honermann Date: 2022-03-21T13:39:44-04:00 New Revision: 059a953d8819b361b33205c109b5e903801613a2
URL: https://github.com/llvm/llvm-project/commit/059a953d8819b361b33205c109b5e903801613a2 DIFF: https://github.com/llvm/llvm-project/commit/059a953d8819b361b33205c109b5e903801613a2.diff LOG: [clang] [OpenMP] Diagnose use of 'target_clones' in OpenMP variant declarations. Previously, OpenMP variant declarations for a function declaration that included the 'cpu_dispatch', 'cpu_specific', or 'target' attributes was diagnosed, but one with the 'target_clones' attribute was not. Now fixed. Reviewed By: erichkeane, jdoerfert Differential Revision: https://reviews.llvm.org/D121963 Added: Modified: clang/lib/Sema/SemaOpenMP.cpp clang/test/OpenMP/declare_variant_messages.c Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index cfd8b60d9f03c..4a74d4f43bf84 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -7036,11 +7036,11 @@ Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, } auto &&HasMultiVersionAttributes = [](const FunctionDecl *FD) { - return FD->hasAttrs() && - (FD->hasAttr<CPUDispatchAttr>() || FD->hasAttr<CPUSpecificAttr>() || - FD->hasAttr<TargetAttr>()); + // The 'target' attribute needs to be separately checked because it does + // not always signify a multiversion function declaration. + return FD->isMultiVersion() || FD->hasAttr<TargetAttr>(); }; - // OpenMP is not compatible with CPU-specific attributes. + // OpenMP is not compatible with multiversion function attributes. if (HasMultiVersionAttributes(FD)) { Diag(FD->getLocation(), diag::err_omp_declare_variant_incompat_attributes) << SR; diff --git a/clang/test/OpenMP/declare_variant_messages.c b/clang/test/OpenMP/declare_variant_messages.c index e00d1615ef61a..6969188d214d2 100644 --- a/clang/test/OpenMP/declare_variant_messages.c +++ b/clang/test/OpenMP/declare_variant_messages.c @@ -162,9 +162,8 @@ __attribute__((target("sse"))) void incompat_attr_target(void); // expected-erro #pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) __attribute__((target("default"))) void incompat_attr_target_default(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} -// FIXME: No diagnostics are produced for use of the 'target_clones' attribute in an OMP variant declaration. #pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) -__attribute__((target_clones("sse,default"))) void incompat_attr_target_clones(void); +__attribute__((target_clones("sse,default"))) void incompat_attr_target_clones(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} void marked(void); void not_marked(void); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits