On Wed, Jun 3, 2015 at 5:02 AM, Andrey Bokhanko <[email protected]> wrote: > Aaron, thank you for the review. I did as you suggested; patch updated.
Changes look good, with one minor nit below. However, since I don't know about the semantics of this particular pragma, I'll let someone else give the final LGTM. > http://reviews.llvm.org/D10187 > > Files: > lib/Sema/SemaDecl.cpp > test/CodeGen/redefine_extname.c > > Index: test/CodeGen/redefine_extname.c > =================================================================== > --- test/CodeGen/redefine_extname.c > +++ test/CodeGen/redefine_extname.c > @@ -3,6 +3,12 @@ > #pragma redefine_extname fake real > #pragma redefine_extname name alias > > +struct statvfs64 { > + int f; > +}; > +#pragma redefine_extname statvfs64 statvfs > +int statvfs64(struct statvfs64 *); > + > extern int fake(void); > > int name; > @@ -13,3 +19,12 @@ > // CHECK: call i32 @real() > // Check that this also works with variables names > // CHECK: load i32, i32* @alias > + > +void foo() { > + struct statvfs64 st; > + statvfs64(&st); > +// Check that even if there is a structure with redefined name before the > +// pragma, subsequent function name redefined properly. PR5712, Comment 11. > +// CHECK: call i32 @statvfs(%struct.statvfs64* %st) > +} > + > Index: lib/Sema/SemaDecl.cpp > =================================================================== > --- lib/Sema/SemaDecl.cpp > +++ lib/Sema/SemaDecl.cpp > @@ -14199,14 +14199,16 @@ > SourceLocation AliasNameLoc) { > Decl *PrevDecl = LookupSingleName(TUScope, Name, NameLoc, > LookupOrdinaryName); > - AsmLabelAttr *Attr = ::new (Context) AsmLabelAttr(AliasNameLoc, Context, > - AliasName->getName(), 0); > + if (PrevDecl) { > + PrevDecl->addAttr(AsmLabelAttr::CreateImplicit( > + Context, AliasName->getName(), AliasNameLoc)); > + } No need for the curly braces. > > - if (PrevDecl) > - PrevDecl->addAttr(Attr); > - else > - (void)ExtnameUndeclaredIdentifiers.insert( > - std::pair<IdentifierInfo*,AsmLabelAttr*>(Name, Attr)); > + // There might be additional not yet declared identifiers with Name name. > + // PR5172, Comment 11. > + (void)ExtnameUndeclaredIdentifiers.insert( > + std::make_pair(Name, AsmLabelAttr::CreateImplicit( > + Context, AliasName->getName(), > AliasNameLoc))); > } > > void Sema::ActOnPragmaWeakID(IdentifierInfo* Name, ~Aaron _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
