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

Reply via email to