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