[Bug c++/101138] New: Ambiguous code (with operator==) compiled without error

2021-06-19 Thread hiraditya at msn dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101138

Bug ID: 101138
   Summary: Ambiguous code (with operator==) compiled without
error
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: hiraditya at msn dot com
  Target Milestone: ---

$ cat test.cpp

#include 
using namespace std;

template
struct D {
template bool operator==(Y a) const { 
cout << "f" < 
bool operator==(T a, D b) { 
cout << "fD" < a, b;
if (a == b)
return 0;
return 1;
}

gcc compiles this code fine, bug clang errors out.

https://godbolt.org/z/c13EExxeY

[Bug bootstrap/100431] Fixes to enable compiling with -Werror=format-security

2021-06-19 Thread joey.dumont at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100431

--- Comment #5 from Joey Dumont  ---
I just started looking at these other cases (for some reason I didn't see them
in my initial compilation), but I am not sure what format specifiers should be
used. Are the format specifiers used by __gcc_tdiag__ documented somewhere? I
tried grepping through the source, but couldn't find anything.

[Bug c++/101137] New: std::conjunction result error

2021-06-19 Thread benni.probst at gmx dot de via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101137

Bug ID: 101137
   Summary: std::conjunction result error
   Product: gcc
   Version: 11.1.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: benni.probst at gmx dot de
  Target Milestone: ---

Created attachment 51039
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51039&action=edit
a concept file passes AND failes test at same time with concept
SignedIntegralConvertCopy

While using a lot of concepts a conjunction that could be proven 1 and 1 and 1
and 0 = 0 turned 1 instead.

[Bug target/101115] ld.bfd: warning: .init_array section has zero size

2021-06-19 Thread judge.packham at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101115

--- Comment #3 from Chris Packham  ---
An update[1]. It seems that --disable-tm-clone-registry is the option that
results in crtbegin.o having a zero sized .init_array. I can't really follow
crcstuff.c but I see USE_TM_CLONE_REGISTRY in the context of .init_array so
something is happening when tm-clone-registry is disabled.

[1] - https://sourceware.org/pipermail/binutils/2021-June/117066.html

[Bug c++/67302] [C++14] copy elision in return (expression)

2021-06-19 Thread ppalka at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67302

Patrick Palka  changed:

   What|Removed |Added

 CC||ppalka at gcc dot gnu.org
   Assignee|unassigned at gcc dot gnu.org  |ppalka at gcc dot 
gnu.org
 Status|NEW |ASSIGNED

[Bug fortran/100283] [11/12 Regression] Call to MIN0 with integer(8) arguments raises an ICE

2021-06-19 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100283

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

--- Comment #5 from anlauf at gcc dot gnu.org ---
Fixed on mainline for gcc-12, and on 11-branch.  Closing.

[Bug fortran/101123] [11/12 Regression] Invalid code for MAX0 with -fdefault-integer-8

2021-06-19 Thread anlauf at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101123

anlauf at gcc dot gnu.org changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|ASSIGNED|RESOLVED

--- Comment #9 from anlauf at gcc dot gnu.org ---
Fixed on mainline for gcc-12, and on 11-branch.  Closing.

[Bug fortran/101123] [11/12 Regression] Invalid code for MAX0 with -fdefault-integer-8

2021-06-19 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101123

--- Comment #8 from CVS Commits  ---
The releases/gcc-11 branch has been updated by Harald Anlauf
:

https://gcc.gnu.org/g:e5220a731229eaa7be42232c6e9a9dd881fed2b9

commit r11-8624-ge5220a731229eaa7be42232c6e9a9dd881fed2b9
Author: Harald Anlauf 
Date:   Fri Jun 18 19:34:15 2021 +0200

Fortran - fix conversion to result type for the min/max intrinsic

gcc/fortran/ChangeLog:

PR fortran/100283
PR fortran/101123
* trans-intrinsic.c (gfc_conv_intrinsic_minmax): Unconditionally
convert result of min/max to result type.

gcc/testsuite/ChangeLog:

PR fortran/100283
PR fortran/101123
* gfortran.dg/min0_max0_1.f90: New test.
* gfortran.dg/min0_max0_2.f90: New test.

(cherry picked from commit 6fc543396345900f460c9fa7121239cb1ebbc3a3)

[Bug fortran/100283] [11/12 Regression] Call to MIN0 with integer(8) arguments raises an ICE

2021-06-19 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100283

--- Comment #4 from CVS Commits  ---
The releases/gcc-11 branch has been updated by Harald Anlauf
:

https://gcc.gnu.org/g:e5220a731229eaa7be42232c6e9a9dd881fed2b9

commit r11-8624-ge5220a731229eaa7be42232c6e9a9dd881fed2b9
Author: Harald Anlauf 
Date:   Fri Jun 18 19:34:15 2021 +0200

Fortran - fix conversion to result type for the min/max intrinsic

gcc/fortran/ChangeLog:

PR fortran/100283
PR fortran/101123
* trans-intrinsic.c (gfc_conv_intrinsic_minmax): Unconditionally
convert result of min/max to result type.

gcc/testsuite/ChangeLog:

PR fortran/100283
PR fortran/101123
* gfortran.dg/min0_max0_1.f90: New test.
* gfortran.dg/min0_max0_2.f90: New test.

(cherry picked from commit 6fc543396345900f460c9fa7121239cb1ebbc3a3)

[Bug libstdc++/101136] msdosdjgpp toolchain cannot find std::wstring_view

2021-06-19 Thread unlvsur at live dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101136

--- Comment #1 from cqwrteur  ---
However, std::basic_string_view works.

[Bug libstdc++/101136] New: msdosdjgpp toolchain cannot find std::wstring_view

2021-06-19 Thread unlvsur at live dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101136

Bug ID: 101136
   Summary: msdosdjgpp toolchain cannot find std::wstring_view
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libstdc++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: unlvsur at live dot com
  Target Milestone: ---

../../include/fast_io_core_impl/freestanding/string_view.h:10:14: error:
'wstring_view' has not been declared in 'std'
   10 | using ::std::wstring_view;
  |  ^~~~

[Bug c++/82632] copy deduction candidate erroneously preferred over deduction-guide

2021-06-19 Thread ldalessandro at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82632

Luke Dalessandro  changed:

   What|Removed |Added

 CC||ldalessandro at gmail dot com

--- Comment #2 from Luke Dalessandro  ---
Is this demonstrating the same behavior, and is clang wrong to accept?

```
template 
struct Foo
{
Foo() = default;
Foo(Foo const&) = delete;

template 
Foo(Foo const&) {}
};

template 
Foo(Foo) -> Foo;

Foo a;
Foo b = a;
```

https://godbolt.org/z/njqPEKMM1

[Bug rtl-optimization/51469] attr-ifunc-* tests fail on PowerPC if --enable-gnu-indirect-function is used

2021-06-19 Thread hjl.tools at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51469
Bug 51469 depends on bug 83782, which changed state.

Bug 83782 Summary: [9/10/11/12 Regression] Inconsistent address for hidden 
ifunc in a shared library
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83782

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Resolution|DUPLICATE   |---

[Bug target/83782] [9/10/11/12 Regression] Inconsistent address for hidden ifunc in a shared library

2021-06-19 Thread hjl.tools at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83782

H.J. Lu  changed:

   What|Removed |Added

 Status|RESOLVED|REOPENED
 Blocks||51469
Summary|Inconsistent address for|[9/10/11/12 Regression]
   |hidden ifunc in a shared|Inconsistent address for
   |library |hidden ifunc in a shared
   ||library
 Ever confirmed|0   |1
 Resolution|DUPLICATE   |---
   Last reconfirmed||2021-06-19
 CC|hjl at gcc dot gnu.org |hjl.tools at gmail dot 
com,
   ||meissner at linux dot ibm.com

--- Comment #2 from H.J. Lu  ---
This introduced in GCC 4.7 by

commit 15ce64af29141facd203687d000e21fe6f877234
Author: Michael Meissner 
Date:   Fri Dec 9 17:10:27 2011 +

Fix PR51469 (attr-ifunc fails on ppc); Make #pragma GCC target ("...")
change macros on PPC

From-SVN: r182169

The issue is PowerPC specific.  But the fix impacts all targets.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51469
[Bug 51469] attr-ifunc-* tests fail on PowerPC if
--enable-gnu-indirect-function is used

[Bug fortran/101135] New: Use of absent assumed-shape array argument as an actual argument for an optional dummy argument mistakenly flagged as error by UndefinedBehaviourSanitizer

2021-06-19 Thread marcel.jacobse at ewetel dot net via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101135

Bug ID: 101135
   Summary: Use of absent assumed-shape array argument as an
actual argument for an optional dummy argument
mistakenly flagged as error by
UndefinedBehaviourSanitizer
   Product: gcc
   Version: 11.1.1
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: fortran
  Assignee: unassigned at gcc dot gnu.org
  Reporter: marcel.jacobse at ewetel dot net
  Target Milestone: ---

Compiling and running the minimal example

program main
implicit none
call test_wrapper

contains
subroutine test_wrapper(y)
real, dimension(1), intent(out), optional :: y
call test(y)
end subroutine test_wrapper

subroutine test(y)
real, dimension(:), intent(out), optional :: y
if (present(y)) y=0
end subroutine test
end program

with -fsanitize=undefined on any gfortran version since 8.1.0 produces this
false positive:

/app/example.f90:8:20: runtime error: load of null pointer of type
'real(kind=4)'

See for example: https://godbolt.org/z/aqGE18EGG

The issue disappears on gfortran version 7.3.0 and earlier, and also if 'y' in
'test' is not an assumed-shape array, for example if replacing 'dimension(:)'
by 'dimension(1)'. See also
https://stackoverflow.com/questions/68046152/is-passing-an-absent-assumed-shape-array-for-an-optional-argument-of-another-pro

Unfortunately I am not sure if this is an issue with gfortran itself or moreso
a false positive by UndefinedBehaviourSanitizer. So perhaps this report should
rather be for the "sanitizer" component, sorry if that is the case.

[Bug c++/98056] ICE tree check: expected record_type or union_type or qual_union_type, have array_type in build_special_member_call, at cp/call.c:9862 since r11-2183-g0f66b8486cea8668

2021-06-19 Thread iains at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98056

Iain Sandoe  changed:

   What|Removed |Added

 CC||greed at ispsystem dot com

--- Comment #9 from Iain Sandoe  ---
*** Bug 100901 has been marked as a duplicate of this bug. ***

[Bug c++/100901] "error: array used as initializer" on compiling coroutine with initializer list with shared_ptr in it

2021-06-19 Thread iains at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100901

Iain Sandoe  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 CC||iains at gcc dot gnu.org
 Resolution|--- |DUPLICATE

--- Comment #2 from Iain Sandoe  ---
thanks for the report, this is already tracked in the mentioned PR

*** This bug has been marked as a duplicate of bug 98056 ***

[Bug middle-end/101134] New: Bogus -Wstringop-overflow warning about non-existent overflow

2021-06-19 Thread dangelog at gmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101134

Bug ID: 101134
   Summary: Bogus -Wstringop-overflow warning about non-existent
overflow
   Product: gcc
   Version: 11.1.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: middle-end
  Assignee: unassigned at gcc dot gnu.org
  Reporter: dangelog at gmail dot com
  Target Milestone: ---

Hello,

This reduced testcase from Qt raises a -Wstring-overflow warning on GCC 11.1
when compiling under -O2 -g -Wall -Wextra:

#include 
#include 

struct QTestCharBuffer
{
enum { InitialSize = 512 };

inline QTestCharBuffer() : buf(staticBuf)
{
staticBuf[0] = '\0';
}

QTestCharBuffer(const QTestCharBuffer &) = delete;
QTestCharBuffer &operator=(const QTestCharBuffer &) = delete;

inline ~QTestCharBuffer()
{
if (buf != staticBuf)
free(buf);
}

inline char *data()
{
return buf;
}

inline int size() const
{
return _size;
}

inline bool reset(int newSize)
{
char *newBuf = nullptr;
if (buf == staticBuf) {
// if we point to our internal buffer, we need to malloc first
newBuf = reinterpret_cast(malloc(newSize));
} else {
// if we already malloc'ed, just realloc
newBuf = reinterpret_cast(realloc(buf, newSize));
}

// if the allocation went wrong (newBuf == 0), we leave the object
as is
if (!newBuf)
return false;

_size = newSize;
buf = newBuf;
return true;
}

private:
int _size = InitialSize;
char* buf;
char staticBuf[InitialSize];
};


typedef int (*StringFormatFunction)(QTestCharBuffer*,char const*,size_t);

/*
A wrapper for string functions written to work with a fixed size buffer
so they can be called
with a dynamically allocated buffer.
*/
int allocateStringFn(QTestCharBuffer* str, char const* src,
StringFormatFunction func)
{
static const int MAXSIZE = 1024*1024*2;

int size = str->size();

int res = 0;

for (;;) {
res = func(str, src, size);
str->data()[size - 1] = '\0';
if (res < size) {
// We succeeded or fatally failed
break;
}
// buffer wasn't big enough, try again
size *= 2;
if (size > MAXSIZE) {
break;
}
if (!str->reset(size))
break; // ran out of memory - bye
}

return res;
}

int xmlQuote(QTestCharBuffer* destBuf, char const* src, size_t n)
{
if (n == 0) return 0;

char *dest = destBuf->data();
*dest = 0;
if (!src) return 0;

char* begin = dest;
char* end = dest + n;

while (dest < end) {
switch (*src) {

#define MAP_ENTITY(chr, ent) \
case chr:   \
if (dest + sizeof(ent) < end) { \
strcpy(dest, ent);  \
dest += sizeof(ent) - 1;\
}   \
else {  \
*dest = 0;  \
return (dest+sizeof(ent)-begin);\
}   \
++src;  \
break;

MAP_ENTITY('>', ">");
MAP_ENTITY('<', "<");
MAP_ENTITY('\'', "'");
MAP_ENTITY('"', """);
MAP_ENTITY('&', "&");

// not strictly necessary, but allows handling of comments
without
// having to explicitly look for `--'
MAP_ENTITY('-', "-");

#undef MAP_ENTITY

case 0:
*dest = 0;
return (dest-begin);

default:
*dest = *src;
++dest;
++src;
break;
}
}

// If we get here, dest was completely filled (dest == end)
*(dest-1) = 0;
return (dest-begin);
}

int xmlQuote(QTestCharBuffer* str, char const* src)
{
return allocateStringFn(str, src, xmlQuote);
}

void enterTestFunction(const char *function)
{
QTestCharBuffer quotedFunction;
xmlQuote("edFunction, function);
}


Godbolt link: https://gcc.godbolt.org/z/aPMdYjqEa

The warning is

In

[Bug c++/101133] New: co_await doesn't accept a valid awaitable object if await_resume()'s return type is not a built-in type.

2021-06-19 Thread liuyaoxin1976 at qq dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101133

Bug ID: 101133
   Summary: co_await doesn't accept a valid awaitable object if
await_resume()'s return type is not a built-in type.
   Product: gcc
   Version: 11.1.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c++
  Assignee: unassigned at gcc dot gnu.org
  Reporter: liuyaoxin1976 at qq dot com
  Target Milestone: ---

#include 
#include 

template
struct Awaiter
{
bool await_ready()  const { return false; }
void await_suspend(std::coroutine_handle<>) const {}
Tawait_resume() const { return T{}; }
};

struct ReturnObject
{
struct promise_type
{
ReturnObject   get_return_object(){ return {}; }
std::suspend_never initial_suspend() noexcept { return {}; }
std::suspend_never final_suspend()   noexcept { return {}; }
void   return_void()  {}
void   unhandled_exception()  {}
};
};

ReturnObject f()
{
auto a1 = Awaiter{};
auto a2 = Awaiter{};

[[maybe_unused]] auto v1 = co_await a1; // ok
[[maybe_unused]] auto v2 = co_await a2; // error
}

The error message is: no suspend point info for ''co_await' not supported by
dump_decl'

See also: https://godbolt.org/z/4xdYreb9f

[Bug middle-end/101132] [11/12 regression] [MIPS/MSA] internal compiler error: in do_store_flag, at expr.c:12541

2021-06-19 Thread xry111 at mengyan1223 dot wang via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101132

--- Comment #1 from Xi Ruoyao  ---
Forgot to mention: the flags triggering the ICE is -O3 -mmsa.

[Bug middle-end/101132] New: [11/12 regression] [MIPS/MSA] internal compiler error: in do_store_flag, at expr.c:12541

2021-06-19 Thread xry111 at mengyan1223 dot wang via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101132

Bug ID: 101132
   Summary: [11/12 regression] [MIPS/MSA] internal compiler error:
in do_store_flag, at expr.c:12541
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: middle-end
  Assignee: unassigned at gcc dot gnu.org
  Reporter: xry111 at mengyan1223 dot wang
  Target Milestone: ---

Reproducer:

int r_0, q_0;
void bar() {
  int i;
  for (i = 0; i < 96; i++) {
r_0 = i << i ? 2 + i : -i;
q_0 = r_0 > 2 ?: i;
  }
}

Error message:

testcase.i: In function ‘bar’:
testcase.i:2:6: internal compiler error: in do_store_flag, at expr.c:12541
2 | void bar() {
  |  ^~~
0xdacde9 do_store_flag
../../gcc/gcc/expr.c:12541
0xd9fecd expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
expand_modifier)
../../gcc/gcc/expr.c:9859
0xda2748 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
../../gcc/gcc/expr.c:10409
0xd9aa61 expand_expr_real(tree_node*, rtx_def*, machine_mode, expand_modifier,
rtx_def**, bool)
../../gcc/gcc/expr.c:8642
0xf0da1a expand_normal
../../gcc/gcc/expr.h:307
0xf18702 expand_vec_cond_optab_fn
../../gcc/gcc/internal-fn.c:2802
0xf1d85e expand_VCOND
../../gcc/gcc/internal-fn.def:143
0xf1f330 expand_internal_call(internal_fn, gcall*)
../../gcc/gcc/internal-fn.c:4093
0xf1f35b expand_internal_call(gcall*)
../../gcc/gcc/internal-fn.c:4101
0xbf2f30 expand_call_stmt
../../gcc/gcc/cfgexpand.c:2752
0xbf6fcf expand_gimple_stmt_1
../../gcc/gcc/cfgexpand.c:3850
0xbf7659 expand_gimple_stmt
../../gcc/gcc/cfgexpand.c:4014
0xbff943 expand_gimple_basic_block
../../gcc/gcc/cfgexpand.c:6056
0xc01bea execute
../../gcc/gcc/cfgexpand.c:6782
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See  for instructions.

It looks very similar to PR95830, but I'm not sure if they are really related.

[Bug driver/47785] GCC with -flto does not pass -Wa/-Xassembler options to the assembler

2021-06-19 Thread gcc--- via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47785

--- Comment #21 from Thomas Weißschuh  ---
The commited fix produces false positives for assembler options that do not
influence the compilation output directly.
For example "-a=$FILE" to create assembler listings. (Whose target files have
to differ between different input files by design.)

[Bug target/100760] [mips + msa] ICE: maximum number of generated reload insns per insn achieved

2021-06-19 Thread xry111 at mengyan1223 dot wang via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100760

Xi Ruoyao  changed:

   What|Removed |Added

 CC||xry111 at mengyan1223 dot wang

--- Comment #1 from Xi Ruoyao  ---
Patch proposed: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573213.html

[Bug target/100761] [mips+msa] ICE when using __builtin_convertvector to convert from u8x8 to u8x16

2021-06-19 Thread xry111 at mengyan1223 dot wang via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100761

Xi Ruoyao  changed:

   What|Removed |Added

 CC||xry111 at mengyan1223 dot wang

--- Comment #1 from Xi Ruoyao  ---
Patch proposed: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573213.html

[Bug target/100762] [mips+msa] ICE when comparing 64 bit vectors

2021-06-19 Thread xry111 at mengyan1223 dot wang via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100762

--- Comment #4 from Xi Ruoyao  ---
Patch proposed: https://gcc.gnu.org/pipermail/gcc-patches/2021-June/573213.html

[Bug libstdc++/95833] Incorrect static_assert in std::reduce overload taking a binary functor

2021-06-19 Thread TonyELewis at hotmail dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95833

--- Comment #9 from Tony E Lewis  ---
Great. I confirm my original example code now compiles and runs cleanly on
Compiler Explorer. Thanks very much for this.

And thanks to OP for the report.