From: sami wagiaalla <swagiaal@redhat.com>
To: gdb-patches@sourceware.org
Subject: Re: [patch 2/2] Fix overload resolution of int* vs void*
Date: Fri, 15 Oct 2010 14:46:00 -0000 [thread overview]
Message-ID: <4CB8691D.3000209@redhat.com> (raw)
In-Reply-To: <m34ocqcctf.fsf@fleche.redhat.com>
[-- Attachment #1: Type: text/plain, Size: 381 bytes --]
> Sami> Having typed this out, I think POINTER_CONVERSION_BADNESS should be
> Sami> renamed to BOOL_PTR_CONVERSION_BADNESS and given a rank of 3. And all
> Sami> other conversions outlawed. I'll do this in and test it another
> Sami> patch. This patch really only deals with the first clauses of the
> Sami> nested switch statements.
>
> Thanks.
Patch attached as promised.
[-- Attachment #2: overload_pointer_to_bool.patch --]
[-- Type: text/x-patch, Size: 4223 bytes --]
Support pointer to bool conversion.
2010-10-13 Sami Wagiaalla <swagiaal@redhat.com>
* gdbtypes.h: Introduce BOOL_PTR_CONVERSION_BADNESS.
* gdbtypes.c (rank_one_type): Use BOOL_PTR_CONVERSION_BADNESS
for conversion.
Make all other conversions illegal.
2010-10-13 Sami Wagiaalla <swagiaal@redhat.com>
* gdb.cp/converts.exp: Test pointer to bool conversion.
Test pointer to long conversion.
* gdb.cp/oranking.exp: Removed relevant kfail.
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index adced8e..5f6e6d8 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -2225,7 +2225,6 @@ rank_one_type (struct type *parm, struct type *arg)
case TYPE_CODE_CHAR:
case TYPE_CODE_RANGE:
case TYPE_CODE_BOOL:
- return POINTER_CONVERSION_BADNESS;
default:
return INCOMPATIBLE_TYPE_BADNESS;
}
@@ -2403,8 +2402,9 @@ rank_one_type (struct type *parm, struct type *arg)
case TYPE_CODE_RANGE:
case TYPE_CODE_ENUM:
case TYPE_CODE_FLT:
+ return INCOMPATIBLE_TYPE_BADNESS;
case TYPE_CODE_PTR:
- return BOOLEAN_CONVERSION_BADNESS;
+ return BOOL_PTR_CONVERSION_BADNESS;
case TYPE_CODE_BOOL:
return 0;
default:
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 62ade5f..6119114 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -1409,12 +1409,10 @@ extern int is_unique_ancestor (struct type *, struct value *);
#define FLOAT_CONVERSION_BADNESS 2
/* Badness of integer<->floating conversions */
#define INT_FLOAT_CONVERSION_BADNESS 2
-/* Badness of converting to a boolean */
-#define BOOLEAN_CONVERSION_BADNESS 2
-/* Badness of pointer conversion */
-#define POINTER_CONVERSION_BADNESS 2
/* Badness of conversion of pointer to void pointer */
#define VOID_PTR_CONVERSION_BADNESS 2
+/* Badness of conversion of pointer to boolean. */
+#define BOOL_PTR_CONVERSION_BADNESS 3
/* Badness of converting derived to base class */
#define BASE_CONVERSION_BADNESS 2
/* Badness of converting from non-reference to reference */
diff --git a/gdb/testsuite/gdb.cp/converts.cc b/gdb/testsuite/gdb.cp/converts.cc
index b5e7bde..34b6927 100644
--- a/gdb/testsuite/gdb.cp/converts.cc
+++ b/gdb/testsuite/gdb.cp/converts.cc
@@ -14,7 +14,9 @@ int foo1_2 (char[]) {return 12;}
int foo1_3 (int*) {return 13;}
int foo1_4 (A*) {return 14;}
int foo1_5 (void*) {return 15;}
-int foo1_6 (void**) {return 15;}
+int foo1_6 (void**) {return 16;}
+int foo1_7 (bool) {return 17;}
+int foo1_8 (long) {return 18;}
int foo2_1 (char** ) {return 21;}
int foo2_2 (char[][1]) {return 22;}
@@ -40,7 +42,9 @@ int main()
foo1_3 ((int*)bp); // ..pointer of wrong type
foo1_4 (bp); // ..ancestor pointer
foo1_5 (bp); // ..void pointer
- foo1_6 ((void**)bp); // ..void pointer
+ foo1_6 ((void**)bp); // ..void pointer pointer
+ foo1_7 (bp); // ..boolean
+ foo1_8 ((long)bp); // ..long int
char **b; // pointer pointer to..
char ba[1][1];
diff --git a/gdb/testsuite/gdb.cp/converts.exp b/gdb/testsuite/gdb.cp/converts.exp
index 121bcad..4e4c2ea 100644
--- a/gdb/testsuite/gdb.cp/converts.exp
+++ b/gdb/testsuite/gdb.cp/converts.exp
@@ -40,6 +40,9 @@ gdb_test "p foo1_3 (a)" "Cannot resolve.*" "pointer to pointer of wrong type"
gdb_test "p foo1_3 (bp)" "Cannot resolve.*" "pointer to pointer of wrong type"
gdb_test "p foo1_4 (bp)" "= 14" "pointer to ancestor pointer"
gdb_test "p foo1_5 (bp)" "= 15" "pointer to void pointer"
+gdb_test "p foo1_6 (bp)" "Cannot resolve.*" "pointer to void pointer pointer"
+gdb_test "p foo1_7 (bp)" "= 17" "pointer to boolean"
+gdb_test "p foo1_8 (bp)" "Using non-standard.*" "pointer to long int"
gdb_test "p foo1_5 (b)" "= 15" "pointer pointer to void pointer"
gdb_test "p foo2_1 (b)" "= 21" "pointer pointer to pointer pointer"
diff --git a/gdb/testsuite/gdb.cp/oranking.exp b/gdb/testsuite/gdb.cp/oranking.exp
index f06933a..f1efb77 100644
--- a/gdb/testsuite/gdb.cp/oranking.exp
+++ b/gdb/testsuite/gdb.cp/oranking.exp
@@ -52,7 +52,6 @@ setup_kfail "gdb/12098" *-*-*
gdb_test "p foo4(&a)" "24"
gdb_test "p test5()" "26"
-setup_kfail "gdb/12098" *-*-*
gdb_test "p foo5(c)" "26"
gdb_test "p test6()" "28"
next prev parent reply other threads:[~2010-10-15 14:46 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-30 15:24 [patch] " sami wagiaalla
2010-08-30 16:13 ` sami wagiaalla
2010-08-30 20:01 ` Tom Tromey
2010-10-08 18:39 ` [patch 1/2] " sami wagiaalla
2010-10-08 18:54 ` Tom Tromey
2010-10-08 19:35 ` sami wagiaalla
2010-10-08 21:30 ` Tom Tromey
2010-10-08 19:05 ` [patch 2/2] " sami wagiaalla
2010-10-08 20:46 ` Eli Zaretskii
2010-10-08 21:10 ` sami wagiaalla
2010-10-08 22:54 ` Tom Tromey
2010-10-12 20:01 ` sami wagiaalla
2010-10-12 20:41 ` Tom Tromey
2010-10-13 15:16 ` sami wagiaalla
2010-10-13 15:49 ` Tom Tromey
2010-10-13 18:29 ` sami wagiaalla
2010-10-15 14:46 ` sami wagiaalla [this message]
2010-10-15 22:48 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4CB8691D.3000209@redhat.com \
--to=swagiaal@redhat.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox