summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2020-04-18 06:36:47 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2020-04-18 07:39:47 +0530
commitf4f0f16fb1cec709b9847a96439ccc0b194bb3d1 (patch)
tree96ac8e4f8f601ad4a95483c0214601a69f8768c4
parentf798207a9a2ef726ee67cf5ddfd56e723745bbf2 (diff)
downloadmeson-nirbheek/fix-clang-gnu_inline-warning-error.tar.gz
compilers: Silence warning about gnu_inline with clangnirbheek/fix-clang-gnu_inline-warning-error
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.py3
-rw-r--r--mesonbuild/compilers/mixins/clang.py5
-rw-r--r--mesonbuild/compilers/mixins/clike.py11
-rw-r--r--mesonbuild/compilers/mixins/gnu.py5
4 files changed, 18 insertions, 6 deletions
diff --git a/mesonbuild/compilers/c_function_attributes.py b/mesonbuild/compilers/c_function_attributes.py
index 3b9fdf9c0..e5de4853e 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 92f8c5f27..1c0ee452f 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 41848bccc..24f4796fd 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 29552f371..3526a91d4 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']