On Fri, Jul 31, 2015 at 5:04 PM, Artem Belevich <t...@google.com> wrote: > > > On Fri, Jul 31, 2015 at 1:51 PM, Aaron Ballman <aa...@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@cs.uiuc.edu >> >> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >> > >> > >> > >> > >> > >> > -- >> > --Artem Belevich > > > > > -- > --Artem Belevich _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits