New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 759342 link

Starred by 1 user

Issue metadata

Status: Verified
Owner:
Last visit > 30 days ago
Closed: Sep 2017
Cc:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 2
Type: Bug

Blocking:
issue 724628



Sign in to add a comment

ap-daemons UnitTest fails with libc++ on gale

Project Member Reported by manojgupta@chromium.org, Aug 27 2017

Issue description

https://uberchromegw.corp.google.com/i/chromiumos.tryserver/builders/llvm_toolchain/builds/220

ap-daemons-0.0.3-r3186: armv7a-cros-linux-gnueabi-clang++ -MMD -MF platform/ap-daemons/monitor/ap-daemons_unittest.conntrack_metrics_provider_test.o.d -DUSE_METRICS_UPLOADER=1 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Iplatform/ap-daemons/ap-daemons_unittest.gen/include -Igen/include -I/build/gale/tmp/portage/chromeos-base/ap-daemons-0.0.3-r3186/work/ap-daemons-0.0.3/platform2 -I/build/gale/tmp/portage/chromeos-base/ap-daemons-0.0.3-r3186/work/ap-daemons-0.0.3/platform -I/build/gale/usr/include -Igen -Wall -Wno-psabi -Wunused -Wno-unused-parameter -ggdb3 -fstack-protector-strong -Wformat=2 -fvisibility=internal -Wa,--noexecstack -ftest-coverage -Werror --sysroot=/build/gale -std=c++11 -pthread -DUSE_RTTI_FOR_TYPE_TAGS -Wno-c++11-extensions -Wno-unused-local-typedefs -DBASE_VER=395517 -Wno-c++11-extensions -Wno-unused-local-typedefs -DBASE_VER=395517 -pthread -I/build/gale/usr/include/shill-client -I/build/gale/usr/include/power_manager-client -I/build/gale/usr/include/base-395517 -I/build/gale/usr/include/glib-2.0 -I/build/gale/usr/lib/glib-2.0/include -I/build/gale/usr/include/nss -I/build/gale/usr/include/nspr -I/build/gale/usr/include/chromeos -I/build/gale/usr/include/base-test-395517 -I/build/gale/usr/include/dbus-1.0 -I/build/gale/usr/lib/dbus-1.0/include -I/build/gale/usr/include/update_engine-client -fPIE -std=gnu++11 -DNDEBUG -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -O2 -O2 -O2 -pipe -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -g -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -clang-syntax -clang-syntax -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables  -c ../../../../../../../tmp/portage/chromeos-base/ap-daemons-0.0.3-r3186/work/ap-daemons-0.0.3/platform/ap-daemons/monitor/conntrack_metrics_provider_test.cc -o platform/ap-daemons/monitor/ap-daemons_unittest.conntrack_metrics_provider_test.o
ap-daemons-0.0.3-r3186: In file included from ../../../../../../../tmp/portage/chromeos-base/ap-daemons-0.0.3-r3186/work/ap-daemons-0.0.3/platform/ap-daemons/monitor/conntrack_metrics_provider_test.cc:5:
ap-daemons-0.0.3-r3186: In file included from ../../../../../../../tmp/portage/chromeos-base/ap-daemons-0.0.3-r3186/work/ap-daemons-0.0.3/platform/ap-daemons/monitor/conntrack_metrics_provider.h:12:
ap-daemons-0.0.3-r3186: In file included from ../../../../../../../tmp/portage/chromeos-base/ap-daemons-0.0.3-r3186/work/ap-daemons-0.0.3/platform/ap-daemons/monitor/conntrack_parser.h:12:
ap-daemons-0.0.3-r3186: In file included from ../../../../../../../usr/include/base-395517/base/files/file_path.h:113:
ap-daemons-0.0.3-r3186: In file included from ../../../../../../../usr/include/base-395517/base/containers/hash_tables.h:9:
ap-daemons-0.0.3-r3186: /usr/bin/../include/c++/v1/unordered_map:597:15: error: object of type 'std::__1::pair<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>' cannot be assigned because its copy assignment operator is implicitly deleted
ap-daemons-0.0.3-r3186:         {__nc = __v.__cc; return *this;}
ap-daemons-0.0.3-r3186:               ^
ap-daemons-0.0.3-r3186: /usr/bin/../include/c++/v1/__hash_table:1742:47: note: in instantiation of member function 'std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>::operator=' requested here
ap-daemons-0.0.3-r3186:                 __cache->__upcast()->__value_ = *__first;
ap-daemons-0.0.3-r3186:                                               ^
ap-daemons-0.0.3-r3186: /usr/bin/../include/c++/v1/__hash_table:1535:9: note: in instantiation of function template specialization 'std::__1::__hash_table<std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>, std::__1::__unordered_map_hasher<chromeos::ap::ConntrackParser::Key, std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>, chromeos::ap::ConntrackParser::Key::Hash, true>, std::__1::__unordered_map_equal<chromeos::ap::ConntrackParser::Key, std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, true>, std::__1::allocator<std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > >::__assign_multi<std::__1::__hash_const_iterator<std::__1::__hash_node<std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>, void *> *> >' requested here
ap-daemons-0.0.3-r3186:         __assign_multi(__u.begin(), __u.end());
ap-daemons-0.0.3-r3186:         ^
ap-daemons-0.0.3-r3186: /usr/bin/../include/c++/v1/unordered_map:865:18: note: in instantiation of member function 'std::__1::__hash_table<std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>, std::__1::__unordered_map_hasher<chromeos::ap::ConntrackParser::Key, std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>, chromeos::ap::ConntrackParser::Key::Hash, true>, std::__1::__unordered_map_equal<chromeos::ap::ConntrackParser::Key, std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, true>, std::__1::allocator<std::__1::__hash_value_type<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > >::operator=' requested here
ap-daemons-0.0.3-r3186:         __table_ = __u.__table_;
ap-daemons-0.0.3-r3186:                  ^
ap-daemons-0.0.3-r3186: ../../../../../../../usr/include/gmock/gmock-actions.h:813:30: note: in instantiation of member function 'std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > >::operator=' requested here
ap-daemons-0.0.3-r3186:     *::testing::get<N>(args) = value_;
ap-daemons-0.0.3-r3186:                              ^
ap-daemons-0.0.3-r3186: ../../../../../../../usr/include/gmock/gmock-actions.h:446:29: note: in instantiation of function template specialization 'testing::internal::SetArgumentPointeeAction<0, std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > >, false>::Perform<void, std::__1::tuple<std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > > *> >' requested here
ap-daemons-0.0.3-r3186:       return impl_.template Perform<Result>(args);
ap-daemons-0.0.3-r3186:                             ^
ap-daemons-0.0.3-r3186: ../../../../../../../usr/include/gmock/gmock-actions.h:443:14: note: in instantiation of member function 'testing::PolymorphicAction<testing::internal::SetArgumentPointeeAction<0, std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > >, false> >::MonomorphicImpl<void (std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > > *)>::Perform' requested here
ap-daemons-0.0.3-r3186:     explicit MonomorphicImpl(const Impl& impl) : impl_(impl) {}
ap-daemons-0.0.3-r3186:              ^
ap-daemons-0.0.3-r3186: ../../../../../../../usr/include/gmock/gmock-actions.h:433:26: note: in instantiation of member function 'testing::PolymorphicAction<testing::internal::SetArgumentPointeeAction<0, std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > >, false> >::MonomorphicImpl<void (std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > > *)>::MonomorphicImpl' requested here
ap-daemons-0.0.3-r3186:     return Action<F>(new MonomorphicImpl<F>(impl_));
ap-daemons-0.0.3-r3186:                          ^
ap-daemons-0.0.3-r3186: ../../../../../../../tmp/portage/chromeos-base/ap-daemons-0.0.3-r3186/work/ap-daemons-0.0.3/platform/ap-daemons/monitor/conntrack_metrics_provider_test.cc:96:17: note: in instantiation of function template specialization 'testing::PolymorphicAction<testing::internal::SetArgumentPointeeAction<0, std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > >, false> >::operator Action<void (std::__1::unordered_map<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data, chromeos::ap::ConntrackParser::Key::Hash, std::__1::equal_to<chromeos::ap::ConntrackParser::Key>, std::__1::allocator<std::__1::pair<const chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data> > > *)>' requested here
ap-daemons-0.0.3-r3186:       .WillOnce(SetArgPointee<0>(ConntrackParser::ConntrackMap{
ap-daemons-0.0.3-r3186:                 ^
ap-daemons-0.0.3-r3186: /usr/bin/../include/c++/v1/utility:325:5: note: copy assignment operator is implicitly deleted because 'pair<chromeos::ap::ConntrackParser::Key, chromeos::ap::ConntrackParser::Data>' has a user-declared move constructor
ap-daemons-0.0.3-r3186:     pair(pair&&) = default;
ap-daemons-0.0.3-r3186:     ^
ap-daemons-0.0.3-r3186: 1 error generated.



 
Owner: cbook@chromium.org
cbook@ Since you are the original author, do you mind taking a look at this issue.

The repro instructions are:

1. Create new chroot or do a repo sync.
2. Run ./update_chroot
3. Cherry-pick these 3 CLs in local chroot
   a) https://chromium-review.googlesource.com/c/574646
   b) https://chromium-review.googlesource.com/c/510029
   c) https://chromium-review.googlesource.com/c/509896
4. ./setup_board --board=gale --skip_chroot_upgrade (this will install toolchain + libc++ in the board.)
5. sudo emerge llvm clang // This will make libc++ as default in clang
6. USE="chrome_internal -cros-debug afdo_use" emerge-gale chromeos-base/ap-daemons -j32 .  This should pull in all the dependencies (hopefully)
7. cros_workon-gale start ap-daemons - Use 9999 ebuild now.
8. FEATURES=test USE="chrome_internal -cros-debug afdo_use" emerge-gale ap-daemons - This should show the fail.

You may also need a 1 line fix in  CL https://chrome-internal-review.googlesource.com/c/chromeos/ap-daemons/+/441912 to fix another compiler error.
Cc: renyi@chromium.org cbook@chromium.org kkunduru@chromium.org
FWIW, Everything works if I drop the const decl from all members of Key. Presence of const members disables the copy operator and copy constructor from Key type.

--- a/monitor/conntrack_parser.h
+++ b/monitor/conntrack_parser.h
@@ -26,7 +26,7 @@ class ConntrackParser {
 
   // Elements of ip_conntrack flow that make up the unique key.
   struct Key {
-    const std::string protocol;
+    std::string protocol;

-    const Side original;
-    const Side reply;
+    Side original;
+    Side reply;
 
-    const size_t hash;
+    size_t hash;

More information: http://en.cppreference.com/w/cpp/language/copy_assignment under section - Deleted implicitly-declared copy assignment operator



Comment 3 by cbook@google.com, Aug 28 2017

Cc: -cbook@chromium.org
Owner: ----
I haven't worked on this project since Dec. Need to find another owner.
Owner: kkunduru@chromium.org
kkunduru@ Can you find an owner for this? The change in #2 will fix the issue but I am not sure if you will be ok with that.
Status: Started (was: Untriaged)
Project Member

Comment 6 by bugdroid1@chromium.org, Aug 29 2017

The following revision refers to this bug:
  https://chrome-internal.googlesource.com/chromeos/ap-daemons/+/b0e3805be06c64585e565078dca8ec70e16378fd

commit b0e3805be06c64585e565078dca8ec70e16378fd
Author: Manoj Gupta <manojgupta@google.com>
Date: Tue Aug 29 01:21:33 2017

Status: Fixed (was: Started)
Status: Verified (was: Fixed)
Thanks kkunduru@

Sign in to add a comment