summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2019-12-10 16:12:53 -0500
committerAlexey Bataev <a.bataev@hotmail.com>2019-12-10 16:30:14 -0500
commit02d04d569edd39a17f27995565b7b65ac06afb35 (patch)
treea748a803c22cc5388b760bc9cb1be489ef10a34d /clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
parent3bd7cbb90cdb9cf2ca481107ec66a75d9c885782 (diff)
downloadbcm5719-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.cpp7
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 =
OpenPOWER on IntegriCloud