r198461 - Debug info: Ensure that the last stop point in a function is still within

Robinson, Paul Paul_Robinson at playstation.sony.com
Mon Jan 6 11:26:46 PST 2014


> -----Original Message-----
> From: cfe-commits-bounces at cs.uiuc.edu [mailto:cfe-commits-
> bounces at cs.uiuc.edu] On Behalf Of Adrian Prantl
> Sent: Monday, January 06, 2014 8:29 AM
> To: dblaikie at gmail.com
> Cc: cfe-commits at cs.uiuc.edu
> Subject: Re: r198461 - Debug info: Ensure that the last stop point in a
> function is still within
> 
> 
> On Jan 5, 2014, at 8:22 PM, dblaikie at gmail.com wrote:
> 
> >
> >
> > On Fri Jan 03 2014 at 4:00:30 PM, Adrian Prantl <aprantl at apple.com>
> wrote:
> >
> > On Jan 3, 2014, at 15:53, Eric Christopher <echristo at gmail.com> wrote:
> >
> >> There's not enough information in the commit message, the comments,
> or the test cases to know what's broken or fixed here. Why is forcing
> the block the correct solution here? What is it working around?
> >>
> >>
> >
> > Let's use this as an example:
> >
> >>
> ========================================================================
> ======
> >> --- cfe/trunk/test/CodeGenObjC/arc-linetable.m (original)
> >> +++ cfe/trunk/test/CodeGenObjC/arc-linetable.m Fri Jan  3 17:34:30
> 2014
> >
> > - (int)testNoSideEffect:(NSString *)foo {
> > int x = 1;
> > return 1; // Return expression
> > }
> >
> > Before this fix, a user would set a breakpoint at the return
> expression and then attempt to print x and it would fail, because the
> instruction that is at that line would be in the DW_TAG_subprogram
> lexical scope (instead of the lexical scope of the function body
> compound statement which contains x).
> >
> > I'm confused by this - Clang doesn't emit a separate lexical scope for
> the top level compound statement of a function...

I haven't checked lately but Clang was putting locals into a
separate scope (versus parameters in the subprogram scope).
Can't put my finger on the PR where we discussed it though.
--paulr

> >
> 
> At least for Objective C this is not true. From CGObjcC.cpp:
> 
> /// Generate an Objective-C method.  An Objective-C method is a C
> function with
> /// its pointer, name, and types registered in the class struture.
> void CodeGenFunction::GenerateObjCMethod(const ObjCMethodDecl *OMD) {
> StartObjCMethod(OMD, OMD->getClassInterface(), OMD->getLocStart());
> EmitStmt(OMD->getBody());
> FinishFunction(OMD->getBodyRBrace());
> }
> 
> -- adrian
> 
> >
> > Since the compound statement is ended before we emit the cleanups and
> return block those instructions end up in the wrong scope.
> >
> > -- adrian
> >
> >
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits






More information about the cfe-commits mailing list