On Wed, 2020-03-04 at 11:05 -0500, Marek Polacek wrote:
> On Wed, Mar 04, 2020 at 04:54:54PM +0100, Bernhard Reutner-Fischer
> wrote:
> > On Mon,  2 Mar 2020 16:48:26 -0500
> > David Malcolm <dmalc...@redhat.com> wrote:
> > 
> > > +static inline bool
> > > +is_std_function_p (const_tree fndecl)
> > > +{
> > > +  tree name_decl = DECL_NAME (fndecl);
> > > +  if (!name_decl)
> > > +    return false;
> > > +  if (!DECL_CONTEXT (fndecl))
> > > +    return false;
> > > +  if (TREE_CODE (DECL_CONTEXT (fndecl)) != NAMESPACE_DECL)
> > > +    return false;
> > > +  tree ns = DECL_CONTEXT (fndecl);
> > > +  if (!(DECL_CONTEXT (ns) == NULL_TREE
> > > + || TREE_CODE (DECL_CONTEXT (ns)) == TRANSLATION_UNIT_DECL))
> > > +    return false;
> > > +  if (!DECL_NAME (ns))
> > > +    return false;
> > > +  return id_equal ("std", DECL_NAME (ns));
> > > +}
> > 
> > Sounds a bit elaborate, doesn't?
> > I hope this is optimized to
> > 
> > static inline bool
> > is_std_function_p (const_tree fndecl)
> > {
> >   tree name_decl = DECL_NAME (fndecl);
> >   if (!name_decl)
> >     return false;
> >   tree ns = DECL_CONTEXT (fndecl);
> >   if (!ns)
> >     return false;
> >   if (TREE_CODE (ns) != NAMESPACE_DECL)
> >     return false;
> >   if (!(DECL_CONTEXT (ns) == NULL_TREE
> >     || TREE_CODE (DECL_CONTEXT (ns)) == TRANSLATION_UNIT_DECL))
> >     return false;
> >   if (!DECL_NAME (ns))
> >     return false;
> >   return id_equal ("std", DECL_NAME (ns));
> > }
> > 
> > isn't "std" spelled out std_identifier() and is an identifier, i.e.
> > return DECL_NAME (ns) == std_identifier; ?
> 
> We have decl_in_std_namespace_p for that.

Thanks.  Indeed the comment to the function quoted above which wasn't
quoted reads:

/* Return true if FNDECL is within the namespace "std".
   Compare with cp/typeck.c: decl_in_std_namespace_p, but this doesn't
   rely on being the C++ FE (or handle inline namespaces inside of std).  */

since as noted in my reply to Bernhard the analyzer runs in the middle-
end and thus can't rely on features of a specific frontend.

Is there a better way to do this?

Dave

Reply via email to