https://gcc.gnu.org/g:5957ce932fc83b778d6881a375d50147ac6ca9bd

commit r16-7100-g5957ce932fc83b778d6881a375d50147ac6ca9bd
Author: Andrew Pinski <[email protected]>
Date:   Tue Jan 27 16:55:45 2026 -0800

    waccess: Fix handling of extended builtin types [PR123849]
    
    So DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE is not being handled
    from the demangler in new_delete_mismatch_p. This adds the handling,
    just like DEMANGLE_COMPONENT_BUILTIN_TYPE as there is no simple way
    to compare the type you have to call into the demanager to do it
    instead.
    
    Bootstrapped and tested on x86_64-linux-gnu.
    
            PR tree-optimization/123849
    
    gcc/ChangeLog:
    
            * gimple-ssa-warn-access.cc (new_delete_mismatch_p): Handle
            DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE like 
DEMANGLE_COMPONENT_BUILTIN_TYPE.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/warn/Wmismatched-new-delete-11.C: New test.
    
    Signed-off-by: Andrew Pinski <[email protected]>

Diff:
---
 gcc/gimple-ssa-warn-access.cc                      |  1 +
 .../g++.dg/warn/Wmismatched-new-delete-11.C        | 45 ++++++++++++++++++++++
 2 files changed, 46 insertions(+)

diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc
index df34da2bf960..c8f10cae32f5 100644
--- a/gcc/gimple-ssa-warn-access.cc
+++ b/gcc/gimple-ssa-warn-access.cc
@@ -1701,6 +1701,7 @@ new_delete_mismatch_p (const demangle_component &newc,
       return new_delete_mismatch_p (*newc.u.s_dtor.name,
                                    *delc.u.s_dtor.name);
 
+    case DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE:
     case DEMANGLE_COMPONENT_BUILTIN_TYPE:
       {
        /* The demangler API provides no better way to compare built-in
diff --git a/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-11.C 
b/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-11.C
new file mode 100644
index 000000000000..8191a812058c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wmismatched-new-delete-11.C
@@ -0,0 +1,45 @@
+// PR tree-optimization/123849
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wall" }
+// { dg-add-options float16 }
+// { dg-require-effective-target float16 }
+
+#include <new>
+
+template<typename Derived> class MatrixBase
+{
+public:
+  MatrixBase();
+};
+
+template<typename Derived>
+class PlainObjectBase : public MatrixBase<Derived>
+{
+public:
+  void *operator new(std::size_t size);
+  void operator delete(void * ptr);
+};
+
+template<typename _Scalar>
+class Matrix
+  : public PlainObjectBase<Matrix<_Scalar> >
+{
+};
+
+template<typename T>
+struct resource
+{
+  T& makeref() const
+  {
+    T* ret = new T;
+    return *ret;
+  }
+};
+
+
+using T = Matrix<_Float16>;
+
+void func(resource<T>& A)
+{
+  (void)A.makeref();
+}

Reply via email to