Author: Fangrui Song Date: 2024-04-12T16:44:46-07:00 New Revision: b9bed1f1106e3116e8bea38806c511b57b956929
URL: https://github.com/llvm/llvm-project/commit/b9bed1f1106e3116e8bea38806c511b57b956929 DIFF: https://github.com/llvm/llvm-project/commit/b9bed1f1106e3116e8bea38806c511b57b956929.diff LOG: [test] Improve tests for alias/ifunc attributes Added: clang/test/Sema/alias-unused-win.cpp clang/test/Sema/alias-unused.cpp Modified: Removed: clang/test/Sema/alias-unused.c ################################################################################ diff --git a/clang/test/Sema/alias-unused-win.cpp b/clang/test/Sema/alias-unused-win.cpp new file mode 100644 index 00000000000000..47c96d41175179 --- /dev/null +++ b/clang/test/Sema/alias-unused-win.cpp @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -triple %ms_abi_triple -Wunused -x c -verify %s +// RUN: %clang_cc1 -triple %ms_abi_triple -Wunused -verify=expected,cxx %s + +#ifdef __cplusplus +extern "C" { +#endif +static int f(void) { return 42; } // cxx-warning{{unused function 'f'}} +int g(void) __attribute__((alias("f"))); + +static int foo [] = { 42, 0xDEAD }; // cxx-warning{{variable 'foo' is not needed and will not be emitted}} +extern typeof(foo) bar __attribute__((unused, alias("foo"))); + +static int __attribute__((overloadable)) f0(int x) { return x; } // expected-warning{{unused function 'f0'}} +static float __attribute__((overloadable)) f0(float x) { return x; } // expected-warning{{unused function 'f0'}} +int g0(void) __attribute__((alias("?f0@@YAHH@Z"))); + +#ifdef __cplusplus +/// https://github.com/llvm/llvm-project/issues/88593 +/// We report a warning in C++ mode because the internal linkage `resolver` gets +/// mangled as it does not have a language linkage. GCC does not mangle +/// `resolver` or report a warning. +static int f1() { return 42; } // cxx-warning{{unused function 'f1'}} +int g1(void) __attribute__((alias("?f1@@YAHXZ"))); +} + +namespace ns { +static int f3(int) { return 42; } // cxx-warning{{unused function 'f3'}} +static int f3() { return 42; } // cxx-warning{{unused function 'f3'}} +int g3() __attribute__((alias("?f3@ns@@YAHXZ"))); +} +#endif diff --git a/clang/test/Sema/alias-unused.c b/clang/test/Sema/alias-unused.c deleted file mode 100644 index de9fc8cc737662..00000000000000 --- a/clang/test/Sema/alias-unused.c +++ /dev/null @@ -1,7 +0,0 @@ -// RUN: %clang_cc1 -triple x86_64-linux-gnu -Wunneeded-internal-declaration -x c -verify %s -// expected-no-diagnostics -static int f(void) { return 42; } -int g(void) __attribute__((alias("f"))); - -static int foo [] = { 42, 0xDEAD }; -extern typeof(foo) bar __attribute__((unused, alias("foo"))); diff --git a/clang/test/Sema/alias-unused.cpp b/clang/test/Sema/alias-unused.cpp new file mode 100644 index 00000000000000..509d3e26225d74 --- /dev/null +++ b/clang/test/Sema/alias-unused.cpp @@ -0,0 +1,50 @@ +// RUN: %clang_cc1 -triple %itanium_abi_triple -Wunused -x c -verify %s +// RUN: %clang_cc1 -triple %itanium_abi_triple -Wunused -verify=expected,cxx %s + +#ifdef __cplusplus +extern "C" { +#endif +static int f(void) { return 42; } +int g(void) __attribute__((alias("f"))); + +static int foo [] = { 42, 0xDEAD }; // cxx-warning{{variable 'foo' is not needed and will not be emitted}} +extern typeof(foo) bar __attribute__((unused, alias("foo"))); + +/// https://github.com/llvm/llvm-project/issues/88593 +/// We report a warning in C++ mode because the internal linkage `resolver` gets +/// mangled as it does not have a language linkage. GCC does not mangle +/// `resolver` or report a warning. +static int (*resolver(void))(void) { return f; } // expected-warning{{unused function 'resolver'}} +int ifunc(void) __attribute__((ifunc("resolver"))); + +static int __attribute__((overloadable)) f0(int x) { return x; } // expected-warning{{unused function 'f0'}} +static float __attribute__((overloadable)) f0(float x) { return x; } // expected-warning{{unused function 'f0'}} +int g0(void) __attribute__((alias("_ZL2f0i"))); + +#ifdef __cplusplus +static int f1() { return 42; } // expected-warning{{unused function 'f1'}} +int g1(void) __attribute__((alias("_ZL2f1v"))); +} + +static int f2(int) { return 42; } // expected-warning{{unused function 'f2'}} +static int f2() { return 42; } // expected-warning{{unused function 'f2'}} +int g2() __attribute__((alias("_ZL2f2v"))); + +static int (*resolver1())() { return f; } // expected-warning{{unused function 'resolver1'}} +static int (*resolver1(int))() { return f; } // expected-warning{{unused function 'resolver1'}} +int ifunc1() __attribute__((ifunc("_ZL9resolver1i"))); + +/// TODO: We should report "unused function" for f3(int). +namespace ns { +static int f3(int) { return 42; } // cxx-warning{{unused function 'f3'}} +static int f3() { return 42; } // cxx-warning{{unused function 'f3'}} +int g3() __attribute__((alias("_ZN2nsL2f3Ev"))); +} + +template <class T> +static void *f4(T) { return nullptr; } +static void *f4() { return nullptr; } // cxx-warning{{unused function 'f4'}} +extern void g4_int() __attribute__((ifunc("_ZL2f4IiEPvT_"))); +extern void g4_char() __attribute__((ifunc("_ZL2f4IcEPcT_"))); // rejected by CodeGen +void *use4 = f4(0); +#endif _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits