You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Mark Brown <mb...@inbox.com> on 2007/03/03 22:43:22 UTC

compilation errors in 27.istream.fmat.arith.cpp

Here's another test that throws an error at compile time. It looks like the compiler doesn't like the using N as the dimension of the array. I thought using variables as array dimensions was not allowed in C++?

gcc -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align  -I/home/mbrown/stdcxx/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/home/mbrown/stdcxx/include -I/home/mbrown/stdcxx-gcc-3.4.4-11s/include -I/home/mbrown/stdcxx/../rwtest -I/home/mbrown/stdcxx/../rwtest/include -I/home/mbrown/stdcxx/tests/include  -L/home/mbrown/stdcxx-gcc-3.4.4-11s/rwtest -lrwtest11s  -L/home/mbrown/stdcxx-gcc-3.4.4-11s/lib -lstd11s   /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp /home/mbrown/stdcxx-gcc-3.4.4-11s/lib/libstd11s.a /home/mbrown/stdcxx-gcc-3.4.4-11s/rwtest/librwtest11s.a  -lsupc++ -lcatgets -liconv -lm -o 27.istream.fmat.arith
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp: In function `const std::locale make_locale(const CharT*, const LocaleData&)':
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: ISO C++ forbids variable-size array `chars'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: ISO C++ forbids variable-size array `masks'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp: In function `const std::locale make_locale(const CharT*, const LocaleData&) [with CharT = char]':
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:179:   instantiated from `const std::locale make_locale(const CharT*, const Traits*, const LocaleData&) [with CharT = char, Traits = std::char_traits<char>]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:309:   instantiated from `void test_extractor(CharT*, Traits*, ArithmeticType*, const char*, const char*, const char*, int, const char*, const char*, size_t, const LocaleData&, int, int, int, int, int, int, int, ArithmeticType, ArithmeticType) [with CharT = char, Traits = std::char_traits<char>, ArithmeticType = bool]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:699:   instantiated from `void test_bool(CharT*, Traits*, const char*, const char*) [with CharT = char, Traits = std::char_traits<char>]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1245:   instantiated from `void test_extractor(CharT*, Traits*, const char*, const char*) [with CharT = char, Traits = std::char_traits<char>]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1310:   instantiated from here
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: storage size of `chars' isn't constant
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: storage size of `masks' isn't constant
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp: In function `const std::locale make_locale(const CharT*, const LocaleData&) [with CharT = wchar_t]':
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:179:   instantiated from `const std::locale make_locale(const CharT*, const Traits*, const LocaleData&) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:309:   instantiated from `void test_extractor(CharT*, Traits*, ArithmeticType*, const char*, const char*, const char*, int, const char*, const char*, size_t, const LocaleData&, int, int, int, int, int, int, int, ArithmeticType, ArithmeticType) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>, ArithmeticType = bool]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:699:   instantiated from `void test_bool(CharT*, Traits*, const char*, const char*) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1245:   instantiated from `void test_extractor(CharT*, Traits*, const char*, const char*) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>]'
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1322:   instantiated from here
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: storage size of `chars' isn't constant
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: storage size of `masks' isn't constant
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
/home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
make: *** [27.istream.fmat.arith] Error 1


-- Mark


Re: compilation errors in 27.istream.fmat.arith.cpp

Posted by Martin Sebor <se...@roguewave.com>.
Mark Brown wrote:
> Here's another test that throws an error at compile time. It looks like the compiler doesn't like the using N as the dimension of the array. I thought using variables as array dimensions was not allowed in C++?

It's not but the variable is really a constant integral expression
(i.e., it's declared as a static local const initialized with the
value of another constant integral expression (a static const
integer data member of a class), so it's a compiler bug. I was
able to reduce it to a small test case and reproduce the error
with gcc 3.4.6 on Linux. I opened an issue in Jira for future
reference: https://issues.apache.org/jira/browse/STDCXX-351

I'll submit a patch for it shortly.

Thanks for pointing it out!
Martin

> 
> gcc -pedantic -nostdinc++ -g  -W -Wall -Wcast-qual -Winline -Wshadow -Wwrite-strings -Wno-long-long -Wcast-align  -I/home/mbrown/stdcxx/include/ansi -D_RWSTDDEBUG    -D_RWSTD_USE_CONFIG -I/home/mbrown/stdcxx/include -I/home/mbrown/stdcxx-gcc-3.4.4-11s/include -I/home/mbrown/stdcxx/../rwtest -I/home/mbrown/stdcxx/../rwtest/include -I/home/mbrown/stdcxx/tests/include  -L/home/mbrown/stdcxx-gcc-3.4.4-11s/rwtest -lrwtest11s  -L/home/mbrown/stdcxx-gcc-3.4.4-11s/lib -lstd11s   /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp /home/mbrown/stdcxx-gcc-3.4.4-11s/lib/libstd11s.a /home/mbrown/stdcxx-gcc-3.4.4-11s/rwtest/librwtest11s.a  -lsupc++ -lcatgets -liconv -lm -o 27.istream.fmat.arith
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp: In function `const std::locale make_locale(const CharT*, const LocaleData&)':
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: ISO C++ forbids variable-size array `chars'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: ISO C++ forbids variable-size array `masks'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp: In function `const std::locale make_locale(const CharT*, const LocaleData&) [with CharT = char]':
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:179:   instantiated from `const std::locale make_locale(const CharT*, const Traits*, const LocaleData&) [with CharT = char, Traits = std::char_traits<char>]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:309:   instantiated from `void test_extractor(CharT*, Traits*, ArithmeticType*, const char*, const char*, const char*, int, const char*, const char*, size_t, const LocaleData&, int, int, int, int, int, int, int, ArithmeticType, ArithmeticType) [with CharT = char, Traits = std::char_traits<char>, ArithmeticType = bool]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:699:   instantiated from `void test_bool(CharT*, Traits*, const char*, const char*) [with CharT = char, Traits = std::char_traits<char>]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1245:   instantiated from `void test_extractor(CharT*, Traits*, const char*, const char*) [with CharT = char, Traits = std::char_traits<char>]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1310:   instantiated from here
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: storage size of `chars' isn't constant
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: storage size of `masks' isn't constant
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp: In function `const std::locale make_locale(const CharT*, const LocaleData&) [with CharT = wchar_t]':
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:179:   instantiated from `const std::locale make_locale(const CharT*, const Traits*, const LocaleData&) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:309:   instantiated from `void test_extractor(CharT*, Traits*, ArithmeticType*, const char*, const char*, const char*, int, const char*, const char*, size_t, const LocaleData&, int, int, int, int, int, int, int, ArithmeticType, ArithmeticType) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>, ArithmeticType = bool]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:699:   instantiated from `void test_bool(CharT*, Traits*, const char*, const char*) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1245:   instantiated from `void test_extractor(CharT*, Traits*, const char*, const char*) [with CharT = wchar_t, Traits = std::char_traits<wchar_t>]'
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:1322:   instantiated from here
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:67: error: storage size of `chars' isn't constant
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:68: error: storage size of `masks' isn't constant
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:71: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:75: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:76: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:83: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
> /home/mbrown/stdcxx/tests/iostream/27.istream.fmat.arith.cpp:88: error: ISO C++ forbids variable-size array
> make: *** [27.istream.fmat.arith] Error 1
> 
> 
> -- Mark
>