http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55149
--- Comment #11 from David Abdurachmanov <david.abdurachmanov at gmail dot com>
---
(In reply to Jason Merrill from comment #10)
Hi Jason,
Compiled fine in 4.8.0, fails in 4.9.0 (r199649). That's the smallest I could
get in this time. It produces two errors for the same line.
david
cat <<\EOF > test.cxx
template<unsigned int TA>
struct SA
{
SA (const int & PA);
int nt;
};
template<typename TB>
inline void
test(TB aa)
{
;
}
template<unsigned int TA>
inline
SA<TA>::SA(const int & PA)
{
float e[nt];
test([&e](int i, int j){ return e[i] < e[j]; });
}
int main()
{
int d;
SA<2> iso(d);
return 0;
}
EOF
### GCC COMMAND ###
c++ -c -DGNU_GCC -D_GNU_SOURCE -O2 -pthread -pipe -Werror=main
-Werror=pointer-arith -Werror=overlength-strings -Wno-vla -Wno-overflow
-Wno-strict-overflow -std=c++0x -msse3 -ftree-vectorize -Wno-strict-overflow
-Werror=array-bounds -Werror=format-contains-nul -Werror=type-limits
-fvisibility-inlines-hidden -fno-math-errno --param
vect-max-version-for-alias-checks=50 -fipa-pta -felide-constructors
-fmessage-length=0 -ftemplate-depth-300 -Wall -Wno-non-template-friend
-Wno-long-long -Wreturn-type -Wunused -Wparentheses -Wno-deprecated
-Werror=return-type -Werror=missing-braces -Werror=unused-value -Werror=address
-Werror=format -Werror=sign-compare -Werror=write-strings
-Werror=delete-non-virtual-dtor -Werror=maybe-uninitialized
-Werror=strict-aliasing -Werror=narrowing -Werror=uninitialized
-Werror=unused-but-set-variable -Werror=reorder -Werror=unused-variable
-Werror=conversion-null -Werror=switch -fdiagnostics-show-option
-Wno-unused-local-typedefs -Wabi -fPIC test.cxx -o test.o
### GCC OUTPUT ###
test.cxx: In instantiation of 'struct SA<TA>::SA(const int&) [with unsigned int
TA = 2u]::<lambda>':
test.cxx:20:50: required from 'SA<TA>::SA(const int&) [with unsigned int TA =
2u]'
test.cxx:26:13: required from here
test.cxx:20:11: error: size of array is not an integral constant-expression
test([&e](int i, int j){ return e[i] < e[j]; });
^
test.cxx: In instantiation of 'SA<TA>::SA(const int&) [with unsigned int TA =
2u]':
test.cxx:26:13: required from here
test.cxx:20:9: error: invalid initialization of reference of type 'float
(&)[1]' from expression of type 'float [((SA<2u>*)this)->SA<2u>::nt]'
test([&e](int i, int j){ return e[i] < e[j]; });
^