[cfe-dev] CXX11 attribute spelling and LateParsed=1

Javier López via cfe-dev cfe-dev at lists.llvm.org
Fri Oct 20 04:25:07 PDT 2017


El mar, 10-10-2017 a las 22:48 -0600, Eric Fiselier escribió:
> 
> 
> On Mon, Oct 9, 2017 at 7:47 PM, Richard Smith via cfe-dev <cfe-dev at li
> sts.llvm.org> wrote:
> > On 6 October 2017 at 07:36, Javier López Gómez via cfe-dev <cfe-dev
> > @lists.llvm.org> wrote:
> > > Hi,
> > > 
> > > 
> > > 
> > > I'm new to Clang hacking. Recently -prior to addition of a new
> > > attribute-, I tried adding a C++11 spelling of the DiagnoseIf
> > > attribute in the file
> > > 
> > > `tools/clang/include/clang/Basic/Attr.td':
> > > 
> > > 
> > > 
> > >   let Spellings = [GNU<"diagnose_if">,
> > > 
> > >                    CXX11<"", "diagnose_if", 201603>];
> > > 
> > > 
> > > 
> > > but the parser complains if the expression contains references to
> > > 
> > > function arguments, even if `LateParsed = 1' is specified, i.e.
> > > this
> > > 
> > > works
> > > 
> > > 
> > > 
> > >   int foo(int arg) __attribute__((diagnose_if(arg == 0, "text",
> > > 
> > > "warning")));
> > > 
> > > 
> > > 
> > > but this will not:
> > > 
> > > 
> > > 
> > >   [[diagnose_if(arg == 0, "text", "warning")]] int foo(int arg);
> > > 
> > > 
> > > 
> > > 
> > > 
> > > Am I missing something? Any help will be much appreciated.
> > 
> > There is nowhere that a C++11-syntax attribute can be written where
> > it appertains to the function entity and the function parameter
> > names are in scope. The two locations where attributes can be
> > applied to a name introduced by a declarator are:
> > 
> >   [[here]] int f [[and_here]] (int x);
> > 
> > ... and neither of them follows the "x" parameter's declaration.
> > After some discussion with Aaron, we think the best way forward is
> > to recast such attributes as attributes on the function *type*
> > (that perhaps don't change the canonical type, but do affect how
> > the function declarator is interpreted as forming a function in
> > some way). That'd mean you'd put the attributes:
> > 
> >   int f(int x) [[here]];
> > 
> > ... which conveniently is a place where the function parameters are
> > in scope. The downside is that we don't have parsing support for
> > attributes that appertain to function types yet. That would need to
> > be added.
> 
> I've been working on a fix for this; But if you want to hack on this,
> I'm happy to yield.

Yes, I will be working on this for the next days.  Thanks.
 
 

_______________________________________________

cfe-dev mailing list
cfe-dev at lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20171020/fc4f35b7/attachment.html>


More information about the cfe-dev mailing list