https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100765
Bug ID: 100765
Summary: attribute incorrectly applied during type alias
deduction
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: rustamabd at gmail dot com
Target Milestone: ---
template <typename T>
using vec __attribute__((vector_size(8))) = T;
template <typename T>
void test(vec<T> x) {}
int main() {
test(vec<int>{1,2});
}
Compiles fine in Clang, but fails in GCC with:
In substitution of 'template<class T> using vec = T [with T = __vector(2)
int]':
required by substitution of 'template<class T> void test(vec<T>) [with T =
__vector(2) int]'
required from here
error: invalid vector type for attribute 'vector_size'
2 | using vec __attribute__((vector_size(8))) = T;
| ^~~
GCC seems to be applying __attribute__(vector_size) to int when deducing from
vec<int>.
Bypassing deduction makes the code compile:
test<int>(vec<int>{1,2});
This issue seems to exist in all GCC versions starting from 4.7.0 until at
least the current (12.0) trunk.