Export of internal Abseil changes
-- b770d03c2f1042d399c3f9576e881691cbe962c4 by Abseil Team <absl-team@google.com>: Avoid applying the workaround for MSVC's static initialization problems when using clang-cl. PiperOrigin-RevId: 275870089 -- 2b8fc02ec49aeb5ad56cef20259cdd7f6ee0c917 by Abseil Team <absl-team@google.com>: Document return values. PiperOrigin-RevId: 275839042 -- baa99064f9a28b188661df7fba989fcd558818af by Abseil Team <absl-team@google.com>: Support "auto" and other uncommon builtin types in absl::debugging_internal::Demangle. PiperOrigin-RevId: 275556195 -- f9d5c6a3a0d374dbf105d6e2e9e0c8fa949ed187 by Gennadiy Rozental <rogeeff@google.com>: Internal rework. PiperOrigin-RevId: 275550005 -- 2679a77db5b26349e8c8b2059621af55d2fca139 by Mark Barolak <mbar@google.com>: Remove a comment reference to the no longer extant ::string implementation. PiperOrigin-RevId: 275531987 -- 7b427a7613c44a98c6f13da43b2bff2837ca6b19 by Derek Mauro <dmauro@google.com>: Upgrade to Bazel 1.0.0 and CMake 3.15.4 PiperOrigin-RevId: 275500823 -- 81f7d20905debf9d1e300bd2e9899f88d27f632a by Derek Mauro <dmauro@google.com>: Fix -Wimplicit-int-float-conversion warning in latest clang PiperOrigin-RevId: 275492439 GitOrigin-RevId: b770d03c2f1042d399c3f9576e881691cbe962c4 Change-Id: I9b39dad524489f0d62c912d02e8ac43761c81e55
This commit is contained in:
		
							parent
							
								
									e4c8d0eb8e
								
							
						
					
					
						commit
						2796d500ae
					
				
					 23 changed files with 639 additions and 635 deletions
				
			
		|  | @ -93,6 +93,8 @@ static const AbbrevPair kOperatorList[] = { | |||
| }; | ||||
| 
 | ||||
| // List of builtin types from Itanium C++ ABI.
 | ||||
| //
 | ||||
| // Invariant: only one- or two-character type abbreviations here.
 | ||||
| static const AbbrevPair kBuiltinTypeList[] = { | ||||
|     {"v", "void", 0}, | ||||
|     {"w", "wchar_t", 0}, | ||||
|  | @ -115,6 +117,16 @@ static const AbbrevPair kBuiltinTypeList[] = { | |||
|     {"e", "long double", 0}, | ||||
|     {"g", "__float128", 0}, | ||||
|     {"z", "ellipsis", 0}, | ||||
| 
 | ||||
|     {"De", "decimal128", 0},      // IEEE 754r decimal floating point (128 bits)
 | ||||
|     {"Dd", "decimal64", 0},       // IEEE 754r decimal floating point (64 bits)
 | ||||
|     {"Dc", "decltype(auto)", 0}, | ||||
|     {"Da", "auto", 0}, | ||||
|     {"Dn", "std::nullptr_t", 0},  // i.e., decltype(nullptr)
 | ||||
|     {"Df", "decimal32", 0},       // IEEE 754r decimal floating point (32 bits)
 | ||||
|     {"Di", "char32_t", 0}, | ||||
|     {"Ds", "char16_t", 0}, | ||||
|     {"Dh", "float16", 0},         // IEEE 754r half-precision float (16 bits)
 | ||||
|     {nullptr, nullptr, 0}, | ||||
| }; | ||||
| 
 | ||||
|  | @ -1168,12 +1180,6 @@ static bool ParseType(State *state) { | |||
|   } | ||||
|   state->parse_state = copy; | ||||
| 
 | ||||
|   // nullptr_t, i.e. decltype(nullptr).
 | ||||
|   if (ParseTwoCharToken(state, "Dn")) { | ||||
|     return true; | ||||
|   } | ||||
|   state->parse_state = copy; | ||||
| 
 | ||||
|   if (ParseOneCharToken(state, 'U') && ParseSourceName(state) && | ||||
|       ParseType(state)) { | ||||
|     return true; | ||||
|  | @ -1214,16 +1220,26 @@ static bool ParseCVQualifiers(State *state) { | |||
|   return num_cv_qualifiers > 0; | ||||
| } | ||||
| 
 | ||||
| // <builtin-type> ::= v, etc.
 | ||||
| // <builtin-type> ::= v, etc.  # single-character builtin types
 | ||||
| //                ::= u <source-name>
 | ||||
| //                ::= Dd, etc.  # two-character builtin types
 | ||||
| //
 | ||||
| // Not supported:
 | ||||
| //                ::= DF <number> _ # _FloatN (N bits)
 | ||||
| //
 | ||||
| static bool ParseBuiltinType(State *state) { | ||||
|   ComplexityGuard guard(state); | ||||
|   if (guard.IsTooComplex()) return false; | ||||
|   const AbbrevPair *p; | ||||
|   for (p = kBuiltinTypeList; p->abbrev != nullptr; ++p) { | ||||
|     if (RemainingInput(state)[0] == p->abbrev[0]) { | ||||
|     // Guaranteed only 1- or 2-character strings in kBuiltinTypeList.
 | ||||
|     if (p->abbrev[1] == '\0') { | ||||
|       if (ParseOneCharToken(state, p->abbrev[0])) { | ||||
|         MaybeAppend(state, p->real_name); | ||||
|         return true; | ||||
|       } | ||||
|     } else if (p->abbrev[2] == '\0' && ParseTwoCharToken(state, p->abbrev)) { | ||||
|       MaybeAppend(state, p->real_name); | ||||
|       ++state->parse_state.mangled_idx; | ||||
|       return true; | ||||
|     } | ||||
|   } | ||||
|  |  | |||
|  | @ -36,10 +36,10 @@ namespace absl { | |||
| // GetStackFrames()
 | ||||
| //
 | ||||
| // Records program counter values for up to `max_depth` frames, skipping the
 | ||||
| // most recent `skip_count` stack frames, and stores their corresponding values
 | ||||
| // and sizes in `results` and `sizes` buffers. (Note that the frame generated
 | ||||
| // for the `absl::GetStackFrames()` routine itself is also skipped.)
 | ||||
| // routine itself.
 | ||||
| // most recent `skip_count` stack frames, stores their corresponding values
 | ||||
| // and sizes in `results` and `sizes` buffers, and returns the number of frames
 | ||||
| // stored. (Note that the frame generated for the `absl::GetStackFrames()`
 | ||||
| // routine itself is also skipped.)
 | ||||
| //
 | ||||
| // Example:
 | ||||
| //
 | ||||
|  | @ -54,8 +54,8 @@ namespace absl { | |||
| // The current stack frame would consist of three function calls: `bar()`,
 | ||||
| // `foo()`, and then `main()`; however, since the `GetStackFrames()` call sets
 | ||||
| // `skip_count` to `1`, it will skip the frame for `bar()`, the most recently
 | ||||
| // invoked function call. It will therefore return two program counters and will
 | ||||
| // produce values that map to the following function calls:
 | ||||
| // invoked function call. It will therefore return 2 and fill `result` with
 | ||||
| // program counters within the following functions:
 | ||||
| //
 | ||||
| //      result[0]       foo()
 | ||||
| //      result[1]       main()
 | ||||
|  | @ -82,9 +82,10 @@ extern int GetStackFrames(void** result, int* sizes, int max_depth, | |||
| //
 | ||||
| // Records program counter values obtained from a signal handler. Records
 | ||||
| // program counter values for up to `max_depth` frames, skipping the most recent
 | ||||
| // `skip_count` stack frames, and stores their corresponding values and sizes in
 | ||||
| // `results` and `sizes` buffers. (Note that the frame generated for the
 | ||||
| // `absl::GetStackFramesWithContext()` routine itself is also skipped.)
 | ||||
| // `skip_count` stack frames, stores their corresponding values and sizes in
 | ||||
| // `results` and `sizes` buffers, and returns the number of frames stored. (Note
 | ||||
| // that the frame generated for the `absl::GetStackFramesWithContext()` routine
 | ||||
| // itself is also skipped.)
 | ||||
| //
 | ||||
| // The `uc` parameter, if non-null, should be a pointer to a `ucontext_t` value
 | ||||
| // passed to a signal handler registered via the `sa_sigaction` field of a
 | ||||
|  | @ -105,8 +106,9 @@ extern int GetStackFramesWithContext(void** result, int* sizes, int max_depth, | |||
| // GetStackTrace()
 | ||||
| //
 | ||||
| // Records program counter values for up to `max_depth` frames, skipping the
 | ||||
| // most recent `skip_count` stack frames, and stores their corresponding values
 | ||||
| // in `results`. Note that this function is similar to `absl::GetStackFrames()`
 | ||||
| // most recent `skip_count` stack frames, stores their corresponding values
 | ||||
| // in `results`, and returns the number of frames
 | ||||
| // stored. Note that this function is similar to `absl::GetStackFrames()`
 | ||||
| // except that it returns the stack trace only, and not stack frame sizes.
 | ||||
| //
 | ||||
| // Example:
 | ||||
|  | @ -131,9 +133,9 @@ extern int GetStackTrace(void** result, int max_depth, int skip_count); | |||
| //
 | ||||
| // Records program counter values obtained from a signal handler. Records
 | ||||
| // program counter values for up to `max_depth` frames, skipping the most recent
 | ||||
| // `skip_count` stack frames, and stores their corresponding values in
 | ||||
| // `results`. (Note that the frame generated for the
 | ||||
| // `absl::GetStackFramesWithContext()` routine itself is also skipped.)
 | ||||
| // `skip_count` stack frames, stores their corresponding values in `results`,
 | ||||
| // and returns the number of frames stored. (Note that the frame generated for
 | ||||
| // the `absl::GetStackFramesWithContext()` routine itself is also skipped.)
 | ||||
| //
 | ||||
| // The `uc` parameter, if non-null, should be a pointer to a `ucontext_t` value
 | ||||
| // passed to a signal handler registered via the `sa_sigaction` field of a
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue