Passing member variable as parameter to the base class constructor: warning expected but not seen

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux