[CUDA] Allow trivial constructors as initializer for __shared__ variables.

Differential Revision: http://reviews.llvm.org/D12739

llvm-svn: 247307
This commit is contained in:
Artem Belevich
2015-09-10 17:26:58 +00:00
parent 170fd9cb6e
commit da1851ca58
2 changed files with 18 additions and 2 deletions

View File

@@ -2165,8 +2165,10 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) {
if (getLangOpts().CPlusPlus && getLangOpts().CUDAIsDevice
&& D->hasAttr<CUDASharedAttr>()) {
if (InitExpr) {
Error(D->getLocation(),
"__shared__ variable cannot have an initialization.");
const auto *C = dyn_cast<CXXConstructExpr>(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) {