[Bug default/21843] New: libabigail getting confused or possibly bad dwarf
woodard at redhat dot com
sourceware-bugzilla@sourceware.org
Sun Jan 1 00:00:00 GMT 2017
https://sourceware.org/bugzilla/show_bug.cgi?id=21843
Bug ID: 21843
Summary: libabigail getting confused or possibly bad dwarf
Product: libabigail
Version: unspecified
Status: NEW
Severity: normal
Priority: P2
Component: default
Assignee: dodji at redhat dot com
Reporter: woodard at redhat dot com
CC: libabigail at sourceware dot org
Target Milestone: ---
Created attachment 10287
--> https://sourceware.org/bugzilla/attachment.cgi?id=10287&action=edit
clang object
I'm sorry if this is poorly specified. I generally try to boil them down to
either compiler DWARF generation errors or libabigail problems. In this case I
haven't been able to unravel the DWARF well enough to be able to tell.
The source code is trivial:
#include <vector>
std::vector<int> var;
When compiled with gcc and clang
g++ (GCC) 7.1.1 20170622 (Red Hat 7.1.1-3)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
clang version 4.0.0 (tags/RELEASE_400/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
ends up generating some curious errors:
[ben@localhost c++test]$ cat test4.abidiff
Functions changes summary: 0 Removed, 0 Changed, 0 Added function
Variables changes summary: 0 Removed, 1 Changed, 0 Added variable
1 Changed variable:
[C]'std::vector<int, std::allocator<int> > var' was changed at test4.C:3:1:
type of variable changed:
type size hasn't changed
1 base class change:
'struct std::_Vector_base<int, std::allocator<int> >' at
stl_vector.h:74:1 changed:
type size hasn't changed
1 data member change:
type of 'std::_Vector_base<int, std::allocator<int> >::_Vector_impl
std::_Vector_base<int, std::allocator<int> >::_M_impl' changed:
type size hasn't changed
3 data member changes:
type of 'std::_Vector_base<int, std::allocator<int> >::pointer
std::_Vector_base<int, std::allocator<int> >::_Vector_impl::_M_start' changed:
underlying type 'typedef
__gnu_cxx::__alloc_traits<std::allocator<int> >::pointer' at
alloc_traits.h:120:1 changed:
underlying type 'typedef
std::allocator_traits<std::allocator<int> >::pointer' at allocator.h:113:1
changed:
'typedef std::allocator_traits<std::allocator<int>
>::pointer' access changed from 'public' to 'private'
typedef name changed from
std::allocator_traits<std::allocator<int> >::pointer to
std::allocator<int>::pointer at allocator.h:113:1
...
The accessibility thing looks like a minor DWARF buglet by one of the
compilers. However, I have been unable to trace through the DWARF from GCC to
find the type that it refers to. I also talked to mjw and he had trouble
tracking down the underlying type as well. The challenge appears to be the way
that gcc imports modules. This makes it extremely difficult to manually track
through GCC's DWARF.
More concerning to me and why I've been spending so much time on this is:
typedef name changed from
std::allocator_traits<std::allocator<int> >::pointer to
std::allocator<int>::pointer at allocator.h:113:1
To me this looks like:
1) libabigail is confused and is mistaking one type for another
2) something is wrong in GCC's DWARF (which I find less likely - thus this bug)
--
You are receiving this mail because:
You are on the CC list for the bug.
More information about the Libabigail
mailing list