https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80439
Bug ID: 80439 Summary: __attribute__((target("xxx"))) not applied to lambdas Product: gcc Version: 7.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: thiago at kde dot org Target Milestone: --- Testcase (see also https://godbolt.org/g/H2xjNc for GCC and Clang build): ======== #include <immintrin.h> #include <stdint.h> __attribute__((target("sse4.2"))) unsigned aeshash(const uint8_t *p, size_t len, unsigned seed) { const auto l = [](unsigned data) { __m128i m = _mm_insert_epi32(_mm_setzero_si128(), data, 1); return _mm_extract_epi32(m, 1); }; return l(seed); }======== In the testcase above, if the source is compiled with base options for x86 (either 32- or 64-bit mode), GCC fails to compile with error: /usr/lib/gcc/x86_64-linux-gnu/6.3.0/include/smmintrin.h:447:1: error: inlining failed in call to always_inline 'int _mm_extract_epi32(__m128i, int)': target specific option mismatch _mm_extract_epi32 (__m128i __X, const int __N) ^~~~~~~~~~~~~~~~~ <source>:9:38: note: called from here return _mm_extract_epi32(m, 1); ^ Clang compiles the above just fine. The compilation works if I add __attribute__((target("sse4.2"))) to the lambda.