Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp1706036iob; Thu, 5 May 2022 06:52:15 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxCZEILr+C6y0T6bSu6tlxryZSfLf38sGAJtGhrit23khyDWvvSXtEr/EJNKgcRtJG6q3Mf X-Received: by 2002:a17:90b:3a86:b0:1dc:228f:6a1f with SMTP id om6-20020a17090b3a8600b001dc228f6a1fmr6323741pjb.230.1651758734819; Thu, 05 May 2022 06:52:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651758734; cv=none; d=google.com; s=arc-20160816; b=w7Ux22vC1qUYmCD0uRufQdbvia2M2RyE0hqLGj7Mt/cj2LV+DnfZjtE6W//GdzqQfd kIwivb06Oq9lDerKUVWwhfacqsI4/GFI12TudTY4TjjfnSOOBVcvrggAelAIQkl0Q3qS fNpLkH358pOdabBQPZUB7BtKm0m8Q8gGumA/HSTT7lAMKzsXG9/cvCcWOW3ZE0DoieVY O5GqPeG0a9MR4OocF90ZW4MdCqrNxNrVrEs8wQoflk3bd4JYQ9bbejF1Cl1x+GqZ99mC kKiri621Q6g0jswvWXxxH8KgKnrktlFU+q4ESGs+lY8sPfzI8qmIdGaynrTfJJ2urbPp lEZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=2XKUIdD/PrZvfksE0kLToWrHRPo+LseLcYPHpvJMGDU=; b=SmMYwyDDoJ/1L0zzU0xW8dwyB2dhvL0wAYbKlk0YdE3ylZeNh5wN/Yd8YvaBC5y/Ye 4ufonAKXc3o2+TIqLBEnrX86fuofMdIcnlUvG+aPgyOvFHfvuVUky1JI+rz+XYQfkL6j BecgzHEkcvNrfx2F4/91GMRzqf+g+LjKwauxFalYMx1sVyw0dOsgWGKbdBo3G0dlDFpo WqhQdiKP/arwdBZimtXgpuSuMFysxNAe8XcIKIsdZUAh7pylfGBYsmoi+tfJfZgXqySx w5M5Dw/pDH7bixz5H8pVOv+z95NY5bf/g02Wetv39/XJ8UGc8Is4fYXZKGtdiMNTIkDX ccDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=slwAkji8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m12-20020a056a00080c00b0050fbf917944si1921566pfk.51.2022.05.05.06.51.57; Thu, 05 May 2022 06:52:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=slwAkji8; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238315AbiEDUju (ORCPT + 99 others); Wed, 4 May 2022 16:39:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45756 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1378158AbiEDUjI (ORCPT ); Wed, 4 May 2022 16:39:08 -0400 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76F401276B for ; Wed, 4 May 2022 13:35:28 -0700 (PDT) Received: by mail-ej1-x62f.google.com with SMTP id kq17so5087421ejb.4 for ; Wed, 04 May 2022 13:35:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=2XKUIdD/PrZvfksE0kLToWrHRPo+LseLcYPHpvJMGDU=; b=slwAkji8j9h7PjWtZYlQU8MuOh/j0Z5+3iPfRDHmVxxtCL4mwvPWZJFxvI4QkZP9Jb SrYFbrrASdQ92/tvFom0q3IAVkJ2RE8beMDsIcjJb3Y9i9jRTZGhcTgU8vLNGpUSAq1n FmbUU796iBBgwJ1injR5ERnZYz8lhZOIeTn+KD+9P48ef+ygpXQfNQlaFiUiS7hvo/ne hR7ocCmtcFoQCVArHqGUEB1uHl2dil2DI5fE1YpX3c3vX3yI/8fL0o5uOxDnJXco+inB +x5HibEMFAh3MK5vSyOj10QQjNkqI4BacrSa0nGp2SF/X/El5CpQAK3o6PlVwAUcs1tF LA0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=2XKUIdD/PrZvfksE0kLToWrHRPo+LseLcYPHpvJMGDU=; b=Wr9FtzX7CU96JHDNFXkgBRICpUzMpWoUs4v108UntMN0+ewXwsRxhn1+gDbdGEMO4k RpOt32Z/xyE/TV8zmuJWt96Wa+qO3biC6OgNXWE+O07wBo1wfqYJMokLZrhP09FWIsgV lm96lprvS5hFGMy/ovMGeUF+BNrj54LMka2wT+csA/Q6ZpWL5+uJal2Jaudig4phwXgn kABipkQ6Yh3XBDI/2Zh8Vj10k8WEspAMeEHOmNs+cAJLjVJabfw51BpO8t1G3T39jTSX 6F2pB7Fo9olHkw+fPtObLXUV+/I8g6Ym0B2c1zhg58pahLPARp836EP3D0Qc62YSF7BY 2N+w== X-Gm-Message-State: AOAM531BApA/FJ0f0LmlRwAJI7L93gyufDkqiU0CNDLaEj61b8nUOPSy RZF5A6seu31Ax/sPuncD+SLFdALgZaTby6iihyA8pA== X-Received: by 2002:a17:907:1c06:b0:6df:b257:cbb3 with SMTP id nc6-20020a1709071c0600b006dfb257cbb3mr21550850ejc.631.1651696526639; Wed, 04 May 2022 13:35:26 -0700 (PDT) MIME-Version: 1.0 References: <20220318021314.3225240-1-davidgow@google.com> <20220318021314.3225240-2-davidgow@google.com> In-Reply-To: <20220318021314.3225240-2-davidgow@google.com> From: Daniel Latypov Date: Wed, 4 May 2022 15:35:15 -0500 Message-ID: Subject: Re: [RFC PATCH 1/2] kunit: Expose 'static stub' API to redirect functions To: David Gow Cc: Brendan Higgins , Kees Cook , Shuah Khan , Steven Rostedt , kunit-dev@googlegroups.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Mar 17, 2022 at 9:13 PM David Gow wrote: > +#define kunit_activate_static_stub(test, real_fn_addr, replacement_addr)= do { \ > + typecheck(typeof(real_fn_addr), replacement_addr); = \ We can't call this macro in the same scope for functions w/ different signatures. E.g. if we add this func to the example test static void other_func(void) {} then trying to call kunit_activate_static_stub() on it in the same test case, we get ./include/linux/typecheck.h:10:14: error: conflicting types for =E2=80=98__dummy=E2=80=99; have =E2=80=98void(void)=E2=80=99 10 | ({ type __dummy; \ | ^~~~~~~ ./include/kunit/static_stub.h:99:9: note: in expansion of macro =E2=80=98ty= pecheck=E2=80=99 99 | typecheck(typeof(real_fn_addr), replacement_addr); \ | ^~~~~~~~~ lib/kunit/example-test.c:64:9: note: in expansion of macro =E2=80=98kunit_activate_static_stub=E2=80=99 64 | kunit_activate_static_stub(test, other_func, other_func); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/linux/typecheck.h:10:14: note: previous declaration of =E2=80=98__dummy=E2=80=99 with type =E2=80=98int(int)=E2=80=99 10 | ({ type __dummy; \ | ^~~~~~~ ./include/kunit/static_stub.h:99:9: note: in expansion of macro =E2=80=98ty= pecheck=E2=80=99 99 | typecheck(typeof(real_fn_addr), replacement_addr); \ | ^~~~~~~~~ lib/kunit/example-test.c:62:9: note: in expansion of macro =E2=80=98kunit_activate_static_stub=E2=80=99 62 | kunit_activate_static_stub(test, add_one, subtract_one); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ Afaict, the problem is that GCC thinks we're declaring a *function* called __dummy, not a variable. So it bleeds across the scope boundary of do-while unlike normal variables. There's the typecheck_fn macro, but it doesn't work either.