Export of internal Abseil changes.

--
bb92c768e2271ddbebc1b1eb7e16a7b7c86a6e1c by Abseil Team <absl-team@google.com>:

Automated g4 rollback of changelist 244998488.

*** Reason for rollback ***

I'm seeing test failures, rolling this back.

*** Original change description ***

BEGIN_PUBLIC

The default constructor for optional<T> is filling dummy_ with zeros (see https://godbolt.org/z/IVea7X for a reduced example), which has a performance impact for large Ts. This comes from the gcc6 bugfix that made dummy as big as T. Because constexpr constructors are required to initialize all members of a struct, we cannot prevent this in a standard-compliant way as soon as dummy has any members (note that clang will happily accept adding a `constexpr dummy_type() {}` constructor...

***

PiperOrigin-RevId: 245004716

--
6e3ee35af50ffbee604c22300f3260ebc5f6cf52 by Abseil Team <absl-team@google.com>:

The default constructor for optional<T> is filling dummy_ with zeros (see https://godbolt.org/z/IVea7X for a reduced example), which has a performance impact for large Ts. This comes from the gcc6 bugfix that made dummy as big as T. Because constexpr constructors are required to initialize all members of a struct, we cannot prevent this in a standard-compliant way as soon as dummy has any members (note that clang will happily accept adding a `constexpr dummy_type() {}` constructor to dummy_type to prevent zero-initialization, but this is UB AFAICT).

This all stems from the fact that we're constructing an object by using placement new on dummy_. The solution I'm using here is to do the placement new on the actual data_. This creates a new issue in when T is volatile, because we can no longer use `&data_` to do the placement new. The solution I'm using here is to make data_ a non-const and non-volatile T, and only provide fully possibly qualified access through `reference()` accessors. I think this correctly prevents UB.

PiperOrigin-RevId: 244998488

--
4f52e64c4cf6aef8df6360007bcc53d8b00db2b4 by Abseil Team <absl-team@google.com>:

Increase SYMBOL_BUF_SIZE from 2KB to 3KB.

PiperOrigin-RevId: 244954529
GitOrigin-RevId: bb92c768e2271ddbebc1b1eb7e16a7b7c86a6e1c
Change-Id: Iaed9a027064a9ecd194c5c146169c683b77f12ef
This commit is contained in:
Abseil Team 2019-04-24 01:44:22 -07:00 committed by Matt Calabrese
parent ca3f87560a
commit 33841c5c96
2 changed files with 2 additions and 2 deletions

View file

@ -305,7 +305,7 @@ class Symbolizer {
char *tmp_buf, int tmp_buf_size); char *tmp_buf, int tmp_buf_size);
enum { enum {
SYMBOL_BUF_SIZE = 2048, SYMBOL_BUF_SIZE = 3072,
TMP_BUF_SIZE = 1024, TMP_BUF_SIZE = 1024,
SYMBOL_CACHE_LINES = 128, SYMBOL_CACHE_LINES = 128,
}; };

View file

@ -35,10 +35,10 @@ cc_library(
copts = ABSL_DEFAULT_COPTS, copts = ABSL_DEFAULT_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS, linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [ deps = [
":city",
"//absl/base:core_headers", "//absl/base:core_headers",
"//absl/base:endian", "//absl/base:endian",
"//absl/container:fixed_array", "//absl/container:fixed_array",
"//absl/hash:city",
"//absl/meta:type_traits", "//absl/meta:type_traits",
"//absl/numeric:int128", "//absl/numeric:int128",
"//absl/strings", "//absl/strings",