Lines Matching refs:VD
121 auto *VD = dyn_cast_or_null<VarDecl>(D); in CUDATargetContextRAII() local
122 if (VD && VD->hasGlobalStorage() && !VD->isStaticLocal()) { in CUDATargetContextRAII()
124 if ((hasAttr<CUDADeviceAttr>(VD, /*IgnoreImplicit=*/true) && in CUDATargetContextRAII()
125 !hasAttr<CUDAHostAttr>(VD, /*IgnoreImplicit=*/true)) || in CUDATargetContextRAII()
126 hasAttr<CUDASharedAttr>(VD, /*IgnoreImplicit=*/true) || in CUDATargetContextRAII()
127 hasAttr<CUDAConstantAttr>(VD, /*IgnoreImplicit=*/true)) in CUDATargetContextRAII()
129 S.CurCUDATargetCtx = {Target, K, VD}; in CUDATargetContextRAII()
594 bool IsDependentVar(VarDecl *VD) { in IsDependentVar() argument
595 if (VD->getType()->isDependentType()) in IsDependentVar()
597 if (const auto *Init = VD->getInit()) in IsDependentVar()
611 bool HasAllowedCUDADeviceStaticInitializer(Sema &S, VarDecl *VD, in HasAllowedCUDADeviceStaticInitializer() argument
613 assert(!VD->isInvalidDecl() && VD->hasGlobalStorage()); in HasAllowedCUDADeviceStaticInitializer()
614 assert(!IsDependentVar(VD) && "do not check dependent var"); in HasAllowedCUDADeviceStaticInitializer()
615 const Expr *Init = VD->getInit(); in HasAllowedCUDADeviceStaticInitializer()
620 return S.isEmptyCudaConstructor(VD->getLocation(), CE->getConstructor()); in HasAllowedCUDADeviceStaticInitializer()
629 VD->getType()->isReferenceType()); in HasAllowedCUDADeviceStaticInitializer()
631 auto HasEmptyDtor = [&](VarDecl *VD) { in HasAllowedCUDADeviceStaticInitializer() argument
632 if (const auto *RD = VD->getType()->getAsCXXRecordDecl()) in HasAllowedCUDADeviceStaticInitializer()
633 return S.isEmptyCudaDestructor(VD->getLocation(), RD->getDestructor()); in HasAllowedCUDADeviceStaticInitializer()
637 return IsEmptyInit(Init) && HasEmptyDtor(VD); in HasAllowedCUDADeviceStaticInitializer()
639 ((IsEmptyInit(Init) || IsConstantInit(Init)) && HasEmptyDtor(VD)); in HasAllowedCUDADeviceStaticInitializer()
643 void Sema::checkAllowedCUDAInitializer(VarDecl *VD) { in checkAllowedCUDAInitializer() argument
647 dyn_cast_or_null<FunctionDecl>(VD->getDeclContext())) in checkAllowedCUDAInitializer()
653 if (VD->isInvalidDecl() || !VD->hasInit() || !VD->hasGlobalStorage() || in checkAllowedCUDAInitializer()
654 IsDependentVar(VD)) in checkAllowedCUDAInitializer()
656 const Expr *Init = VD->getInit(); in checkAllowedCUDAInitializer()
657 bool IsSharedVar = VD->hasAttr<CUDASharedAttr>(); in checkAllowedCUDAInitializer()
660 (VD->hasAttr<CUDADeviceAttr>() || VD->hasAttr<CUDAConstantAttr>()); in checkAllowedCUDAInitializer()
663 *this, VD, IsSharedVar ? CICK_Shared : CICK_DeviceOrConstant)) in checkAllowedCUDAInitializer()
665 Diag(VD->getLocation(), in checkAllowedCUDAInitializer()
668 VD->setInvalidDecl(); in checkAllowedCUDAInitializer()
681 Diag(VD->getLocation(), diag::err_ref_bad_target_global_initializer) in checkAllowedCUDAInitializer()
684 VD->setInvalidDecl(); in checkAllowedCUDAInitializer()
787 void Sema::MaybeAddCUDAConstantAttr(VarDecl *VD) { in MaybeAddCUDAConstantAttr() argument
790 if (getLangOpts().CUDAIsDevice && !VD->hasAttr<CUDAConstantAttr>() && in MaybeAddCUDAConstantAttr()
791 !VD->hasAttr<CUDASharedAttr>() && in MaybeAddCUDAConstantAttr()
792 (VD->isFileVarDecl() || VD->isStaticDataMember()) && in MaybeAddCUDAConstantAttr()
793 !IsDependentVar(VD) && in MaybeAddCUDAConstantAttr()
794 ((VD->isConstexpr() || VD->getType().isConstQualified()) && in MaybeAddCUDAConstantAttr()
795 HasAllowedCUDADeviceStaticInitializer(*this, VD, in MaybeAddCUDAConstantAttr()
797 VD->addAttr(CUDAConstantAttr::CreateImplicit(getASTContext())); in MaybeAddCUDAConstantAttr()