Skip to content

Commit 1c2afba

Browse files
committed
[CodeGen,test] Test llvm-libc style alias attribute with UsingShadowDecl
The pattern is quite involved and deserves a specific codegen test. This test would catch the bug in the first attempt of #87130
1 parent 6b83fe5 commit 1c2afba

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

clang/test/CodeGen/alias.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,42 @@
1-
// RUN: %clang_cc1 -triple x86_64-linux -verify -emit-llvm-only %s
2-
// RUN: not %clang_cc1 -triple x86_64-linux -emit-llvm-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s
1+
// RUN: %clang_cc1 -triple x86_64-linux -verify -emit-llvm-only -DERR %s
2+
// RUN: not %clang_cc1 -triple x86_64-linux -emit-llvm-only -fdiagnostics-parseable-fixits -DERR %s 2>&1 | FileCheck %s --check-prefix=FIXIT
3+
// RUN: %clang_cc1 -triple x86_64-linux -emit-llvm %s -o - | FileCheck %s
34

5+
#ifdef ERR
46
void *f1_ifunc(void) { return nullptr; }
57
void f1(void) __attribute__((alias("f1_ifunc")));
68
// expected-error@-1 {{alias must point to a defined variable or function}}
79
// expected-note@-2 {{must refer to its mangled name}}
810
// expected-note@-3 {{function by that name is mangled as}}
9-
// CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:30-[[@LINE-4]]:47}:"alias(\"_Z8f1_ifuncv\")"
11+
// FIXIT: fix-it:"{{.*}}":{[[@LINE-4]]:30-[[@LINE-4]]:47}:"alias(\"_Z8f1_ifuncv\")"
1012

1113
void *f6_resolver_resolver(void) { return 0; }
1214
void *f6_resolver(void) __attribute__((alias("f6_resolver_resolver")));
1315
// expected-error@-1 {{alias must point to a defined variable or function}}
1416
// expected-note@-2 {{must refer to its mangled name}}
1517
// expected-note@-3 {{function by that name is mangled as}}
16-
// CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:40-[[@LINE-4]]:69}:"alias(\"_Z20f6_resolver_resolverv\")"
18+
// FIXIT: fix-it:"{{.*}}":{[[@LINE-4]]:40-[[@LINE-4]]:69}:"alias(\"_Z20f6_resolver_resolverv\")"
1719
void f6(void) __attribute__((alias("f6_resolver")));
1820
// expected-error@-1 {{alias must point to a defined variable or function}}
1921
// expected-note@-2 {{must refer to its mangled name}}
2022
// expected-note@-3 {{function by that name is mangled as}}
21-
// CHECK: fix-it:"{{.*}}":{[[@LINE-4]]:30-[[@LINE-4]]:50}:"alias(\"_Z11f6_resolverv\")"
23+
// FIXIT: fix-it:"{{.*}}":{[[@LINE-4]]:30-[[@LINE-4]]:50}:"alias(\"_Z11f6_resolverv\")"
2224

2325
__attribute__((unused, alias("resolver"), deprecated("hahahaha, isn't C great?")))
2426
void func();
2527
// expected-error@-2 {{alias must point to a defined variable or function}}
2628
// expected-note@-3 {{must refer to its mangled name}}
29+
#endif
2730

31+
// CHECK: @_ZN4libc4log2Ed ={{.*}} alias double (double), ptr @log2
32+
// CHECK: define{{.*}} @log2(
33+
namespace libc { double log2(double x); }
34+
extern "C" double log2(double);
35+
namespace std { using ::log2; }
36+
using std::log2;
37+
38+
namespace libc {
39+
decltype(libc::log2) __log2_impl__ __asm__("log2");
40+
decltype(libc::log2) log2 [[gnu::alias("log2")]];
41+
double __log2_impl__(double x) { return x; }
42+
}

0 commit comments

Comments
 (0)