From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id B57AB3858D34 for ; Mon, 27 May 2024 03:29:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B57AB3858D34 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B57AB3858D34 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716780591; cv=none; b=NoQuLU6vb1OCHRQtCYxY5Iv0j8SxsytJZtDcXAA7baugxypbzWRLRe7IAmaZmvuz+YEpsjQb+mjTaWKelgq3oAdFoThLFdXWN0bEXBEpa2TTTzy0JLqZ4//1oPDbNnKPnpFQ8nFLvfhRGRRma3NRqr6Hfa4K6CKJb8aZ+Cd0lTY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716780591; c=relaxed/simple; bh=tV+Z+3mspHFKqJMNdEik0gKQTTcMZRzNrmnS7EucUn4=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-Id:MIME-Version; b=pVHm9yiFVQnimtvMfeDJTupA6H9D1l0pneEqw3WS8Q9abyIeMC0qQsIRPAnbcvP0Qx8p1NFhQP/Af2lE+csSSbAs5J1wmdj1CAY4/Vj0H4r63MdWkSohgbivWK7TjEPpm06w3XMrlWny5YfIcp24DSN4QlWC+iYbzEt4TAhNVh4= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 7425221BB1 for ; Mon, 27 May 2024 03:29:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1716780587; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZtubFtJhcs6YbHyMFOI0HNqVqWUL0aSS87TECVT9DHw=; b=BsrA/+MSfiJiY5Q+gQMCP2/ZtgiNsQRDyNpE+WQMPJ5UtNZ/ZBgMsm50+ThRZ1zlAMffSF AG1Cqdrx6zT0U2kqI8l4TV+KkJDmYDfXrQJl3ZUu5hI2YyYty7XWDwqtJwitMHD4s4slcB UR00SUfxkWRvRyQ7rmqQ9nhQRleWuTA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1716780587; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZtubFtJhcs6YbHyMFOI0HNqVqWUL0aSS87TECVT9DHw=; b=hRLupOBakW0fTfreDBSlxQYxFvY1gAJIc71EJ/FXv2nuJ5msvBtHbJYrk4SVRg1eGPP165 eN4TGU52P15pdJDQ== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1716780587; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZtubFtJhcs6YbHyMFOI0HNqVqWUL0aSS87TECVT9DHw=; b=BsrA/+MSfiJiY5Q+gQMCP2/ZtgiNsQRDyNpE+WQMPJ5UtNZ/ZBgMsm50+ThRZ1zlAMffSF AG1Cqdrx6zT0U2kqI8l4TV+KkJDmYDfXrQJl3ZUu5hI2YyYty7XWDwqtJwitMHD4s4slcB UR00SUfxkWRvRyQ7rmqQ9nhQRleWuTA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1716780587; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZtubFtJhcs6YbHyMFOI0HNqVqWUL0aSS87TECVT9DHw=; b=hRLupOBakW0fTfreDBSlxQYxFvY1gAJIc71EJ/FXv2nuJ5msvBtHbJYrk4SVRg1eGPP165 eN4TGU52P15pdJDQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 5A69013A6C for ; Mon, 27 May 2024 03:29:47 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id CMXXFCv+U2ZLNwAAD6G6ig (envelope-from ) for ; Mon, 27 May 2024 03:29:47 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 2/3] [gdb/exp] Fix gdb.fortran/intrinsics.exp fail on arm Date: Mon, 27 May 2024 05:29:43 +0200 Message-Id: <20240527032944.19208-2-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 In-Reply-To: <20240527032944.19208-1-tdevries@suse.de> References: <20240527032944.19208-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Level: X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; FUZZY_BLOCKED(0.00)[rspamd.com]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.80 X-Spam-Status: No, score=-12.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: When running test-case gdb.fortran/intrinsics.exp on arm-linux, I get: ... (gdb) p cmplx (4,4,16)^M /home/linux/gdb/src/gdb/f-lang.c:1002: internal-error: eval_op_f_cmplx: \ Assertion `kind_arg->code () == TYPE_CODE_COMPLEX' failed.^M A problem internal to GDB has been detected,^M further debugging may prove unreliable.^M ----- Backtrace -----^M FAIL: gdb.fortran/intrinsics.exp: p cmplx (4,4,16) (GDB internal error) ... The problem is that 16-byte floats are unsupported: ... $ gfortran test.f90 test.f90:2:17: 2 | REAL(kind=16) :: foo = 1 | 1 Error: Kind 16 not supported for type REAL at (1) ... and consequently we end up with a builtin_real_s16 and builtin_complex_s16 with code TYPE_CODE_ERROR. Fix this by bailing out asap when encountering such a type. Without this patch we're able to do the rather useless: ... (gdb) ptype real*16 type = real*16 (gdb) ptype real_16 type = real*16 ... but with this patch we get: ... (gdb) ptype real*16 unsupported kind 16 for type real*4 (gdb) ptype real_16 unsupported type real*16 ... Tested on arm-linux. PR fortran/30537 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30537 --- gdb/f-exp.y | 39 +++++++++++++++++------- gdb/testsuite/gdb.fortran/intrinsics.exp | 8 +++-- gdb/testsuite/gdb.fortran/type-kinds.exp | 22 ++++++++++--- gdb/testsuite/gdb.fortran/types.exp | 19 +++++++++++- 4 files changed, 70 insertions(+), 18 deletions(-) diff --git a/gdb/f-exp.y b/gdb/f-exp.y index bdf9c32a81b..259f274d341 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -754,7 +754,11 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier */ | REAL_S8_KEYWORD { $$ = parse_f_type (pstate)->builtin_real_s8; } | REAL_S16_KEYWORD - { $$ = parse_f_type (pstate)->builtin_real_s16; } + { $$ = parse_f_type (pstate)->builtin_real_s16; + if ($$->code () == TYPE_CODE_ERROR) + error (_("unsupported type %s"), + TYPE_SAFE_NAME ($$)); + } | COMPLEX_KEYWORD { $$ = parse_f_type (pstate)->builtin_complex; } | COMPLEX_S4_KEYWORD @@ -762,7 +766,11 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier */ | COMPLEX_S8_KEYWORD { $$ = parse_f_type (pstate)->builtin_complex_s8; } | COMPLEX_S16_KEYWORD - { $$ = parse_f_type (pstate)->builtin_complex_s16; } + { $$ = parse_f_type (pstate)->builtin_complex_s16; + if ($$->code () == TYPE_CODE_ERROR) + error (_("unsupported type %s"), + TYPE_SAFE_NAME ($$)); + } | SINGLE PRECISION { $$ = parse_f_type (pstate)->builtin_real;} | DOUBLE PRECISION @@ -1156,12 +1164,9 @@ push_kind_type (LONGEST val, struct type *type) type_stack->push (tp_kind); } -/* Called when a type has a '(kind=N)' modifier after it, for example - 'character(kind=1)'. The BASETYPE is the type described by 'character' - in our example, and KIND is the integer '1'. This function returns a - new type that represents the basetype of a specific kind. */ +/* Helper function for convert_to_kind_type. */ static struct type * -convert_to_kind_type (struct type *basetype, int kind) +convert_to_kind_type_1 (struct type *basetype, int kind) { if (basetype == parse_f_type (pstate)->builtin_character) { @@ -1211,13 +1216,25 @@ convert_to_kind_type (struct type *basetype, int kind) return parse_f_type (pstate)->builtin_integer_s8; } - error (_("unsupported kind %d for type %s"), - kind, TYPE_SAFE_NAME (basetype)); - - /* Should never get here. */ return nullptr; } +/* Called when a type has a '(kind=N)' modifier after it, for example + 'character(kind=1)'. The BASETYPE is the type described by 'character' + in our example, and KIND is the integer '1'. This function returns a + new type that represents the basetype of a specific kind. */ +static struct type * +convert_to_kind_type (struct type *basetype, int kind) +{ + struct type *res = convert_to_kind_type_1 (basetype, kind); + + if (res == nullptr || res->code () == TYPE_CODE_ERROR) + error (_("unsupported kind %d for type %s"), + kind, TYPE_SAFE_NAME (basetype)); + + return res; +} + struct f_token { /* The string to match against. */ diff --git a/gdb/testsuite/gdb.fortran/intrinsics.exp b/gdb/testsuite/gdb.fortran/intrinsics.exp index 60c79f956dc..060bb53db97 100644 --- a/gdb/testsuite/gdb.fortran/intrinsics.exp +++ b/gdb/testsuite/gdb.fortran/intrinsics.exp @@ -112,10 +112,14 @@ gdb_test "ptype cmplx (4,4)" "= complex\\*4" gdb_test "p cmplx (-14,-4)" "= \\(-14,-4\\)" gdb_test "p cmplx (4,4,4)" "\\(4,4\\)" gdb_test "p cmplx (4,4,8)" "\\(4,4\\)" -gdb_test "p cmplx (4,4,16)" "\\(4,4\\)" +set re_unsupported_kind_16 \ + [string_to_regexp "unsupported kind 16 for type complex*4"] +gdb_test "p cmplx (4,4,16)" \ + ([string_to_regexp " = (4,4)"]|$re_unsupported_kind_16) gdb_test "ptype cmplx (4,4,4)" "= complex\\*4" gdb_test "ptype cmplx (4,4,8)" "= complex\\*8" -gdb_test "ptype cmplx (4,4,16)" "= complex\\*16" +gdb_test "ptype cmplx (4,4,16)" \ + ([string_to_regexp " = complex*16"]|$re_unsupported_kind_16) gdb_test "p cmplx (4,4,1)" "unsupported kind 1 for type complex\\*4" gdb_test "p cmplx (4,4,-1)" "unsupported kind -1 for type complex\\*4" diff --git a/gdb/testsuite/gdb.fortran/type-kinds.exp b/gdb/testsuite/gdb.fortran/type-kinds.exp index ab5f19f97a4..a6f2aa4e870 100644 --- a/gdb/testsuite/gdb.fortran/type-kinds.exp +++ b/gdb/testsuite/gdb.fortran/type-kinds.exp @@ -43,12 +43,20 @@ proc test_basic_parsing_of_type_kinds {} { test_cast_1_to_type_kind "complex" "" "\\(1,0\\)" "8" test_cast_1_to_type_kind "complex" "4" "\\(1,0\\)" "8" test_cast_1_to_type_kind "complex" "8" "\\(1,0\\)" "16" - test_cast_1_to_type_kind "complex" "16" "\\(1,0\\)" "32" + set re_unsupported_kind \ + [string_to_regexp "unsupported kind 16 for type complex*4"] + test_cast_1_to_type_kind "complex" "16" \ + [string_to_regexp (1,0)]|$re_unsupported_kind \ + 32|$re_unsupported_kind test_cast_1_to_type_kind "real" "" "1" "4" test_cast_1_to_type_kind "real" "4" "1" "4" test_cast_1_to_type_kind "real" "8" "1" "8" - test_cast_1_to_type_kind "real" "16" "1" "16" + set re_unsupported_kind \ + [string_to_regexp "unsupported kind 16 for type real*4"] + test_cast_1_to_type_kind "real" "16" \ + 1|$re_unsupported_kind \ + 16|$re_unsupported_kind test_cast_1_to_type_kind "logical" "" "\\.TRUE\\." "4" test_cast_1_to_type_kind "logical" "1" "\\.TRUE\\." "1" @@ -83,11 +91,17 @@ proc test_old_star_type_sizes {} { gdb_test "p ((complex*4) 1)" " = \\(1,0\\)" gdb_test "p ((complex*8) 1)" " = \\(1,0\\)" - gdb_test "p ((complex*16) 1)" " = \\(1,0\\)" + set re_unsupported_kind \ + [string_to_regexp "unsupported kind 16 for type complex*4"] + gdb_test "p ((complex*16) 1)" \ + [string_to_regexp " = (1,0)"]|$re_unsupported_kind gdb_test "p ((real*4) 1)" " = 1" gdb_test "p ((real*8) 1)" " = 1" - gdb_test "p ((real*16) 1)" " = 1" + set re_unsupported_kind \ + [string_to_regexp "unsupported kind 16 for type real*4"] + gdb_test "p ((real*16) 1)" \ + "( = 1|$re_unsupported_kind)" gdb_test "p ((logical*1) 1)" " = \\.TRUE\\." gdb_test "p ((logical*4) 1)" " = \\.TRUE\\." diff --git a/gdb/testsuite/gdb.fortran/types.exp b/gdb/testsuite/gdb.fortran/types.exp index 83b109869e6..edbf5abee97 100644 --- a/gdb/testsuite/gdb.fortran/types.exp +++ b/gdb/testsuite/gdb.fortran/types.exp @@ -94,7 +94,24 @@ proc test_primitive_types_known {} { # While TYPE_KIND is allowed as input, GDB will always return the # Fortran notation TYPE*KIND regsub -all "_" $type "\*" type_res - gdb_test "ptype $type" [string_to_regexp "type = $type_res"] + set re [string_to_regexp "type = $type_res"] + switch $type { + real*16 - complex*16 { + regexp {^[^*_]*} $type base + set re_unsupported \ + [string_to_regexp \ + "unsupported kind 16 for type $base*4"] + set re ($re|$re_unsupported) + } + real_16 - complex_16 { + set re_unsupported \ + [string_to_regexp \ + "unsupported type $type_res"] + set re ($re|$re_unsupported) + } + } + + gdb_test "ptype $type" $re } } -- 2.35.3