On 6/11/21 6:01 AM, Matthias Kretz wrote:
How can we make progress here? I could try to produce some "Tony Tables" of
diagnostic output of my modified stdx::simd. I believe it's a major
productivity boost to see abbreviated / "obfuscated" diagnostics *out-of-the
box* (with the possibility to opt-out). Actually, it already *is* a
productivity boost to me. Understanding diagnostics has improved from

"1. ooof, I'm not going to read this, let me rather guess what the issue was
2. sh** I have to read it
3. several minutes later: I finally found the five words to understand the
problem; I could use a break"

to

"1. right, let me check that"

That's great.

For reference I'll attach my stdx::simd diagnose_as patch.

We could also talk about extending the feature to provide more information
about the diagnose_as substition. E.g. print a list of all diagnose_as
substitutions, which were used, at the end of the output stream. Or simpler,
print "note: some identifiers were simplified, use -fno-diagnostics-use-
aliases to see their real names".

Or perhaps before the first use of a name that doesn't correspond to a source-level name.

On Tuesday, 1 June 2021 21:12:18 CEST Jason Merrill wrote:
Right, but then two of my design goals can't be met:

1. Diagnostics have an improved signal-to-noise ratio out of the box.

2. We can use replacement names that are not valid identifiers.

This is the basic disconnect: I think that these goals are
contradictory, and that replacement names that are not valid identifiers
will just confuse users that don't know about them.

If a user sees stdx::foo in a diagnostic and then tries to refer to
stdx::foo and gets an error, the diagnostic is not more helpful than one
that uses the fully qualified name.

Jonathan, David, any thoughts on this issue?

-struct _Scalar;
+  struct [[__gnu__::__diagnose_as__("scalar")]] _Scalar;

 template <int _Np>
-  struct _Fixed;
+  struct [[__gnu__::__diagnose_as__("fixed_size")]] _Fixed;

Thes two could be the variant of the attribute without an explicit string, attached to the alias-declaration.

+using __sse [[__gnu__::__diagnose_as__("[SSE]")]] = _VecBuiltin<16>;
+using __avx [[__gnu__::__diagnose_as__("[AVX]")]] = _VecBuiltin<32>;
+using __avx512 [[__gnu__::__diagnose_as__("[AVX512]")]] = _VecBltnBtmsk<64>;
+  using __odr_helper [[__gnu__::__diagnose_as__("[ODR helper]")]]

These [] names seem like minimal improvements over the __ names that you would get from the attribute without an explicit string.

+       inline namespace parallelism_v2 
[[__gnu__::__diagnose_as__("std\u2093")]] {

This could go on std::experimental itself, along with my proposed change to hide inline namespaces by default (with a note similar to the one above).

Jason

Reply via email to