From da1851ca58dc72ed781f0c36b6ef9c42ba9acf89 Mon Sep 17 00:00:00 2001 From: Artem Belevich Date: Thu, 10 Sep 2015 17:26:58 +0000 Subject: [CUDA] Allow trivial constructors as initializer for __shared__ variables. Differential Revision: http://reviews.llvm.org/D12739 llvm-svn: 247307 --- clang/lib/CodeGen/CodeGenModule.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'clang/lib/CodeGen/CodeGenModule.cpp') diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 8f0259d..bbc01cb 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2165,8 +2165,10 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { if (getLangOpts().CPlusPlus && getLangOpts().CUDAIsDevice && D->hasAttr()) { if (InitExpr) { - Error(D->getLocation(), - "__shared__ variable cannot have an initialization."); + const auto *C = dyn_cast(InitExpr); + if (C == nullptr || !C->getConstructor()->hasTrivialBody()) + Error(D->getLocation(), + "__shared__ variable cannot have an initialization."); } Init = llvm::UndefValue::get(getTypes().ConvertType(ASTTy)); } else if (!InitExpr) { -- cgit v1.1