Skip to content

Commit 059a953

Browse files
committed
[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
1 parent 8ff8c3a commit 059a953

File tree

2 files changed

+5
-6
lines changed

2 files changed

+5
-6
lines changed

clang/lib/Sema/SemaOpenMP.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7036,11 +7036,11 @@ Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG,
70367036
}
70377037

70387038
auto &&HasMultiVersionAttributes = [](const FunctionDecl *FD) {
7039-
return FD->hasAttrs() &&
7040-
(FD->hasAttr<CPUDispatchAttr>() || FD->hasAttr<CPUSpecificAttr>() ||
7041-
FD->hasAttr<TargetAttr>());
7039+
// The 'target' attribute needs to be separately checked because it does
7040+
// not always signify a multiversion function declaration.
7041+
return FD->isMultiVersion() || FD->hasAttr<TargetAttr>();
70427042
};
7043-
// OpenMP is not compatible with CPU-specific attributes.
7043+
// OpenMP is not compatible with multiversion function attributes.
70447044
if (HasMultiVersionAttributes(FD)) {
70457045
Diag(FD->getLocation(), diag::err_omp_declare_variant_incompat_attributes)
70467046
<< SR;

clang/test/OpenMP/declare_variant_messages.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,8 @@ __attribute__((target("sse"))) void incompat_attr_target(void); // expected-erro
162162
#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)})
163163
__attribute__((target("default"))) void incompat_attr_target_default(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}}
164164

165-
// FIXME: No diagnostics are produced for use of the 'target_clones' attribute in an OMP variant declaration.
166165
#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)})
167-
__attribute__((target_clones("sse,default"))) void incompat_attr_target_clones(void);
166+
__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}}
168167

169168
void marked(void);
170169
void not_marked(void);

0 commit comments

Comments
 (0)