[PATCH] D66492: [Clang][CodeGen] set alias linkage on QualType
Nick Desaulniers via Phabricator via cfe-commits
cfe-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 cfe-commits
mailing list