diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2019-12-10 16:12:53 -0500 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2019-12-10 16:30:14 -0500 |
commit | 02d04d569edd39a17f27995565b7b65ac06afb35 (patch) | |
tree | a748a803c22cc5388b760bc9cb1be489ef10a34d /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | |
parent | 3bd7cbb90cdb9cf2ca481107ec66a75d9c885782 (diff) | |
download | bcm5719-llvm-02d04d569edd39a17f27995565b7b65ac06afb35.tar.gz bcm5719-llvm-02d04d569edd39a17f27995565b7b65ac06afb35.zip |
[OPENMP50]Do not mark the function as used if referenced only in declare
variant directive.
If the function is used only in declare variant directive as a variant
function, it should not be marked as used to prevent emission of the
target-specific functions. Build the reference in the unevaluated
context.
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index e9456ebda58..71399ff3590 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -385,8 +385,13 @@ static void instantiateOMPDeclareVariantAttr( }; ExprResult VariantFuncRef; - if (Expr *E = Attr.getVariantFuncRef()) + if (Expr *E = Attr.getVariantFuncRef()) { + // Do not mark function as is used to prevent its emission if this is the + // only place where it is used. + EnterExpressionEvaluationContext Unevaluated( + S, Sema::ExpressionEvaluationContext::ConstantEvaluated); VariantFuncRef = Subst(E); + } // Check function/variant ref. Optional<std::pair<FunctionDecl *, Expr *>> DeclVarData = |