mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 20:26:06 +00:00

Summary: When requirement imposed by __target__ attributes on functions are not satisfied, prefer printing those requirements, which are explicitly mentioned in the attributes. This makes such messages more useful, e.g. printing avx512f instead of avx2 in the following scenario: ``` $ cat foo.c static inline void __attribute__((__always_inline__, __target__("avx512f"))) x(void) { } int main(void) { x(); } $ clang foo.c foo.c:7:2: error: always_inline function 'x' requires target feature 'avx2', but would be inlined into function 'main' that is compiled without support for 'avx2' x(); ^ 1 error generated. ``` bugzilla: https://bugs.llvm.org/show_bug.cgi?id=37338 Reviewers: craig.topper, echristo, dblaikie Reviewed By: craig.topper, echristo Differential Revision: https://reviews.llvm.org/D46541 llvm-svn: 334174
8 lines
341 B
C
8 lines
341 B
C
// RUN: %clang_cc1 %s -triple=x86_64-linux-gnu -S -verify -o -
|
|
int __attribute__((target("avx"), always_inline)) foo(int a) {
|
|
return a + 4;
|
|
}
|
|
int bar() {
|
|
return foo(4); // expected-error {{always_inline function 'foo' requires target feature 'avx', but would be inlined into function 'bar' that is compiled without support for 'avx'}}
|
|
}
|