public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/61343] New: [C++11] Missing default initialization for class with default constructor
@ 2014-05-28 13:29 tejohnson at google dot com
  2014-05-28 16:18 ` [Bug c++/61343] " redi at gcc dot gnu.org
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: tejohnson at google dot com @ 2014-05-28 13:29 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61343

            Bug ID: 61343
           Summary: [C++11] Missing default initialization for class with
                    default constructor
           Product: gcc
           Version: 4.10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tejohnson at google dot com

The following test case does not call the default constructor when expected:

/////////////////////////////
#include <iostream>

struct Foo {
  int value;

  Foo() noexcept {
    std::cout << this << " constructed. Setting value to twelve.\n";
    value = 12;
  }
};

static thread_local Foo a{};
static thread_local Foo b;

static __attribute__((noinline)) void UseA() {
  const int value = a.value;
  std::cout << "Value of A: " << value << "\n";
}

static __attribute__((noinline)) void UseB() {
  const int value = b.value;
  std::cout << "Value of B: " << value << "\n";
}

int main(int argc, char** argv) {
  // std::cout << "Address of A: " << &a << "\n";
  // std::cout << "Address of B: " << &b << "\n";

  UseA();
  UseA();

  UseB();
  UseB();

  UseA();
  UseA();

  return 0;
}
//////////////////////////

When compiled with the current trunk compiler it gives the output:

>    Value of A: 0
>    Value of A: 0
>    0x7f2bc9150728 constructed. Setting value to twelve.
>    0x7f2bc9150724 constructed. Setting value to twelve.
>    Value of B: 12
>    Value of B: 12
>    Value of A: 12
>    Value of A: 12

I would expect something like:

>    0x7ffa4bc63720 constructed. Setting value to twelve.
>    0x7ffa4bc63724 constructed. Setting value to twelve.
>    Value of A: 12
>    Value of A: 12
>    Value of B: 12
>    Value of B: 12
>    Value of A: 12
>    Value of A: 12

It appears as though the empty brace initialization for 'a', which should
result in the user-defined default constructor being invoked, does not actually
do so. Instead the object is zero-initialized until accessing 'b', which
finally causes the default constructor for 'a' to be run as well.

Google ref: b/15250505


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug c++/61343] [C++11] Missing default initialization for class with default constructor
  2014-05-28 13:29 [Bug c++/61343] New: [C++11] Missing default initialization for class with default constructor tejohnson at google dot com
@ 2014-05-28 16:18 ` redi at gcc dot gnu.org
  2014-06-05 17:31 ` jason at gcc dot gnu.org
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: redi at gcc dot gnu.org @ 2014-05-28 16:18 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61343

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-05-28
     Ever confirmed|0                           |1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug c++/61343] [C++11] Missing default initialization for class with default constructor
  2014-05-28 13:29 [Bug c++/61343] New: [C++11] Missing default initialization for class with default constructor tejohnson at google dot com
  2014-05-28 16:18 ` [Bug c++/61343] " redi at gcc dot gnu.org
@ 2014-06-05 17:31 ` jason at gcc dot gnu.org
  2014-06-09 19:29 ` jason at gcc dot gnu.org
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: jason at gcc dot gnu.org @ 2014-06-05 17:31 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61343

--- Comment #1 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Thu Jun  5 17:30:51 2014
New Revision: 211284

URL: http://gcc.gnu.org/viewcvs?rev=211284&root=gcc&view=rev
Log:
    PR c++/61343
    * decl.c (check_initializer): Maybe clear
    DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.

Added:
    trunk/gcc/testsuite/g++.dg/tls/thread_local9.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/decl.c


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug c++/61343] [C++11] Missing default initialization for class with default constructor
  2014-05-28 13:29 [Bug c++/61343] New: [C++11] Missing default initialization for class with default constructor tejohnson at google dot com
                   ` (2 preceding siblings ...)
  2014-06-09 19:29 ` jason at gcc dot gnu.org
@ 2014-06-09 19:29 ` jason at gcc dot gnu.org
  2014-06-11 13:45 ` tejohnson at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: jason at gcc dot gnu.org @ 2014-06-09 19:29 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61343

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |jason at gcc dot gnu.org
         Resolution|---                         |FIXED
           Assignee|unassigned at gcc dot gnu.org      |jason at gcc dot gnu.org
   Target Milestone|---                         |4.9.1

--- Comment #2 from Jason Merrill <jason at gcc dot gnu.org> ---
Fixed for 4.9.1.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug c++/61343] [C++11] Missing default initialization for class with default constructor
  2014-05-28 13:29 [Bug c++/61343] New: [C++11] Missing default initialization for class with default constructor tejohnson at google dot com
  2014-05-28 16:18 ` [Bug c++/61343] " redi at gcc dot gnu.org
  2014-06-05 17:31 ` jason at gcc dot gnu.org
@ 2014-06-09 19:29 ` jason at gcc dot gnu.org
  2014-06-09 19:29 ` jason at gcc dot gnu.org
  2014-06-11 13:45 ` tejohnson at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: jason at gcc dot gnu.org @ 2014-06-09 19:29 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61343

--- Comment #3 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Mon Jun  9 19:29:17 2014
New Revision: 211386

URL: http://gcc.gnu.org/viewcvs?rev=211386&root=gcc&view=rev
Log:
    PR c++/61343
    * decl.c (check_initializer): Maybe clear
    DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.

Added:
    branches/gcc-4_9-branch/gcc/testsuite/g++.dg/tls/thread_local9.C
Modified:
    branches/gcc-4_9-branch/gcc/cp/ChangeLog
    branches/gcc-4_9-branch/gcc/cp/decl.c


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Bug c++/61343] [C++11] Missing default initialization for class with default constructor
  2014-05-28 13:29 [Bug c++/61343] New: [C++11] Missing default initialization for class with default constructor tejohnson at google dot com
                   ` (3 preceding siblings ...)
  2014-06-09 19:29 ` jason at gcc dot gnu.org
@ 2014-06-11 13:45 ` tejohnson at gcc dot gnu.org
  4 siblings, 0 replies; 6+ messages in thread
From: tejohnson at gcc dot gnu.org @ 2014-06-11 13:45 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61343

--- Comment #4 from tejohnson at gcc dot gnu.org ---
Author: tejohnson
Date: Wed Jun 11 13:45:00 2014
New Revision: 211466

URL: http://gcc.gnu.org/viewcvs?rev=211466&root=gcc&view=rev
Log:
Backport r211386 from gcc-4_9 (r211284 from trunk).

Google ref b/15250505.

    2014-06-04  Jason Merrill  <jason@redhat.com>

        PR c++/61343
        * decl.c (check_initializer): Maybe clear
        DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.


Added:
    branches/google/gcc-4_8/gcc/testsuite/g++.dg/tls/thread_local9.C
Modified:
    branches/google/gcc-4_8/gcc/cp/decl.c


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-06-11 13:45 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-28 13:29 [Bug c++/61343] New: [C++11] Missing default initialization for class with default constructor tejohnson at google dot com
2014-05-28 16:18 ` [Bug c++/61343] " redi at gcc dot gnu.org
2014-06-05 17:31 ` jason at gcc dot gnu.org
2014-06-09 19:29 ` jason at gcc dot gnu.org
2014-06-09 19:29 ` jason at gcc dot gnu.org
2014-06-11 13:45 ` tejohnson at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).