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

Aaron Ballman aaron at aaronballman.com
Fri Jul 31 14:28:23 PDT 2015


On Fri, Jul 31, 2015 at 5:04 PM, Artem Belevich <tra at google.com> wrote:
>
>
> 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.

I usually put tests into Misc that use -ast-dump when I want to make
sure attributes attach properly. I suspect we could make this sort of
testing less obtuse, however.

~Aaron

>
> --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



More information about the cfe-commits mailing list