[Bug c++/94303] New: Program result error When using global object array (partially initialized with a special constructor, and the rest with the default constructor)
moonchasing1999 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Mar 24 16:25:07 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94303
Bug ID: 94303
Summary: Program result error When using global object array
(partially initialized with a special constructor, and
the rest with the default constructor)
Product: gcc
Version: 8.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: moonchasing1999 at gmail dot com
Target Milestone: ---
g++ version: 8.3.0 (and later)
system: Ubuntu 18.04
complete command line that triggers the bug: g++ -std=c++11 -o out main.cpp
compiler output: none
-----------------------
When I use g++8.3 and later version to compile and run the following code, the
results are not as expected. But if I use 8.2 and earlier version or other
compiler, like clang, wont't occure a fault result.
/* class define */
class A
{
private:
int d = 9;
public:
A()=default;
A(int a) : d(a) {}
void f() {cout << d << endl;}
};
/* class define end */
/* test code 1 */
A a[3] = {1}; //global
int main()
{
a[0].f(); //Output: 1
a[1].f(); //Output: 9
a[2].f(); //Output: 0 //error
return 0;
}
/* test code 1 end */
But if put A a[3] = {1} in main() function, it doesn't error.
/* test code 2 */
int main()
{
A a[3] = {1};
a[0].f(); //Output: 1
a[1].f(); //Output: 9
a[2].f(); //Output: 9 //right!
return 0;
}
/* test code 2 end */
And I find add number in initialization list, how many elements are initialized
then the last number of elements in the array is an incorrect result. For
example:
/* test code 3 */
A a[100]={1,1, 1}; // global
int main()
{
a[0].f(); //Output: 1
a[1].f(); //Output: 1
a[2].f(); //Output: 1
a[3].f(); //Output: 9
a[4].f(); //Output: 9
..... //Output: 9
a[96].f(); //Output: 9
a[97].f(); //Output: 0 //error
a[98].f(); //Output: 0 //error
a[99].f(); //Output: 0 //error
return 0;
}
/* test code 3 end */
/* full code of test code 1 */
class A
{
private:
int d = 9;
public:
A()=default;
A(int a) : d(a) {}
void f() {cout << d << endl;}
};
A a[3]={1};
int main()
{
a[0].f();
a[1].f();
a[2].f();
return 0;
}
/* full code end*/
More information about the Gcc-bugs
mailing list