tahonermann created this revision. tahonermann added reviewers: erichkeane, aaron.ballman. Herald added subscribers: guansong, yaxunl. Herald added a project: All. tahonermann published this revision for review. tahonermann added inline comments. Herald added a reviewer: jdoerfert. Herald added subscribers: cfe-commits, sstefan1. Herald added a project: clang.
================ Comment at: clang/test/OpenMP/declare_variant_messages.c:165 + +// 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)}) ---------------- This FIXME comment is removed with the changes made in D121963. This change extends the existing diagnostic tests for OpenMP variant declarations to cover diagnostics for declarations that include multiversion function attributes. The new tests demonstrate a missing check for the 'target_clones' attribute. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D121962 Files: clang/test/OpenMP/declare_variant_messages.c Index: clang/test/OpenMP/declare_variant_messages.c =================================================================== --- clang/test/OpenMP/declare_variant_messages.c +++ clang/test/OpenMP/declare_variant_messages.c @@ -142,6 +142,30 @@ #pragma omp declare variant(diff_ret_variant) match(xxx={}) // expected-error {{variant in '#pragma omp declare variant' with type 'int (void)' is incompatible with type 'void (void)'}} expected-warning {{'xxx' is not a valid context set in a `declare variant`; set ignored}} expected-note {{context set options are: 'construct' 'device' 'implementation' 'user'}} expected-note {{the ignored set spans until here}} void diff_ret(void); +void incompat_attr_variant(void); + +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((cpu_dispatch(generic))) void incompat_attr_cpu_dispatch(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((cpu_specific(generic))) void incompat_attr_cpu_specific(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +// 'incompat_attr_target' is not a multiversion function until... +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((target("mmx"))) void incompat_attr_target(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +// This declaration makes it one. +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((target("sse"))) void incompat_attr_target(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +// 'incompat_attr_target_default' is always a multiversion function. +#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); + void marked(void); void not_marked(void);
Index: clang/test/OpenMP/declare_variant_messages.c =================================================================== --- clang/test/OpenMP/declare_variant_messages.c +++ clang/test/OpenMP/declare_variant_messages.c @@ -142,6 +142,30 @@ #pragma omp declare variant(diff_ret_variant) match(xxx={}) // expected-error {{variant in '#pragma omp declare variant' with type 'int (void)' is incompatible with type 'void (void)'}} expected-warning {{'xxx' is not a valid context set in a `declare variant`; set ignored}} expected-note {{context set options are: 'construct' 'device' 'implementation' 'user'}} expected-note {{the ignored set spans until here}} void diff_ret(void); +void incompat_attr_variant(void); + +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((cpu_dispatch(generic))) void incompat_attr_cpu_dispatch(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((cpu_specific(generic))) void incompat_attr_cpu_specific(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +// 'incompat_attr_target' is not a multiversion function until... +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((target("mmx"))) void incompat_attr_target(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +// This declaration makes it one. +#pragma omp declare variant(incompat_attr_variant) match(implementation={vendor(llvm)}) +__attribute__((target("sse"))) void incompat_attr_target(void); // expected-error {{'#pragma omp declare variant' is not compatible with any target-specific attributes}} + +// 'incompat_attr_target_default' is always a multiversion function. +#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); + 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