diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2020-04-18 06:36:47 +0530 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2020-04-20 19:30:57 +0300 |
commit | dc19b132024f818bfbd3e140e8141cbcabb3d720 (patch) | |
tree | 7e556f7c41128669a32e0bc49215c37863469d77 | |
parent | b61e037e930d0d3a8569ca764d455f31f135c237 (diff) | |
download | meson-dc19b132024f818bfbd3e140e8141cbcabb3d720.zip meson-dc19b132024f818bfbd3e140e8141cbcabb3d720.tar.gz meson-dc19b132024f818bfbd3e140e8141cbcabb3d720.tar.bz2 |
compilers: Silence warning about gnu_inline with clang
The warning is due to a change in behaviour in Clang 10 and newer:
https://releases.llvm.org/10.0.0/tools/clang/docs/ReleaseNotes.html#c-language-changes-in-clang
This was already fixed for clang++, but not for clang for some reason.
It was also fixed incorrectly; by adding `extern` instead of moving
from `-Werror` to `-Werror=attributes`.
-rw-r--r-- | mesonbuild/compilers/c_function_attributes.py | 3 | ||||
-rw-r--r-- | mesonbuild/compilers/mixins/clang.py | 5 | ||||
-rw-r--r-- | mesonbuild/compilers/mixins/clike.py | 11 | ||||
-rw-r--r-- | mesonbuild/compilers/mixins/gnu.py | 5 |
4 files changed, 18 insertions, 6 deletions
diff --git a/mesonbuild/compilers/c_function_attributes.py b/mesonbuild/compilers/c_function_attributes.py index 3b9fdf9..e5de485 100644 --- a/mesonbuild/compilers/c_function_attributes.py +++ b/mesonbuild/compilers/c_function_attributes.py @@ -127,7 +127,4 @@ CXX_FUNC_ATTRIBUTES = { 'static int (*resolve_foo(void))(void) { return my_foo; }' '}' 'int foo(void) __attribute__((ifunc("resolve_foo")));'), - # Clang >= 10 requires the 'extern' keyword - 'gnu_inline': - 'extern inline __attribute__((gnu_inline)) int foo(void) { return 0; }', } diff --git a/mesonbuild/compilers/mixins/clang.py b/mesonbuild/compilers/mixins/clang.py index 92f8c5f..1c0ee45 100644 --- a/mesonbuild/compilers/mixins/clang.py +++ b/mesonbuild/compilers/mixins/clang.py @@ -112,3 +112,8 @@ class ClangCompiler(GnuLikeCompiler): 'Cannot find linker {}.'.format(linker)) return ['-fuse-ld={}'.format(linker)] return super().use_linker_args(linker) + + def get_has_func_attribute_extra_args(self, name): + # Clang only warns about unknown or ignored attributes, so force an + # error. + return ['-Werror=attributes'] diff --git a/mesonbuild/compilers/mixins/clike.py b/mesonbuild/compilers/mixins/clike.py index 41848bc..24f4796 100644 --- a/mesonbuild/compilers/mixins/clike.py +++ b/mesonbuild/compilers/mixins/clike.py @@ -1115,6 +1115,12 @@ class CLikeCompiler: m = pattern.match(ret) return ret + def get_has_func_attribute_extra_args(self, name): + # Most compilers (such as GCC and Clang) only warn about unknown or + # ignored attributes, so force an error. Overriden in GCC and Clang + # mixins. + return ['-Werror'] + def has_func_attribute(self, name, env): # Just assume that if we're not on windows that dllimport and dllexport # don't work @@ -1123,6 +1129,5 @@ class CLikeCompiler: if name in ['dllimport', 'dllexport']: return False, False - # Clang and GCC both return warnings if the __attribute__ is undefined, - # so set -Werror - return self.compiles(self.attribute_check_func(name), env, extra_args='-Werror') + return self.compiles(self.attribute_check_func(name), env, + extra_args=self.get_has_func_attribute_extra_args(name)) diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py index 29552f3..3526a91 100644 --- a/mesonbuild/compilers/mixins/gnu.py +++ b/mesonbuild/compilers/mixins/gnu.py @@ -369,3 +369,8 @@ class GnuCompiler(GnuLikeCompiler): if self.language in {'c', 'objc'} and 'is valid for C++/ObjC++' in p.stde: result = False return result, p.cached + + def get_has_func_attribute_extra_args(self, name): + # GCC only warns about unknown or ignored attributes, so force an + # error. + return ['-Werror=attributes'] |