Lines Matching refs:VD
560 bool IsDependentVar(VarDecl *VD) { in IsDependentVar() argument
561 if (VD->getType()->isDependentType()) in IsDependentVar()
563 if (const auto *Init = VD->getInit()) in IsDependentVar()
577 bool HasAllowedCUDADeviceStaticInitializer(Sema &S, VarDecl *VD, in HasAllowedCUDADeviceStaticInitializer() argument
579 assert(!VD->isInvalidDecl() && VD->hasGlobalStorage()); in HasAllowedCUDADeviceStaticInitializer()
580 assert(!IsDependentVar(VD) && "do not check dependent var"); in HasAllowedCUDADeviceStaticInitializer()
581 const Expr *Init = VD->getInit(); in HasAllowedCUDADeviceStaticInitializer()
586 return S.isEmptyCudaConstructor(VD->getLocation(), CE->getConstructor()); in HasAllowedCUDADeviceStaticInitializer()
595 VD->getType()->isReferenceType()); in HasAllowedCUDADeviceStaticInitializer()
597 auto HasEmptyDtor = [&](VarDecl *VD) { in HasAllowedCUDADeviceStaticInitializer() argument
598 if (const auto *RD = VD->getType()->getAsCXXRecordDecl()) in HasAllowedCUDADeviceStaticInitializer()
599 return S.isEmptyCudaDestructor(VD->getLocation(), RD->getDestructor()); in HasAllowedCUDADeviceStaticInitializer()
603 return IsEmptyInit(Init) && HasEmptyDtor(VD); in HasAllowedCUDADeviceStaticInitializer()
605 ((IsEmptyInit(Init) || IsConstantInit(Init)) && HasEmptyDtor(VD)); in HasAllowedCUDADeviceStaticInitializer()
609 void Sema::checkAllowedCUDAInitializer(VarDecl *VD) { in checkAllowedCUDAInitializer() argument
612 if (VD->isInvalidDecl() || !VD->hasInit() || !VD->hasGlobalStorage() || in checkAllowedCUDAInitializer()
613 IsDependentVar(VD)) in checkAllowedCUDAInitializer()
615 const Expr *Init = VD->getInit(); in checkAllowedCUDAInitializer()
616 bool IsSharedVar = VD->hasAttr<CUDASharedAttr>(); in checkAllowedCUDAInitializer()
619 (VD->hasAttr<CUDADeviceAttr>() || VD->hasAttr<CUDAConstantAttr>()); in checkAllowedCUDAInitializer()
622 *this, VD, IsSharedVar ? CICK_Shared : CICK_DeviceOrConstant)) in checkAllowedCUDAInitializer()
624 Diag(VD->getLocation(), in checkAllowedCUDAInitializer()
627 VD->setInvalidDecl(); in checkAllowedCUDAInitializer()
640 Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) in checkAllowedCUDAInitializer()
643 VD->setInvalidDecl(); in checkAllowedCUDAInitializer()
713 void Sema::MaybeAddCUDAConstantAttr(VarDecl *VD) { in MaybeAddCUDAConstantAttr() argument
716 if (getLangOpts().CUDAIsDevice && !VD->hasAttr<CUDAConstantAttr>() && in MaybeAddCUDAConstantAttr()
717 !VD->hasAttr<CUDASharedAttr>() && in MaybeAddCUDAConstantAttr()
718 (VD->isFileVarDecl() || VD->isStaticDataMember()) && in MaybeAddCUDAConstantAttr()
719 !IsDependentVar(VD) && in MaybeAddCUDAConstantAttr()
720 ((VD->isConstexpr() || VD->getType().isConstQualified()) && in MaybeAddCUDAConstantAttr()
721 HasAllowedCUDADeviceStaticInitializer(*this, VD, in MaybeAddCUDAConstantAttr()
723 VD->addAttr(CUDAConstantAttr::CreateImplicit(getASTContext())); in MaybeAddCUDAConstantAttr()