<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://sourceware.org/bugzilla/bugzilla.dtd">

<bugzilla version="4.0.10"
          urlbase="http://sourceware.org/bugzilla/"
          
          maintainer="overseers@sourceware.org"
>

    <bug>
          <bug_id>13356</bug_id>
          
          <creation_ts>2011-10-28 13:45:00 +0000</creation_ts>
          <short_desc>Be less strict about C++ overloading when calling functions from the inferior</short_desc>
          <delta_ts>2013-04-25 18:36:35 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>gdb</product>
          <component>gdb</component>
          <version>HEAD</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>7.6</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Richard Guenther">rguenth</reporter>
          <assigned_to name="Keith Seitz">keiths</assigned_to>
          <cc>keiths</cc>
    
    <cc>palves</cc>
    
    <cc>saurabh</cc>
    
    <cc>tromey</cc>
          <cf_gcchost></cf_gcchost>
          <cf_gcctarget></cf_gcctarget>
          <cf_gccbuild></cf_gccbuild>
          

      

      

      

          <long_desc isprivate="0">
            <commentid>51420</commentid>
            <who name="Richard Guenther">rguenth</who>
            <bug_when>2011-10-28 13:45:29 +0000</bug_when>
            <thetext>When debugging the C++ app

void foo (int *p) {}
int main() {}

gdb does not accept a constant as address

Temporary breakpoint 1, main () at t.C:2
2       int main() {}
(gdb) call foo(1)
Cannot resolve function foo to any overloaded instance

even though there is only a single possible overload candidate.

it&apos;s annoying to figure out and paste a cast to whatever specific
pointer type is required here when pasting an address from some
location.

gdb should be more forgiving than a C++ compiler here and do what I want.

Happens a lot to me when debugging gcc built with a C++ compiler.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>51422</commentid>
            <who name="Pedro Alves">palves</who>
            <bug_when>2011-10-28 15:33:08 +0000</bug_when>
            <thetext>&gt; void foo (int *p) {}
...
&gt; (gdb) call foo(1)
&gt; Cannot resolve function foo to any overloaded instance

You&apos;re example passes 1, but I suspect you&apos;re not doing that in practice, but instead, passing `0&apos;, like below, correct?

&gt; (gdb) call foo (0)
&gt; Cannot resolve function foo to any overloaded instance

This should work, as it is accepted by C++.  Allowing any other constant is of quite dubious value.

This is also PR13225, which is already fixed in mainline.

*** This bug has been marked as a duplicate of bug 13225 ***</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>51424</commentid>
            <who name="Pedro Alves">palves</who>
            <bug_when>2011-10-28 15:36:41 +0000</bug_when>
            <thetext>&gt; it&apos;s annoying to figure out and paste a cast to whatever specific
&gt; pointer type is required here when pasting an address from some
&gt; location.

Bah, sorry I need to learn to read.

I&apos;d be happier if gdb accepted (void*) instead of random integers though.  Maybe this should be an option.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>51502</commentid>
            <who name="Richard Guenther">rguenth</who>
            <bug_when>2011-11-02 08:34:48 +0000</bug_when>
            <thetext>(In reply to comment #2)
&gt; &gt; it&apos;s annoying to figure out and paste a cast to whatever specific
&gt; &gt; pointer type is required here when pasting an address from some
&gt; &gt; location.
&gt; 
&gt; Bah, sorry I need to learn to read.
&gt; 
&gt; I&apos;d be happier if gdb accepted (void*) instead of random integers though. 
&gt; Maybe this should be an option.

Sure, (void *) would be an improvement, though taking literal integers
would be nice as well (if there is no integer overload).</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>56895</commentid>
            <who name="">rguenther</who>
            <bug_when>2012-08-15 11:58:38 +0000</bug_when>
            <thetext>PING.  Now that GCC builds with a C++ compiler this starts to be _very_ _very_
annoying!

(gdb) call debug_tree (*expr_p)
 &lt;integer_cst 0x7ffff695d7c0 type &lt;integer_type 0x7ffff67fa5e8 int&gt; constant 9&gt;
(gdb) call debug_tree (0x7ffff67fa5e8)
Cannot resolve function debug_tree to any overloaded instance

bah!

(gdb) call debug_tree ((tree)0x7ffff67fa5e8)
 &lt;integer_type 0x7ffff67fa5e8 int public SI
    size &lt;integer_cst 0x7ffff6800100 type &lt;integer_type 0x7ffff67fa0a8 bitsizetype&gt; constant 32&gt;
    unit size &lt;integer_cst 0x7ffff6800120 type &lt;integer_type 0x7ffff67fa000 sizetype&gt; constant 4&gt;
    align 32 symtab 0 alias set -1 canonical type 0x7ffff67fa5e8 precision 32 min &lt;integer_cst 0x7ffff68000a0 -2147483648&gt; max &lt;integer_cst 0x7ffff68000c0 2147483647&gt;
    pointer_to_this &lt;pointer_type 0x7ffff68082a0&gt;&gt;

PLASE!</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>56977</commentid>
            <who name="cvs-commit@gcc.gnu.org">cvs-commit</who>
            <bug_when>2012-08-17 17:37:09 +0000</bug_when>
            <thetext>CVSROOT:	/cvs/src
Module name:	src
Changes by:	kseitz@sourceware.org	2012-08-17 17:37:03

Modified files:
	gdb            : ChangeLog gdbtypes.c gdbtypes.h language.h 
	                 language.c ada-lang.c c-lang.c d-lang.c 
	                 f-lang.c go-lang.c jv-lang.c m2-lang.c 
	                 objc-lang.c opencl-lang.c p-lang.c 
	gdb/testsuite  : ChangeLog 
	gdb/doc        : ChangeLog gdb.texinfo 
	gdb/testsuite/gdb.base: default.exp help.exp setshow.exp 
	gdb/testsuite/gdb.cp: converts.exp converts.cc 

Log message:
	PR c++/13356
	* gdbtypes.c (strict_type_checking): New variable.
	(show_strict_type_checking): New function.
	(rank_one_type): Return NS_POINTER_INTEGER_CONVERSION_BADNESS
	if strict type checking is disabled.
	(_initialize_gdbtypes): Add &quot;check type&quot; subcommand.
	* gdbtypes.h (NS_INTEGER_POINTER_CONVERSION_BADNESS): New struct.
	
	PR c++/13356
	* gdb.base/default.exp: Update all &quot;check type&quot; tests.
	* gdb.base/help.exp: Likewise.
	* gdb.base/setshow.exp: Likewise.
	* gdb.cp/converts.cc (foo1_type_check): New function.
	(foo2_type_check): New function.
	(foo3_type_check): New function.
	(main): Call new functions.
	* converts.exp: Add tests for integer-to-pointer conversions
	with/without strict type-checking.
	
	PR c++/13356
	* gdb.texinfo (Type and Range Checking): Remove warning.
	Remove spurious commas.
	Update text and examples for re-implementation of set/show
	check type.
	(C and C++ Type and Range Checks): Likewise.
	
	* language.h (type_mode): Remove.
	(type_check): Remove.
	(struct language_defn): Remove la_type_check.
	(STRICT_TYPE): Remove unused macro.
	(type_error): Remove.
	* language.c (set_type_range_case): Renamed to ...
	(set_range_case): ... this.  Update all callers.
	Remove type_mode/type_check.
	(type_mode): Remove.
	(type_check): Remove.
	(show_type_command): Remove.
	(set_type_command): Remove.
	(language_info): Remove type checking output.
	(type_error): Remove unused function.
	(range_error): Update comment.
	(unknown_language_defn): Remove la_type_check.
	(auto_language_defn): Likewise.
	(local_language_defn): Likewise.
	(_initialize_language): Remove &quot;check type&quot; subcommand.
	* ada-lang.c (ada_language_defn): Remove la_type_check.
	* c-lang.c (c_language_defn): Likewise.
	(cplus_language_defn): Likewise.
	(asm_language_defn): Likewise.
	(minimal_language_defn): Likewise.
	* d-lang.c (d_language_defn): Likewise.
	* f-lang.c (f_language_defn): Likewise.
	* go-lang.c (go_language_defn): Likewise.
	* jv-lang.c (java_language_defn): Likewise.
	* m2-lang.c (m2_language_defn): Likewise.
	* objc-lang.c (objc_language_defn): Likewise.
	* opencl-lang.c (opencl_language_defn): Likewise.
	* p-lang.c (pascal_language_defn): Likewise.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&amp;r1=1.14599&amp;r2=1.14600
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/gdbtypes.c.diff?cvsroot=src&amp;r1=1.240&amp;r2=1.241
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/gdbtypes.h.diff?cvsroot=src&amp;r1=1.170&amp;r2=1.171
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/language.h.diff?cvsroot=src&amp;r1=1.83&amp;r2=1.84
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/language.c.diff?cvsroot=src&amp;r1=1.111&amp;r2=1.112
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ada-lang.c.diff?cvsroot=src&amp;r1=1.373&amp;r2=1.374
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/c-lang.c.diff?cvsroot=src&amp;r1=1.101&amp;r2=1.102
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/d-lang.c.diff?cvsroot=src&amp;r1=1.11&amp;r2=1.12
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/f-lang.c.diff?cvsroot=src&amp;r1=1.74&amp;r2=1.75
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/go-lang.c.diff?cvsroot=src&amp;r1=1.1&amp;r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/jv-lang.c.diff?cvsroot=src&amp;r1=1.103&amp;r2=1.104
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/m2-lang.c.diff?cvsroot=src&amp;r1=1.65&amp;r2=1.66
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/objc-lang.c.diff?cvsroot=src&amp;r1=1.106&amp;r2=1.107
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/opencl-lang.c.diff?cvsroot=src&amp;r1=1.18&amp;r2=1.19
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/p-lang.c.diff?cvsroot=src&amp;r1=1.66&amp;r2=1.67
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/ChangeLog.diff?cvsroot=src&amp;r1=1.3340&amp;r2=1.3341
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/doc/ChangeLog.diff?cvsroot=src&amp;r1=1.1359&amp;r2=1.1360
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/doc/gdb.texinfo.diff?cvsroot=src&amp;r1=1.1002&amp;r2=1.1003
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/default.exp.diff?cvsroot=src&amp;r1=1.61&amp;r2=1.62
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/help.exp.diff?cvsroot=src&amp;r1=1.61&amp;r2=1.62
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.base/setshow.exp.diff?cvsroot=src&amp;r1=1.26&amp;r2=1.27
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.cp/converts.exp.diff?cvsroot=src&amp;r1=1.6&amp;r2=1.7
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/testsuite/gdb.cp/converts.cc.diff?cvsroot=src&amp;r1=1.3&amp;r2=1.4</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>56978</commentid>
            <who name="Keith Seitz">keiths</who>
            <bug_when>2012-08-17 17:40:11 +0000</bug_when>
            <thetext>I have committed a patchset to fix this. [Note the patchset is large because it contains a large cleanup of dead code.]

Please let me know if there are any further issues.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <commentid>61154</commentid>
            <who name="Keith Seitz">keiths</who>
            <bug_when>2013-04-25 18:36:35 +0000</bug_when>
            <thetext>*** Bug 15399 has been marked as a duplicate of this bug. ***</thetext>
          </long_desc>
      
      

    </bug>

</bugzilla>