[PATCH] D18328: [CUDA] Add option to mark most functions inside <complex> as host+device.
Reid Kleckner via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 21 14:46:19 PDT 2016
rnk added inline comments.
================
Comment at: lib/Sema/SemaCUDA.cpp:474
@@ +473,3 @@
+ SourceLocation Loc = FD.getLocation();
+ if (!SM.isInSystemHeader(Loc))
+ return false;
----------------
jlebar wrote:
> tra wrote:
> > Can C++ library headers ever be non-system? I.e. can someone use libc++ via -I ?
> >
> Good question, I have no idea if that's supposed to work. Reid, do you know?
libc++ complex has this pragma in it:
#pragma GCC system_header
So we should be safe regardless of the flags used to find it.
================
Comment at: lib/Sema/SemaCUDA.cpp:483-488
@@ +482,8 @@
+
+ bool IsInStd = FD.isInStdNamespace();
+ if (const auto *Method = dyn_cast<CXXMethodDecl>(&FD))
+ if (const auto *Parent = Method->getParent())
+ IsInStd |= Parent->isInStdNamespace();
+ if (!IsInStd)
+ return false;
+
----------------
I'd do this check after the system header test and before the "complex" test, since it's probably faster.
================
Comment at: lib/Sema/SemaCUDA.cpp:485
@@ +484,3 @@
+ if (const auto *Method = dyn_cast<CXXMethodDecl>(&FD))
+ if (const auto *Parent = Method->getParent())
+ IsInStd |= Parent->isInStdNamespace();
----------------
There's no cast on the RHS, so I'd spell out `CXXRecordDecl` here to make things more obvious.
================
Comment at: lib/Sema/SemaDecl.cpp:8344
@@ +8343,3 @@
+ // CUDA: Some decls in system headers get an implicit __host__ __device__.
+ if (getLangOpts().CUDA && declShouldBeCUDAHostDevice(*NewFD)) {
+ NewFD->addAttr(CUDADeviceAttr::CreateImplicit(Context));
----------------
Do you want this to apply to declarations as well as definitions? Your test uses that functionality.
http://reviews.llvm.org/D18328
More information about the cfe-commits
mailing list