Author: abataev Date: Mon Sep 30 11:24:35 2019 New Revision: 373243 URL: http://llvm.org/viewvc/llvm-project?rev=373243&view=rev Log: [OPENMP50]Do not emit warning for the function with the currently defined body.
If the function is currently defined, we should not emit a warning that it might be emitted already because it was not really emitted. Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp cfe/trunk/test/OpenMP/declare_variant_messages.c cfe/trunk/test/OpenMP/declare_variant_messages.cpp Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=373243&r1=373242&r2=373243&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original) +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Mon Sep 30 11:24:35 2019 @@ -4936,8 +4936,9 @@ Sema::checkOpenMPDeclareVariantFunction( << 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(); Modified: cfe/trunk/test/OpenMP/declare_variant_messages.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/declare_variant_messages.c?rev=373243&r1=373242&r2=373243&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/declare_variant_messages.c (original) +++ cfe/trunk/test/OpenMP/declare_variant_messages.c Mon Sep 30 11:24:35 2019 @@ -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}} Modified: cfe/trunk/test/OpenMP/declare_variant_messages.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/declare_variant_messages.cpp?rev=373243&r1=373242&r2=373243&view=diff ============================================================================== --- cfe/trunk/test/OpenMP/declare_variant_messages.cpp (original) +++ cfe/trunk/test/OpenMP/declare_variant_messages.cpp Mon Sep 30 11:24:35 2019 @@ -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 = {}) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits