From patchwork Sat Sep 2 21:36:18 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Marchi X-Patchwork-Id: 22576 Received: (qmail 128232 invoked by alias); 2 Sep 2017 21:37:13 -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 128220 invoked by uid 89); 2 Sep 2017 21:37:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: sessmg23.ericsson.net Received: from sessmg23.ericsson.net (HELO sessmg23.ericsson.net) (193.180.251.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 02 Sep 2017 21:37:07 +0000 Received: from ESESSHC023.ericsson.se (Unknown_Domain [153.88.183.87]) by sessmg23.ericsson.net (Symantec Mail Security) with SMTP id 49.EF.22436.0842BA95; Sat, 2 Sep 2017 23:37:05 +0200 (CEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (153.88.183.145) by oa.msg.ericsson.com (153.88.183.87) with Microsoft SMTP Server (TLS) id 14.3.352.0; Sat, 2 Sep 2017 23:37:04 +0200 Received: from elxacz23q12.localdomain (80.216.43.226) by AM3PR07MB305.eurprd07.prod.outlook.com (2a01:111:e400:881b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.35.3; Sat, 2 Sep 2017 21:37:03 +0000 From: Simon Marchi To: CC: Simon Marchi Subject: [PATCH 2/3] Error out immediatly when using if command without args in command list Date: Sat, 2 Sep 2017 23:36:18 +0200 Message-ID: <1504388179-579-3-git-send-email-simon.marchi@ericsson.com> In-Reply-To: <1504388179-579-1-git-send-email-simon.marchi@ericsson.com> References: <1504388179-579-1-git-send-email-simon.marchi@ericsson.com> MIME-Version: 1.0 X-ClientProxiedBy: DB6P193CA0003.EURP193.PROD.OUTLOOK.COM (2603:10a6:6:29::13) To AM3PR07MB305.eurprd07.prod.outlook.com (2a01:111:e400:881b::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 84ce7066-23c2-4edc-8898-08d4f24ac051 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:AM3PR07MB305; X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB305; 3:6zyk3auNtx7tRJ6YRAgj5vY1tG/Skz/aRBnxiB+aD9SiNhO11sizMU4rXDmK9Zgo7V3PO3iETjuAnW2q4qG6STIrnbiS8RGbU60wvj02HmDBr1iH6h+qHT6EWkHesX81nBJ0cDXsj5829aQ5w29sacRKi+rzaRK8Wj4Sq9eee8NuzrY+2+HjcLR2Tn8khKh5WmG7vMtesHkhFuYMi+894YiemS6mIYL8+ylf750I4pHek5YvGlZpB47O5GPS846n; 25:KUZwWqoc5qG2iG4vY7DhmL04MOFRQYkA7v6cLMoRlQbRc/GJZw4+eM7/EQ1V6FyIKCJ96Dj5Bo098T9R1+dEAms7s3HnEuJHQDMFYpXB9gNU1l17rxSzoc7tXo7464qvohkyzXakNsKQvBrFbPa3vjy2P+NHdJSgxj2OW96dY5jvQURwpG+zfnm0hrSzJA7yo50gy75F492QnZvn/tcXw57TyXPfc3Vihhhsj6xc1A91+833XqhRjtmIaZlYJZC1GI4Scun5W/fLIuUFOgenAwYfQ9t89S9zqHj30RtYQTmaLa4q1oevgzCPuh7AIOPvIuWMijqwpswCpWIK8inc3A==; 31:tN8AiIwoCJXY0odEiDdd0JGn+uq03/dtMSx8XjiuVVRzo2WA3ZqLr6UYfFVFA56jOOkMma2Lh3kZmoQoCE2ewtJ4sqv3YpEL+T2wLdQpp81iYc20OhgC+YNXYUgcYAzCFIxBoef1qnMz95OQcHqHMvi8ylnmerhqocAqSbGNr/5TXfqKEIPodo2U7GcA+Aj27ZAz2gG/90Ygk1PpzMTJj21E/FXU1DlFS3d7X0isHYM= X-MS-TrafficTypeDiagnostic: AM3PR07MB305: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=simon.marchi@ericsson.com; X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB305; 20:hkLKBMcmDjlgAxWHyZuWxe4dvYqnjLVnG2ujU0SwgEkjgWcGAspQmm96QSAQkVDxawKIFnQlprcyi4e1kdEbOfKbkAESao0zwsqoCuzBcB3TPHC934Uh7rsAhoyp3RoWocw9zqtKpnk9pbHj5zWXk4Dar2pRlLun80QSJsUmv9Wb/hMfHCXG4qd9735Gqoq8din82FJ7tDh3aaMbe7uNot7T12QgzY83sPM1KwK3PrWT1VdEb63Vd1GATp3l+hHpZneXp5ToUs+8J3aX6h3yweEtDyuNFd5B1h8vAgLzLrFPVnsD/bmefiErJB8DFeflX1dbF9gzfhunq/OdmVPJYXnGJLlXQh0lVlwUatmw0lZjVse7HRQVw57uVyVxXnvK0Qf6FqwnueJgRiqk6fR7oTj4M3kgR3M5iP2k0M01cDIpCL+eToLq9hAoWEyK4LK75OlD73Yt0HFe55TZFVlVjgGs1XAezJYyqlq5dngON/n8uyvEEALaZ2zOhlo8hWtu; 4:Jhvy4xuwtnNgqn9biIZBi2c9ngOj8C47tvZCL/U/QA174L+FJx4kpbC3SWteWEwX7DBBEiYCI4KHGxYLDxJwzlXsAvnBOlfHnoixuyA2cQOPQ7pdGiywiJZgXzYVKz4KF8AX3g/LeZ/gPv1ezzq6piQ462LPJPRMnk0h2q5hTVs0UmasSnfstex370RF9gOM9QxtdhBxW3S0rccyyKUkt4vnbVLAuulparBcpWrByaE1nBtBvUWS9koDAar8ql13 X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6041248)(20161123558100)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:AM3PR07MB305; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:AM3PR07MB305; X-Forefront-PRVS: 04180B6720 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6009001)(199003)(189002)(54534003)(6116002)(3846002)(48376002)(50226002)(25786009)(68736007)(2351001)(7350300001)(47776003)(6512007)(76176999)(189998001)(97736004)(53936002)(66066001)(2361001)(50466002)(101416001)(50986999)(33646002)(2906002)(478600001)(107886003)(8676002)(6486002)(305945005)(36756003)(42186005)(4326008)(6916009)(5003940100001)(2950100002)(5660300001)(81156014)(81166006)(106356001)(86362001)(7736002)(105586002)(6666003)(6506006)(110136004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM3PR07MB305; H:elxacz23q12.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: ericsson.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM3PR07MB305; 23:Bc0L3Emv6dD/7585cbPnbXm+NQRSOgNAhXbwgxGiqs?= =?us-ascii?Q?KMXkIbkQP8xdBdrArtQEM6cXMcm2JlNcRElidBHKKhSA6O7czGKmYl0A72cs?= =?us-ascii?Q?PpfssX4goSCGMuyAh24ujca8Nv0g7NheWf/i/TvTHidk+9vxFh61nT61G9sg?= =?us-ascii?Q?vnB9O6bEVb1X5oxQQNhoBCxiGzCGO6w1BPLdzhXJbL2aIZEBLTS+FpAEaxtA?= =?us-ascii?Q?VK8+s55eiW/3qEvQD9IS1EeV7wwkDnDu0BrxgUmfs2VRaRhm37xs3dccpaqh?= =?us-ascii?Q?JShQDcuJ6Fk7D+tOMCqgotOHBFNSgzOdhzZhQ5r6ga1j84Cyg36ZbBYCuoRU?= =?us-ascii?Q?1FSHoOKfJrmqB4j/XoKLvdtZEyFGvMN++h1GuXsKLg7j1zm2+gmjQXipZf63?= =?us-ascii?Q?sllV7m1fFH/jj4iwleYLzsjg9OYiGYLvp+kOap6cFa3MvBWE8jqZX9orY8v1?= =?us-ascii?Q?V9wj5hEUY68/j6+QKtsRlAoSkvthPGuhltd8wakddSjimEnmTl2JHInvZsrd?= =?us-ascii?Q?/w2kT2tMzINmvkmJh0gxz1tg9AIZvlWK6Shi7V4jd8/MVeFsB+A8Zbu1Dr5W?= =?us-ascii?Q?Vnl2mCIjz3JXfhBIewBWiCYc8V7OJ/uvNakikOFoskliBUtR1IKrXcKPDKhA?= =?us-ascii?Q?gNv9dUveCHDqQ//2Eoq+Tissvr1I+bbd4IK0uMEQRW7Ga4oCmHUlUZERFXwO?= =?us-ascii?Q?64wE4PTiefl+PvqaOdivZt5SKBW/0nRaoim3P7eJreYeFESvzwJ7d3/d0Har?= =?us-ascii?Q?o1WMfFJFyrlBBCADsFPs/qw8m8y9bGMFQUd+2xr2r6HHrm4g8jHxK/IkxiG9?= =?us-ascii?Q?x85Q0CYI+qKprzbK0TdD3GfUFM2qxdVkcIreJMHccNXdmOrgsIQoT3xMGQdb?= =?us-ascii?Q?ifP0ITcMH53bfg2RkkjxpjdRkBY+6HRe/OksGmtAhCutwJ6azYIUxLHpgyGD?= =?us-ascii?Q?CQboU3FaIffexBrb75yYim+isJ95rgz8yqKZTpC2KJ3lw6l99AicVMPexA27?= =?us-ascii?Q?U82h2FLPJSoRRtU/S6fCswe0p1bY8S+LSiYQ8Rgz7sDE7ceC9k6c4aReA68m?= =?us-ascii?Q?6UKXeC2PQdFDD+IzK3iblT/BgdZ1isd6G3ynaR8hIrwqMdB9nDcYvdqRVifw?= =?us-ascii?Q?ldvVC10b2ETziy7U/FY+b80Eyc+g03itFr3OYusF0K6yCyWeasKg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM3PR07MB305; 6:ASKAst1VT177SAgpzNGLKmCezbnkBoo7nCZYapfy6UsU7/aPptqi3TgabZWQn+huv4jxM8tIK+T5O8VEMl/8OLabhgp0yijXYPQeFThFd53dZb4JlAmfFm4jqOHiKrOULwg69/Hc3TB7msd7qism5qSr1FP7JiBdzvZ51LmZ4kagjkHP6t0ttECMsgzV8VSy40yUMICTxWNOk319Dbt5NP7Vjp0OSsgd2VU2LvGLvIWn0HDA465+5RBhLAKeSID6h4sGh5GlR6Vf8ZEbNhFY0WFnSvw/5IvnA/8ynZi/gqNFf7vyWGuD8jCk2IFiy1dA15IUWg9srw9LWEPaS1N1Ew==; 5:jgEFpceQF4nDPHY5lf20ZY/2nBcF57GnkwiGZlX2fhmIHeKdomJl21uBLpuoNj2aPalJyh62WQMyHwKEYJEuOrgwR68cqIedB2sQLYE18aGg0U9lpsT/DYqM8j/tHRzy0l0MXxzd4RajT9ovqopN6w==; 24:r7QXGxR9tzAGWKIvOlEmGO/fzHGnOJ5Xm0t7xYudiL487iZenWAwSponJ76F2IGCMC/DXzCooJMQOXLfu3nb77+GbQCJGhwJ6mEi4BWxX84=; 7:c0Ra7rq0MlNF7W6hVjSi0psWQ4Sj3c8MG7jZmwBtTARPRuaKfEtU8/mKcbQp5A0P1d7eHsTGl1mOtnL5te8Uma+Ezc8I5BA34Bjx0RQXYm1qupHsJyXO++sFgpAUV7Zr+d8vNikTZrBYE3L5cc8V6/x6+ko0oz87AaDTDfTmKznyjS1SNqQQqQDGBxkBVP990kA8YFl12KmTDGSOtsJzA/HAalUJxMgM+AW+EkT1zCM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2017 21:37:03.1340 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR07MB305 X-OriginatorOrg: ericsson.com X-IsSubscribed: yes When using "if" (or while) without args directly on gdb's command line, you get this: (gdb) if if/while commands require arguments When doing the same when entering a command list, you only get an error when the command is executed, when parse_exp_in_context_1 fails to evaluate the expression. (gdb) define foo Type commands for definition of "foo". End with a line saying just "end". >if >end >end (gdb) foo Argument required (expression to compute). I think it would make more sense to error out when inputting the command list directly: (gdb) define foo Type commands for definition of "foo". End with a line saying just "end". >if if/while commands require arguments. The only required change is to check whether args is an empty string in build_command_line. gdb/ChangeLog: * cli/cli-script.c (build_command_line): For if/while commands, check whether args is empty. gdb/testsuite/ChangeLog: * gdb.base/commands.exp: Call new procedure. (define_if_without_arg_test): New procedure. --- gdb/cli/cli-script.c | 3 ++- gdb/testsuite/gdb.base/commands.exp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index 64b4c2b..594a071 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -147,7 +147,8 @@ build_command_line (enum command_control_type type, const char *args) { struct command_line *cmd; - if (args == NULL && (type == if_control || type == while_control)) + if ((args == NULL || strlen (args) == 0) + && (type == if_control || type == while_control)) error (_("if/while commands require arguments.")); gdb_assert (args != NULL); diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp index c934052..677361a 100644 --- a/gdb/testsuite/gdb.base/commands.exp +++ b/gdb/testsuite/gdb.base/commands.exp @@ -1011,6 +1011,21 @@ proc_with_prefix redefine_backtrace_test {} { gdb_test "bt" "hibob" "execute bt command" } +# Test using "if" and "while" without args when building a command list. + +proc define_if_without_arg_test {} { + foreach cmd {if while} { + set test "define some_command_$cmd" + gdb_test_multiple $test $test { + -re "End with" { + pass $test + } + } + + gdb_test "$cmd" "if/while commands require arguments." "type $cmd without args" + } +} + # Test an input line split with a continuation character (backslash) # while entering a multi-line command (in a secondary prompt). @@ -1076,5 +1091,6 @@ if_commands_test error_clears_commands_left redefine_hook_test backslash_in_multi_line_command_test +define_if_without_arg_test # This one should come last, as it redefines "backtrace". redefine_backtrace_test