diff options
| -rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 5 | ||||
| -rw-r--r-- | clang/test/OpenMP/declare_variant_messages.c | 6 | ||||
| -rw-r--r-- | clang/test/OpenMP/declare_variant_messages.cpp | 6 |
3 files changed, 13 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index f2dc66e383e..b3a2ed62a7c 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -4936,8 +4936,9 @@ Sema::checkOpenMPDeclareVariantFunction(Sema::DeclGroupPtrTy DG, << FD->getLocation(); // Check if the function was emitted already. - if ((LangOpts.EmitAllDecls && FD->isDefined()) || - Context.DeclMustBeEmitted(FD)) + const FunctionDecl *Definition; + if (!FD->isThisDeclarationADefinition() && FD->isDefined(Definition) && + (LangOpts.EmitAllDecls || Context.DeclMustBeEmitted(Definition))) Diag(SR.getBegin(), diag::warn_omp_declare_variant_after_emitted) << FD->getLocation(); diff --git a/clang/test/OpenMP/declare_variant_messages.c b/clang/test/OpenMP/declare_variant_messages.c index ce4956ae6fb..0eeaae05230 100644 --- a/clang/test/OpenMP/declare_variant_messages.c +++ b/clang/test/OpenMP/declare_variant_messages.c @@ -79,9 +79,13 @@ int bar() { // expected-warning@+1 {{'#pragma omp declare variant' cannot be applied for function after first usage; the original function might be used}} #pragma omp declare variant(after_use_variant) match(xxx={}) int after_use(void); -// expected-warning@+1 {{#pragma omp declare variant' cannot be applied to the function that was defined already; the original function might be used}} #pragma omp declare variant(after_use_variant) match(xxx={}) int defined(void) { return 0; } +int defined1(void) { return 0; } +// expected-warning@+1 {{#pragma omp declare variant' cannot be applied to the function that was defined already; the original function might be used}} +#pragma omp declare variant(after_use_variant) match(xxx={}) +int defined1(void); + int diff_cc_variant(void); // expected-error@+1 {{function with '#pragma omp declare variant' has a different calling convention}} diff --git a/clang/test/OpenMP/declare_variant_messages.cpp b/clang/test/OpenMP/declare_variant_messages.cpp index 0c322463a7f..ca61c53b0f6 100644 --- a/clang/test/OpenMP/declare_variant_messages.cpp +++ b/clang/test/OpenMP/declare_variant_messages.cpp @@ -172,10 +172,14 @@ auto fn_deduced_variant() { return 0; } int fn_deduced(); int fn_deduced_variant1(); -// expected-warning@+1 {{'#pragma omp declare variant' cannot be applied to the function that was defined already; the original function might be used}} #pragma omp declare variant(fn_deduced_variant1) match(xxx = {}) auto fn_deduced1() { return 0; } +auto fn_deduced3() { return 0; } +// expected-warning@+1 {{'#pragma omp declare variant' cannot be applied to the function that was defined already; the original function might be used}} +#pragma omp declare variant(fn_deduced_variant1) match(xxx = {}) +auto fn_deduced3(); + auto fn_deduced_variant2() { return 0; } // expected-error@+1 {{variant in '#pragma omp declare variant' with type 'int ()' is incompatible with type 'float (*)()'}} #pragma omp declare variant(fn_deduced_variant2) match(xxx = {}) |

