This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug gcov-profile/53534] New: gcov erroneously reporting opening brace of constructor is never executed.
- From: "spammymatt94 at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 31 May 2012 03:25:03 +0000
- Subject: [Bug gcov-profile/53534] New: gcov erroneously reporting opening brace of constructor is never executed.
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53534
Bug #: 53534
Summary: gcov erroneously reporting opening brace of
constructor is never executed.
Classification: Unclassified
Product: gcc
Version: 4.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: gcov-profile
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: spammymatt94@yahoo.com
Created attachment 27527
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27527
bug.ii
PROBLEM:
-: 21:template<typename T>
1: 22:inline A<T>::A()
#####: 23:{
1: 24:}
How can lines 22 and 24 of this simple no-arg constructor be executed once,
without line 23 also being executed once? Isn't that impossible?
SOURCE:
This is the simplest test case I could come up with that exhibits the problem.
In particular, if I do ANY of the following, the problem magically goes away.
- Eliminate the unused templatization parameter from class A.
- Eliminate data member _b (and eliminate class B altogether).
- Eliminate the string data members _s from either class A or class B.
- Change either string data member to a simpler type (e.g., an int).
- Move the inlined no-arg constructor inside class A's definition block.
- Move the opening brace of the no-arg constructor up to the previous line.
bug.cpp:
#include <string>
using namespace std;
class B
{
public:
string _s;
};
template<typename T>
class A
{
public:
B _b;
string _s;
A();
};
template<typename T>
inline A<T>::A()
{
}
int main()
{
A<int> a;
return 0;
}
PLATFORM:
I think I'm running the standard gcc/g++ stuff that comes with ubuntu lucid:
> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04.4 LTS
Release: 10.04
Codename: lucid
COMPILE LINE:
> g++ -v -Wall -Wextra --cover --save-temps -o bug -g -lstdc++ bug.cpp
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
4.4.3-4ubuntu5.1' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared
--enable-multiarch --enable-linker-build-id --with-system-zlib
--libexecdir=/usr/lib --without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls
--enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc
--enable-targets=all --disable-werror --with-arch-32=i486 --with-tune=generic
--enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu
--target=i486-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-coverage' '-save-temps' '-o' 'bug'
'-g' '-shared-libgcc' '-mtune=generic' '-march=i486'
/usr/lib/gcc/i486-linux-gnu/4.4.3/cc1plus -E -quiet -v -D_GNU_SOURCE bug.cpp
-D_FORTIFY_SOURCE=2 -mtune=generic -march=i486 -Wall -Wextra -g
-fworking-directory -fpch-preprocess -fstack-protector -o bug.ii
ignoring nonexistent directory "/usr/local/include/i486-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../i486-linux-gnu/include"
ignoring nonexistent directory "/usr/include/i486-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/4.4
/usr/include/c++/4.4/i486-linux-gnu
/usr/include/c++/4.4/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed
/usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-coverage' '-save-temps' '-o' 'bug'
'-g' '-shared-libgcc' '-mtune=generic' '-march=i486'
/usr/lib/gcc/i486-linux-gnu/4.4.3/cc1plus -fpreprocessed bug.ii -quiet
-dumpbase bug.cpp -mtune=generic -march=i486 -auxbase bug -g -Wall -Wextra
-version -fprofile-arcs -ftest-coverage -fstack-protector -o bug.s
GNU C++ (Ubuntu 4.4.3-4ubuntu5.1) version 4.4.3 (i486-linux-gnu)
compiled by GNU C version 4.4.3, GMP version 4.3.2, MPFR version
2.4.2-p1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++ (Ubuntu 4.4.3-4ubuntu5.1) version 4.4.3 (i486-linux-gnu)
compiled by GNU C version 4.4.3, GMP version 4.3.2, MPFR version
2.4.2-p1.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 96a18a11c5c7ae143163545923e7167b
COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-coverage' '-save-temps' '-o' 'bug'
'-g' '-shared-libgcc' '-mtune=generic' '-march=i486'
as -V -Qy -o bug.o bug.s
GNU assembler version 2.20.1 (i486-linux-gnu) using BFD version (GNU Binutils
for Ubuntu) 2.20.1-system.20100303
COMPILER_PATH=/usr/lib/gcc/i486-linux-gnu/4.4.3/:/usr/lib/gcc/i486-linux-gnu/4.4.3/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/4.4.3/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/4.4.3/:/usr/lib/gcc/i486-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/i486-linux-gnu/4.4.3/:/usr/lib/gcc/i486-linux-gnu/4.4.3/:/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../:/lib/:/usr/lib/:/usr/lib/i486-linux-gnu/
COLLECT_GCC_OPTIONS='-v' '-Wall' '-Wextra' '-coverage' '-save-temps' '-o' 'bug'
'-g' '-shared-libgcc' '-mtune=generic' '-march=i486'
/usr/lib/gcc/i486-linux-gnu/4.4.3/collect2 --build-id --eh-frame-hdr -m
elf_i386 --hash-style=both -dynamic-linker /lib/ld-linux.so.2 -o bug -z relro
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crt1.o
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crti.o
/usr/lib/gcc/i486-linux-gnu/4.4.3/crtbegin.o
-L/usr/lib/gcc/i486-linux-gnu/4.4.3 -L/usr/lib/gcc/i486-linux-gnu/4.4.3
-L/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib -L/lib/../lib
-L/usr/lib/../lib -L/usr/lib/gcc/i486-linux-gnu/4.4.3/../../..
-L/usr/lib/i486-linux-gnu -lstdc++ bug.o -lstdc++ -lm -lgcov -lgcc_s -lgcc -lc
-lgcc_s -lgcc /usr/lib/gcc/i486-linux-gnu/4.4.3/crtend.o
/usr/lib/gcc/i486-linux-gnu/4.4.3/../../../../lib/crtn.o
PROGRAM EXECUTION AND GCOV PROFILING:
./bug
gcov bug
OFFENDING OUTPUT:
bug.cpp.gcov:
-: 0:Source:bug.cpp
-: 0:Graph:bug.gcno
-: 0:Data:bug.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <string>
-: 2:
-: 3:using namespace std;
-: 4:
-: 5:class B
2: 6:{
-: 7: public:
-: 8: string _s;
-: 9:};
-: 10:
-: 11:template<typename T>
-: 12:class A
1: 13:{
-: 14: public:
-: 15: B _b;
-: 16: string _s;
-: 17:
-: 18: A();
-: 19:};
-: 20:
-: 21:template<typename T>
1: 22:inline A<T>::A()
#####: 23:{
1: 24:}
-: 25:
1: 26:int main()
-: 27:{
1: 28: A<int> a;
1: 29: return 0;
-: 30:}