[PATCH] D11690: [CUDA] Added stubs for new attributes used by CUDA headers.

Artem Belevich tra at google.com
Fri Jul 31 14:04:10 PDT 2015


On Fri, Jul 31, 2015 at 1:51 PM, Aaron Ballman <aaron at aaronballman.com>
wrote:

> >> > Index: test/Index/attributes-cuda.cu
> >> > ===================================================================
> >> > --- test/Index/attributes-cuda.cu
> >> > +++ test/Index/attributes-cuda.cu
> >> > @@ -7,6 +7,14 @@
> >> >  __attribute__((constant)) int* g_constant;
> >> >  __attribute__((shared)) float *g_shared;
> >> >  __attribute__((host)) void f_host();
> >> > +__attribute__((device_builtin)) void f_device_builtin();
> >> > +typedef __attribute__((device_builtin)) const void *t_device_builtin;
> >> > +enum __attribute__((device_builtin)) e_device_builtin {};
> >> > +__attribute__((device_builtin)) int v_device_builtin;
> >> > +__attribute__((cudart_builtin)) void f_cudart_builtin();
> >> > +__attribute__((nv_weak)) void f_nv_weak();
> >> > +__attribute__((device_builtin_surface_type)) unsigned long long
> >> > surface_var;
> >> > +__attribute__((device_builtin_texture_type)) unsigned long long
>
> I think a better place for this test is SemaCUDA since the point to
> the patch is to ensure we can parse and properly ignore the attribute.
>

OK. I'll add a no-warnings test there.


> We don't have any attr-specific tests in there, but I don't see a
> reason why we shouldn't add one now.

When we stop ignoring some of
> these attributes in the future, we can add further tests to ensure
> they attach to the appropriate decls and are exposed to the C
> interface.
>

How do you test for something like that in general? It appears that most of
the tests in Sema* rely on -verify and as such rely only on
errors/warnings/notes which would not be sufficient to ascertain correct
construction of AST which appears to be what we'd really need for a test
like this. Index tests appear to be a somewhat round-about way of achieving
that.

--Artem




>
> ~Aaron
>
> >> > texture_var;
> >> >
> >> >  // CHECK:       attributes-cuda.cu:5:30: FunctionDecl=f_device:5:30
> >> >  // CHECK-NEXT:  attributes-cuda.cu:5:16: attribute(device)
> >> > @@ -18,3 +26,11 @@
> >> >  // CHECK-NEXT:  attributes-cuda.cu:8:16: attribute(shared)
> >> >  // CHECK:       attributes-cuda.cu:9:28: FunctionDecl=f_host:9:28
> >> >  // CHECK-NEXT:  attributes-cuda.cu:9:16: attribute(host)
> >> > +// CHECK:      attributes-cuda.cu:10:38:
> >> > FunctionDecl=f_device_builtin:10:38
> >> > +// CHECK:      attributes-cuda.cu:11:53:
> >> > TypedefDecl=t_device_builtin:11:53
> >> > +// CHECK:      attributes-cuda.cu:12:38:
> >> > EnumDecl=e_device_builtin:12:38
> >> > +// CHECK:      attributes-cuda.cu:13:37:
> VarDecl=v_device_builtin:13:37
> >> > +// CHECK:      attributes-cuda.cu:14:38:
> >> > FunctionDecl=f_cudart_builtin:14:38
> >> > +// CHECK:      attributes-cuda.cu:15:31:
> FunctionDecl=f_nv_weak:15:31
> >> > +// CHECK:      attributes-cuda.cu:16:65: VarDecl=surface_var:16:65
> >> > +// CHECK:      attributes-cuda.cu:17:65: VarDecl=texture_var:17:65
> >> > Index: include/clang/Basic/Attr.td
> >> > ===================================================================
> >> > --- include/clang/Basic/Attr.td
> >> > +++ include/clang/Basic/Attr.td
> >> > @@ -557,13 +557,37 @@
> >> >    let Documentation = [Undocumented];
> >> >  }
> >> >
> >> > +def CUDACudartBuiltin : IgnoredAttr {
> >> > +  let Spellings = [GNU<"cudart_builtin">];
> >> > +  let LangOpts = [CUDA];
> >> > +  let Documentation = [Undocumented];
> >> > +}
> >> > +
> >> >  def CUDADevice : InheritableAttr {
> >> >    let Spellings = [GNU<"device">];
> >> >    let Subjects = SubjectList<[Function, Var]>;
> >> >    let LangOpts = [CUDA];
> >> >    let Documentation = [Undocumented];
> >> >  }
> >> >
> >> > +def CUDADeviceBuiltin : IgnoredAttr {
> >> > +  let Spellings = [GNU<"device_builtin">];
> >> > +  let LangOpts = [CUDA];
> >> > +  let Documentation = [Undocumented];
> >> > +}
> >> > +
> >> > +def CUDADeviceBuiltinSurfaceType : IgnoredAttr {
> >> > +  let Spellings = [GNU<"device_builtin_surface_type">];
> >> > +  let LangOpts = [CUDA];
> >> > +  let Documentation = [Undocumented];
> >> > +}
> >> > +
> >> > +def CUDADeviceBuiltinTextureType : IgnoredAttr {
> >> > +  let Spellings = [GNU<"device_builtin_texture_type">];
> >> > +  let LangOpts = [CUDA];
> >> > +  let Documentation = [Undocumented];
> >> > +}
> >> > +
> >> >  def CUDAGlobal : InheritableAttr {
> >> >    let Spellings = [GNU<"global">];
> >> >    let Subjects = SubjectList<[Function]>;
> >> > @@ -1015,6 +1039,11 @@
> >> >    let Documentation = [Undocumented];
> >> >  }
> >> >
> >> > +def NvWeak : IgnoredAttr {
> >> > +  let Spellings = [GCC<"nv_weak">];
> >> > +  let Documentation = [Undocumented];
> >> > +}
> >>
> >> Is this attribute supported by gcc? I did a quick test of
> >> [[gnu::nv_weak]] and it seemed to be an unknown attribute.
> >>
> > That's a typo. Should've been GNU.
> >
> > --Artem
> >
> >>
> >> ~Aaron
> >>
> >> > +
> >> >  def ObjCBridge : InheritableAttr {
> >> >    let Spellings = [GNU<"objc_bridge">];
> >> >    let Subjects = SubjectList<[Record, TypedefName], ErrorDiag,
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > cfe-commits mailing list
> >> > cfe-commits at cs.uiuc.edu
> >> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >> >
> >
> >
> >
> >
> > --
> > --Artem Belevich
>



-- 
--Artem Belevich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150731/679a471b/attachment.html>


More information about the cfe-commits mailing list