Re: Refactor to eliminate cast-away-const in pg_dump object sort comparator - Mailing list pgsql-hackers

From Peter Eisentraut
Subject Re: Refactor to eliminate cast-away-const in pg_dump object sort comparator
Date
Msg-id 0f7bab70-7836-4927-acb6-970c9f769a59@eisentraut.org
Whole thread Raw
In response to Re: Refactor to eliminate cast-away-const in pg_dump object sort comparator  (Chao Li <li.evan.chao@gmail.com>)
Responses Re: Refactor to eliminate cast-away-const in pg_dump object sort comparator
List pgsql-hackers
On 30.12.25 10:03, Chao Li wrote:
> Thanks a lot for pointing out the error. v3 has reverted the changes to 
> be the same as v1 and rebased.

The explanation of this patch doesn't seem right.  The commit message 
says "... eliminate cast-away-const ...", but that is not what is 
happening in the code.  For example, in

  static int
  DOTypeNameCompare(const void *p1, const void *p2)
  {
-    DumpableObject *obj1 = *(DumpableObject *const *) p1;
-    DumpableObject *obj2 = *(DumpableObject *const *) p2;
+    const DumpableObject *obj1 = *(DumpableObject *const *) p1;
+    const DumpableObject *obj2 = *(DumpableObject *const *) p2;

p1 is of type pointer-to-const-void, which is then cast into 
pointer-to-const-pointer-to-DumpableObject (which preserves the 
qualifier, because it's pointer-to-const-xxx on both sides), which is 
then dereferenced to result in type const-pointer-to-DumpableObject 
(type DumpableObject * const, not const DumpableObject *), which is then 
assigned by value to obj1 of type pointer-to-DumpableObject.  This is 
all entirely correct.

Now there is nothing wrong with making the receiving obj1 have an 
additional const qualification, if that's the promise you want to make 
about it for that scope.  But that's separate from preserving the 
qualifier on p1.  And it's incorrect to claim that this is fixing an 
existing cast-away-const issue.

Independent of that, there appears to be some not quite finished code here:

-        AttrDefInfo *adobj1 = *(AttrDefInfo *const *) p1;
-        AttrDefInfo *adobj2 = *(AttrDefInfo *const *) p2;
+        const AttrDefInfo *adobj1 = p1;//*(AttrDefInfo *const *) p1;
+        const AttrDefInfo *adobj2 = *(AttrDefInfo *const *) p2;




pgsql-hackers by date:

Previous
From: Jakub Wartak
Date:
Subject: Re: confusing results from pg_get_replication_slots()
Next
From: Tomas Vondra
Date:
Subject: Re: index prefetching