[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