[PATCH] PR5172: Fix for a bug in pragma redefine_extname implementation.
Aaron Ballman
aaron.ballman at gmail.com
Wed Jun 3 05:23:14 PDT 2015
On Wed, Jun 3, 2015 at 5:02 AM, Andrey Bokhanko
<andreybokhanko at gmail.com> 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
More information about the cfe-commits
mailing list