public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
From: Ronny Meeus <ronny.meeus@gmail.com>
To: gcc-help@gcc.gnu.org
Subject: Passing member variable as parameter to the base class constructor: warning expected but not seen
Date: Wed, 22 Jun 2022 13:28:56 +0200	[thread overview]
Message-ID: <CAMJ=MEeaKwhr+=4WNwovkS-99G2-pYXPVN2G0n3ABwH9obwGXQ@mail.gmail.com> (raw)

Hello

I have a small test program (see below) that uses a member variable
(a) of a derived class (A) as a parameter when calling the constructor
of the base class (A_base).
In fact this is "wrong" code since the base class constructor is
called with an un-initialized variable as input.

I would expect that the compiler generates a warning/error for this
since the behavior completely depends on the contents of the memory
where the object was allocated from.
In the example code I use a placement new to actually show that the
value seen in the constructor of the base class is the value I used to
fill the memory with.

I tried it with different gcc versions but none of these are
generating a warning/error for this while other tools like coverity or
sonarqube just report the issue ...
Is it expected that there is no warning generated or do I need to pass
extra compiler options to generate this warning?

I compile the program like this:
$ g++ -Wall -Wextra -std=gnu++11 /tmp/a.cc

And the output it generates:
$ ./a.out
1 a=100
2 a=0


#include <stdio.h>
#include <string.h>
#include <new>

class A_base
{
public:
    A_base(bool a) {
        printf("1 a=%d\n", (int)a);
    }
};

class A: public A_base {
public:
    bool a = false;
    A(): A_base(a) {
        printf("2 a=%d\n", (int)a);
    }
    ~A() {}
};

int main(void)
{
    char mem[10];
    memset(mem,100,sizeof(mem));

    A *b = new ((void*)mem) A();

    return 0;
}

Note: The program basically prints the boolean values as an int to
make it clear in the output that it is just using the memory as is,
without initializing it.

Best regards,
Ronny

             reply	other threads:[~2022-06-22 11:29 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-22 11:28 Ronny Meeus [this message]
2022-06-22 11:51 ` Jonathan Wakely
2022-06-22 13:08   ` Ronny Meeus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAMJ=MEeaKwhr+=4WNwovkS-99G2-pYXPVN2G0n3ABwH9obwGXQ@mail.gmail.com' \
    --to=ronny.meeus@gmail.com \
    --cc=gcc-help@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).