[PATCH] D66492: [Clang][CodeGen] set alias linkage on QualType

Nick Desaulniers via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 23 13:07:46 PDT 2020


nickdesaulniers added a comment.

In D66492#2350947 <https://reviews.llvm.org/D66492#2350947>, @iajbar wrote:

> Clang crashes when calling getLLVMLinkageVarDefinition() in EmitAliasDefinition() when compiling this testcase:
> enum a_type { a , b, c};
> typedef enum a_type b_type;
> void foo(b_type x, enum a_type y){}
> void bar(b_type x, enum b_type y) __attribute__ ((alias ("foo")));
>
> DeclTy is not set because of "enum b_type" is incomplete type. So calling getLLVMLinkageVarDefinition(cast<VarDecl>(GD.getDecl()),..) triggered an assert because GD.getDecl() is FunctionDecl.

It's probably worth noting that the input is funny because `enum b_type` != `b_type`.

>> warning: declaration of 'enum b_type' will not be visible outside of this function [-Wvisibility]

Turns out, the enum and the typedef are red herrings. Because the types don't match we should be warning via `-Wattribute-alias=1` that GCC has but we don't.

  void test13(float y) {}
  void test13_foo(int y) __attribute__((alias ("test13")));

GCC:

  <source>:5:6: warning: 'test13_foo' alias between functions of incompatible types 'void(int)' and 'void(float)' [-Wattribute-alias=]

We should still not crash.  I don't plan on implementing `-Wattribute-alias=` today, but will try to fix up the crash.
https://bugs.llvm.org/show_bug.cgi?id=47957 for the feature request.
https://reviews.llvm.org/D90073


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D66492/new/

https://reviews.llvm.org/D66492



More information about the llvm-commits mailing list