From patchwork Thu Oct 16 19:01:16 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: 3252 Received: (qmail 26097 invoked by alias); 16 Oct 2014 19:01:20 -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 26086 invoked by uid 89); 16 Oct 2014 19:01:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS, T_RP_MATCHES_RCVD autolearn=ham version=3.3.2 X-HELO: mail-ob0-f173.google.com Received: from mail-ob0-f173.google.com (HELO mail-ob0-f173.google.com) (209.85.214.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Thu, 16 Oct 2014 19:01:18 +0000 Received: by mail-ob0-f173.google.com with SMTP id wp4so3421642obc.4 for ; Thu, 16 Oct 2014 12:01:17 -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:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=UnOR+iBtYWnYqzs0fqfpf7boj6XNg29q/Cyr9QVcatw=; b=BMcBId/IONG5z1VYZxZJtsnnJWp+oUFXzC6THkl5Ewa2c6OaZWwlmXJnv/x+3Obzk0 rid/QFAQRwD7K8odRHRgnsRxjsH3j629pK3WUnibvz7o+yNkfBG7LuBZ+U8ulObSsH5F Ve6AX/W8FHD06a0N+IoK4qTHlJVyw3buj+DvH2jHLa2LJ86cz3XSYk6Xy+L5U0q3+3fu duelqJEap+ff6B7V3dNmpE8L2s/MQ79EPZ+AV6y7+kgRSTRNjmShfjNCYXz2SW7yLvtq 8QLnsQKtJwKiSTTbSeVjmfJFXdGEUH8ll2NEo6kSHjmLg24BlgJMfGMRSF9/ehouyd3e RXNQ== X-Gm-Message-State: ALoCoQm2TWIcgKMiE/b2Efi68pSxNfngOZkm+EsuvK0WSDJL3Wdrvj+jwQ7YHOkFNOEx/b80Cpd7 MIME-Version: 1.0 X-Received: by 10.202.48.212 with SMTP id w203mr2496944oiw.30.1413486076977; Thu, 16 Oct 2014 12:01:16 -0700 (PDT) Received: by 10.202.197.13 with HTTP; Thu, 16 Oct 2014 12:01:16 -0700 (PDT) In-Reply-To: References: Date: Thu, 16 Oct 2014 12:01:16 -0700 Message-ID: Subject: Re: [PATCH] Guard a call to TYPE_TARGET_TYPE in gnuv3_pass_by_reference From: Siva Chandra To: Doug Evans , gdb-patches Cc: Sergio Durigan Junior , Pedro Alves X-IsSubscribed: yes The patch updated with a test case is attached. gdb/ChangeLog: * gnu-v3-abi.c (gnuv3_pass_by_reference): Call TYPE_TARGET_TYPE on the arg type of a constructor only if it is of reference type. gdb/testsuite/ChangeLog: * gdb.cp/non-trivial-retval.cc: Add a test case. * gdb.cp/non-trivial-retval.exp: Add a test. diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c index a6c6f9f..b960aa3 100644 --- a/gdb/gnu-v3-abi.c +++ b/gdb/gnu-v3-abi.c @@ -1320,13 +1320,15 @@ gnuv3_pass_by_reference (struct type *type) if (TYPE_NFIELDS (fieldtype) == 2) { struct type *arg_type = TYPE_FIELD_TYPE (fieldtype, 1); - struct type *arg_target_type; - arg_target_type = check_typedef (TYPE_TARGET_TYPE (arg_type)); + if (TYPE_CODE (arg_type) == TYPE_CODE_REF) + { + struct type *arg_target_type; - if (TYPE_CODE (arg_type) == TYPE_CODE_REF - && class_types_same_p (arg_target_type, type)) - return 1; + arg_target_type = check_typedef (TYPE_TARGET_TYPE (arg_type)); + if (class_types_same_p (arg_target_type, type)) + return 1; + } } } diff --git a/gdb/testsuite/gdb.cp/non-trivial-retval.cc b/gdb/testsuite/gdb.cp/non-trivial-retval.cc index 8382f40..aeb7875 100644 --- a/gdb/testsuite/gdb.cp/non-trivial-retval.cc +++ b/gdb/testsuite/gdb.cp/non-trivial-retval.cc @@ -63,6 +63,33 @@ f2 (int i1, int i2) return b; } +class B1 +{ +public: + B1 () {} + B1 (int i); /* Put this decl before the copy-ctor decl. */ + B1 (const B1 &obj); + + int b1; +}; + +B1::B1 (const B1 &obj) +{ + b1 = obj.b1; +} + +B1::B1 (int i) : b1 (i) { } + +B1 +f22 (int i1, int i2) +{ + B1 b1; + + b1.b1 = i1 + i2; + + return b1; +} + class C { public: diff --git a/gdb/testsuite/gdb.cp/non-trivial-retval.exp b/gdb/testsuite/gdb.cp/non-trivial-retval.exp index 7934946..3450a94 100644 --- a/gdb/testsuite/gdb.cp/non-trivial-retval.exp +++ b/gdb/testsuite/gdb.cp/non-trivial-retval.exp @@ -32,5 +32,6 @@ gdb_continue_to_breakpoint "Break here" gdb_test "p f1 (i1, i2)" ".* = {a = 123}" "p f1 (i1, i2)" gdb_test "p f2 (i1, i2)" ".* = {b = 123}" "p f2 (i1, i2)" +gdb_test "p f22 (i1, i2)" ".* = {b1 = 123}" "p f22 (i1, i2)" gdb_test "p f3 (i1, i2)" ".* = {.* c = 123}" "p f3 (i1, i2)" gdb_test "p f4 (i1, i2)" ".* = {.* e = 123}" "p f4 (i1, i2)"