[PATCH] CloneFunctionInto incorrectly cloning attributes

Silviu Baranga silbar01 at arm.com
Tue Apr 9 06:57:54 PDT 2013


Hi Joey,

The patch looks good, but I have some minor questions.

How would we end up in the situation where the number of arguments is the
same, but they are of different types? The old comment was:
-    //Some arguments were deleted with the VMap. Copy arguments one by one
Was the comment incorrect?

The get(Ret/Fn)Attributes() change seems sane to me.

You should keep the existing indentation style:
-    NewFunc->setAttributes(NewFunc->getAttributes()
-                           .addAttributes(NewFunc->getContext(),
-                                          AttributeSet::ReturnIndex,
-                                          OldFunc->getAttributes()));
-    NewFunc->setAttributes(NewFunc->getAttributes()
-                           .addAttributes(NewFunc->getContext(),
-                                          AttributeSet::FunctionIndex,
-                                          OldFunc->getAttributes()));

seems more readable than

+  NewFunc->setAttributes(NewFunc->getAttributes().addAttributes(
+      NewFunc->getContext(), AttributeSet::ReturnIndex,
+      OldFunc->getAttributes().getRetAttributes()));
+  NewFunc->setAttributes(NewFunc->getAttributes().addAttributes(
+      NewFunc->getContext(), AttributeSet::FunctionIndex,
+      OldFunc->getAttributes().getFnAttributes()));

Cheers,
Silviu

> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> bounces at cs.uiuc.edu] On Behalf Of Joey Gouly
> Sent: 09 April 2013 12:17
> To: Joey Gouly; Kristof Beyls; llvm-commits at cs.uiuc.edu
> Subject: RE: [PATCH] CloneFunctionInto incorrectly cloning attributes
> 
> Ping.
> 
> OK to commit?
> 
> Joey
> 
> -----Original Message-----
> From: llvm-commits-bounces at cs.uiuc.edu
> [mailto:llvm-commits-bounces at cs.uiuc.edu] On Behalf Of Joey Gouly
> Sent: 04 April 2013 12:19
> To: Kristof Beyls; llvm-commits at cs.uiuc.edu
> Subject: RE: [PATCH] CloneFunctionInto incorrectly cloning attributes
> 
> Hi Kristof,
> 
> A good idea, I reattached the patch with an added unit test.
> 
> Thanks,
> Joey
> 
> -----Original Message-----
> From: Kristof Beyls
> Sent: 04 April 2013 10:27
> To: Joey Gouly; llvm-commits at cs.uiuc.edu
> Subject: RE: [PATCH] CloneFunctionInto incorrectly cloning attributes
> 
> Hi Joey,
> 
> If possible, I think the patch could use a regression test.
> 
> Thanks,
> Kristof
> 
> > -----Original Message-----
> > From: llvm-commits-bounces at cs.uiuc.edu [mailto:llvm-commits-
> > bounces at cs.uiuc.edu] On Behalf Of Joey Gouly
> > Sent: 04 April 2013 10:10
> > To: llvm-commits at cs.uiuc.edu
> > Subject: [PATCH] CloneFunctionInto incorrectly cloning attributes
> >
> > Hi all,
> >
> > Attached is a patch to fix a bug in llvm::CloneFunctionInto.
> >
> > Firstly, the amount of arguments are compared, and if they are equal
> the
> > attributes are copied over directly.
> > This is wrong if you are cloning into a function with the same number
> of
> > arguments, but if they are not actually
> > the same arguments.
> >
> > After the first change, the attributes were still being cloned
> incorrectly.
> > So the second change is using
> > get(Ret/Fn)Attributes() instead of getAttributes(). This may not be
> the
> > right way to fix this, I'm hoping
> > Brian Wendling can say if this is a bug here, or in the Attributes
> API.
> >
> > Example of how these bugs happen:
> >
> > define void @x(i32* nocapture %a, i32 %b) {
> >   ret void
> > }
> >
> > declare void @y(i64 %a, i64 %b)
> >
> > Without my changes, after CloneFunctionInto(@y, @x):
> >
> > define void @x(i32* nocapture %a, i32 %b) {
> >   ret void
> > }
> >
> > define void @y(i64 nocapture %c, i64 %d) {
> >   ret void
> > }
> >
> > Which is wrong, as it has put the nocapture attribute on %c, because
> they
> > have the same number of arguments.
> >
> > Any comments? Good to commit?
> >
> > Thanks,
> > Joey
> 
> 
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits








More information about the llvm-commits mailing list