Jakub Jelinek <jakub at gcc dot> changed:

           What    |Removed                     |Added
                 CC|                            |jakub at gcc dot,
                   |                            |jason at gcc dot
      Known to work|4.7.4                       |
   Target Milestone|6.5                         |---
            Summary|[6/7/8 Regression] invalid  |invalid call to a function
                   |call to a function template |template with a vector
                   |with a vector argument      |argument silently accepted
                   |silently accepted           |

--- Comment #2 from Jakub Jelinek <jakub at gcc dot> ---
Which means this really is not a regression.
If you replace the v[0] + v[1] + v[2] + v[3] part that is only accepted
starting from r186994, it will be accepts-invalid all the way to the
introduction of vector_size attribute.

The clang++ error looks bogus as well, there is no reason why I can't do:

template <class T>
int f (T x)
  T __attribute__((vector_size (16))) v = { x };
  v[0] += 1;
  return v[0];
int x = f (5);

What doesn't work is that 1) we don't really have mangling for template
parameter with attributes on it 2) something else is broken for parameter
passing of these, e.g.
template <class T>
int f (T v __attribute__ ((vector_size (16))))
  return 0;

int main ()
  return f<int> ((int __attribute__ ((vector_size (16)))) { 1, 2, 3, 4} );
where we really don't need deduction fails too and 3) deduction doesn't work
with these.  So, I think we should instead reject just what we can't support
and sorry about stuff we don't want to support right now.

Reply via email to