Hi, I haven't heard anything back on my questions. Can any of C++ frontend maintainers please shed some light (or comment on my proposed patch)? Thanks a lot.
Le-chun On Fri, Jul 18, 2008 at 10:22 AM, Le-Chun Wu <[EMAIL PROTECTED]> wrote: > Hi, > > In my attribute handlers that handle the new thread-safety attributes > (in c-common.c), I need to check if a decl is a class member. How do > people do that? My original code was checking if a decl is a > FIELD_DECL but that doesn't work for static members. I also tried to > use DECL_CONTEXT but it is not set (in the C++ front-end) for data > members. (I was able to use DECL_CONTEXT for member functions, > though.) Is there any other way that I should use? > > BTW, as an experiment, I went ahead and made the following change in > C++ front-end to set the DECL_CONTEXT of class data members. The patch > appears to work and doesn't seem to break any g++ and gcc regression > tests. (I will be running gdb testsuite later.) I think there must be > a reason why the DECL_CONTEXT of data members wasn't set in the > front-end, but it's not clear to my why. Can someone kindly explain > why that is and whether the patch is OK? > > Thanks, > > Le-chun > > > Index: cp/decl.c > =================================================================== > --- cp/decl.c (revision 137849) > +++ cp/decl.c (working copy) > @@ -9074,6 +9074,11 @@ grokdeclarator (const cp_declarator *dec > > if (thread_p) > DECL_TLS_MODEL (decl) = decl_default_tls_model (decl); > + > + /* Since a static class data member is a VAR_DECL (instead of > + a FIELD_DECL), setting the decl_context here allows us to > + tell if it is a class member. */ > + DECL_CONTEXT (decl) = ctype ? ctype : current_class_type; > } > else > { >