From patchwork Thu Jun 5 22:55:48 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Siva Chandra Reddy X-Patchwork-Id: 1343 Received: (qmail 31330 invoked by alias); 5 Jun 2014 22:55:55 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 31301 invoked by uid 89); 5 Jun 2014 22:55:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-wg0-f46.google.com Received: from mail-wg0-f46.google.com (HELO mail-wg0-f46.google.com) (74.125.82.46) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 05 Jun 2014 22:55:52 +0000 Received: by mail-wg0-f46.google.com with SMTP id b13so1735996wgh.29 for ; Thu, 05 Jun 2014 15:55:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:date:message-id:subject:from:to :content-type; bh=csSu/5XgvlFPwTivclMgFBtzA9337LvAGdDF8f3j3Z4=; b=csTbu2nWvX7PyHM8bOHsN2s8f0jO04gWcphPLvNAgXijY1MkYbprCBVtgAoPBjOoXm 0D/syAsovw7MSCfK8pEITBSYNxewDK/mLhNmch5d9Ob3EQ2EoobbVnYfm5MXnAsPeLjY pIXfrhVnbDAOCG29nA0nq7YY+Jq0gj9jE1DwZgtMI0y/8/pTOMEluHwyGwhyG4cDeXxz x0Wp1g5P1PCvdn+NJuWIONTUZD5IaxuHSYN5ge2wzDGdMyFw3kF6Hnnc8Mq81lT9Slv6 K6lNrI7F522B6QdvybkKY7ayv7Z26GiFLlh2peVAZLvabfRd03ZOyzPwzt6fLm1v5Y4T zKxQ== X-Gm-Message-State: ALoCoQl56aSnqDL3l1c++lsRmE2oTOOi/OU8ic9naiAxl+ToIiD7pMlJHxNIg0ckDBSeyKLoM2Pp MIME-Version: 1.0 X-Received: by 10.194.249.134 with SMTP id yu6mr1028285wjc.86.1402008949097; Thu, 05 Jun 2014 15:55:49 -0700 (PDT) Received: by 10.217.51.7 with HTTP; Thu, 5 Jun 2014 15:55:48 -0700 (PDT) Date: Thu, 5 Jun 2014 15:55:48 -0700 Message-ID: Subject: [PATCH v2] Fix for PR gdb/17017 From: Siva Chandra To: gdb-patches X-IsSubscribed: yes The attached patch fixes PR 17017 along the lines suggested by Pedro here: https://sourceware.org/ml/gdb-patches/2014-06/msg00212.html ChangeLog: 2014-06-05 Siva Chandra Reddy testsuite/ PR gdb/17017 * gdb.python/py-xmethods.cc: Add global function call counters and increment them in their respective functions. Remove "cout" statements. * gdb.python/py-xmethods.exp: Make tests check the global function call counters instead of depending on inferior IO. diff --git a/gdb/testsuite/gdb.python/py-xmethods.cc b/gdb/testsuite/gdb.python/py-xmethods.cc index 96637d8..96389fd 100644 --- a/gdb/testsuite/gdb.python/py-xmethods.cc +++ b/gdb/testsuite/gdb.python/py-xmethods.cc @@ -15,10 +15,6 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include - -using namespace std; - namespace dop { @@ -35,24 +31,30 @@ public: A::~A () { } +int a_plus_a = 0; + int A::operator+ (const A &obj) { - cout << "From CC :" << endl; + a_plus_a++; return a + obj.a; } +int a_minus_a = 0; + int A::operator- (const A &obj) { - cout << "From CC :" << endl; + a_minus_a++; return a - obj.a; } +int a_geta = 0; + int A::geta (void) { - cout << "From CC A::geta:" << endl; + a_geta++; return a; } @@ -62,10 +64,12 @@ public: virtual int geta (void); }; +int b_geta = 0; + int B::geta (void) { - cout << "From CC B::geta:" << endl; + b_geta++; return 2 * a; } @@ -100,30 +104,36 @@ class G T t; }; +int g_size_diff = 0; + template template int G::size_diff () { - cout << "From CC G<>::size_diff:" << endl; + g_size_diff++; return sizeof (T1) - sizeof (T); } +int g_size_mul = 0; + template template int G::size_mul () { - cout << "From CC G<>::size_mul:" << endl; + g_size_mul++; return M * sizeof (T); } +int g_mul = 0; + template template T G::mul (const T1 t1) { - cout << "From CC G<>::mul:" << endl; + g_mul++; return t1 * t; } diff --git a/gdb/testsuite/gdb.python/py-xmethods.exp b/gdb/testsuite/gdb.python/py-xmethods.exp index 97b6ffa..28786ed 100644 --- a/gdb/testsuite/gdb.python/py-xmethods.exp +++ b/gdb/testsuite/gdb.python/py-xmethods.exp @@ -40,25 +40,51 @@ gdb_breakpoint [gdb_get_line_number "Break here."] gdb_continue_to_breakpoint "Break here" ".*Break here.*" # Tests before loading the debug methods. -gdb_test "p a1 + a2" "From CC .*15" "Before: a1 + a2" -gdb_test "p a2 - a1" "From CC .*5" "Before: a1 - a2" -gdb_test "p b1 - a1" "From CC .*25" "Before: b1 - a1" -gdb_test "p a1.geta()" "From CC A::geta.*5" "Before: a1.geta()" +if {[get_integer_valueof "a1 + a2" 0] != 15 + || [get_integer_valueof "a_plus_a" 0] != 1} { + fail "Before: a1 + a2" +} +if {[get_integer_valueof "a2 - a1" 0] != 5 + || [get_integer_valueof "a_minus_a" 0] != 1} { + fail "Before: a2 - a1" +} +if {[get_integer_valueof "b1 - a1" 0] != 25 + || [get_integer_valueof "a_minus_a" 0] != 2} { + fail "Before: b1 - a1" +} +if {[get_integer_valueof "a1.geta()" 0] != 5 + || [get_integer_valueof "a_geta" 0] != 1} { + fail "Before: a1.geta()" +} gdb_test "p ++a1" "No symbol.*" "Before: ++a1" gdb_test "p a1.getarrayind(5)" "Couldn't find method.*" \ "Before: a1.getarrayind(5)" -gdb_test "p a_ptr->geta()" "From CC B::geta.*60" "Before: a_ptr->geta()" -gdb_test "p e.geta()" "From CC A::geta.*100" "Before: e.geta()" -gdb_test "p g.size_diff()" "From CC G<>::size_diff.*" \ - "Before: g.size_diff()" +if {[get_integer_valueof "a_ptr->geta()" 0] != 60 + || [get_integer_valueof "b_geta" 0] != 1} { + fail "Before: a_ptr.geta()" +} +if {[get_integer_valueof "e.geta()" 0] != 100 + || [get_integer_valueof "a_geta" 0] != 2} { + fail "Before: e.geta()" +} +# Since g.size_diff operates of sizes of int and float, do not check for +# actual result value as it could be different on different platforms. +gdb_test "p g.size_diff()" ".*" "Before: call g.size_diff()" +if {[get_integer_valueof "g_size_diff" 0] != 2} { + fail "Before: g.size_diff()" +} gdb_test "p g.size_diff()" "Couldn't find method.*" \ "Before: g.size_diff()" -gdb_test "p g.size_mul<2>()" "From CC G<>::size_mul.*" \ - "Before: g.size_mul<2>()" +if {[get_integer_valueof "g.size_mul<2>()" 0] == 0 + || [get_integer_valueof "g_size_mul" 0] != 2} { + fail "Before: g.size_mul<2>()" +} gdb_test "p g.size_mul<5>()" "Couldn't find method.*" \ "Before: g.size_mul<5>()" -gdb_test "p g.mul(2.0)" "From CC G<>::mul.*" \ - "Before: g.mul(2.0)" +if {[get_integer_valueof "g.mul(2.0)" 0] != 10 + || [get_integer_valueof "g_mul" 0] != 2} { + fail "Before: g.mul(2.0)" +} gdb_test "p g.mul('a')" "Couldn't find method.*" \ "Before: g.mul('a')" @@ -67,9 +93,15 @@ gdb_test_no_output "source ${xmethods_script}" "load the script file" # Tests after loading debug methods. gdb_test "p a1 + a2" "From Python .*15" "After: a1 + a2" -gdb_test "p a2 - a1" "From CC .*5" "After: a1 - a2" +if {[get_integer_valueof "a2 - a1" 0] != 5 + || [get_integer_valueof "a_minus_a" 0] != 3} { + fail "Before: a2 - a1" +} gdb_test "p b1 + a1" "From Python .*35" "After: b1 + a1" -gdb_test "p b1 - a1" "From CC .*25" "After: b1 - a1" +if {[get_integer_valueof "b1 - a1" 0] != 25 + || [get_integer_valueof "a_minus_a" 0] != 4} { + fail "Before: b1 - a1" +} gdb_test "p a1.geta()" "From Python .*5" "After: a1.geta()" gdb_test "p ++a1" "From Python .*6" "After: ++a1" gdb_test "p a1.getarrayind(5)" "From Python .*5" \