Support pointer to bool conversion.
authorSami Wagiaalla <swagiaal@redhat.com>
Tue, 19 Oct 2010 16:07:25 +0000 (16:07 +0000)
committerSami Wagiaalla <swagiaal@redhat.com>
Tue, 19 Oct 2010 16:07:25 +0000 (16:07 +0000)
2010-10-19  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-19  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.

gdb/ChangeLog
gdb/gdbtypes.c
gdb/gdbtypes.h
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/converts.cc
gdb/testsuite/gdb.cp/converts.exp
gdb/testsuite/gdb.cp/oranking.exp

index bff8559eeb4bd10e0ab18da94bb9e18628bba8d6..d41d9703fcf35081beca526801bda5f378cba6a4 100644 (file)
@@ -1,3 +1,10 @@
+2010-10-19  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-18  Doug Evans  <dje@google.com>
 
        * c-typeprint.c (c_type_print_base, case TYPE_CODE_TYPEDEF): Verify
index 204bab596334935cc9da5e2d4a41b161ff5d1414..d08dbfe396c1e034aaa5946118fd9167ff3733ad 100644 (file)
@@ -2256,7 +2256,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;
        }
@@ -2434,8 +2433,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:
index e4dac492ea92457580f0fb15a436ed79159b4d73..5617a1d2265586f63c75cc434db2fde9759c1de6 100644 (file)
@@ -1415,12 +1415,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 */
index 9208bb42fcaaecb8d4b6876bd51125dc8ac52235..824796e0659dd99057c2e9d1c3b96e9a5a9d5d4d 100644 (file)
@@ -1,3 +1,9 @@
+2010-10-19  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.
+
 2010-10-18  Tom Tromey  <tromey@redhat.com>
 
        * gdb.python/py-prettyprint.exp (run_lang_tests): Test encoding
index b5e7bdea13342df2b0b7e41d0d64b59d059d8e5f..34b69273e6f9aba3b302094a23f3544bdb37e6d9 100644 (file)
@@ -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];
index 121bcad96185973fe2230cfc35224565b55bf823..4e4c2ea39ab861cba2078d135558f87f5e1d4510 100644 (file)
@@ -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"
index f06933a2e940c4a01d3b06b149f3d518eefd6b31..f1efb77283b9fd8c064b2d538e43b05e37b7b9b1 100644 (file)
@@ -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"