Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2219212/?format=api
{ "id": 2219212, "url": "http://patchwork.ozlabs.org/api/patches/2219212/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260402153113.81939-1-cupertino.miranda@oracle.com/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260402153113.81939-1-cupertino.miranda@oracle.com>", "list_archive_url": null, "date": "2026-04-02T15:31:13", "name": "bpf: Fix bit-field shifting in CO-RE expressions", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d29d8d697b5cf438d86255d22394b6a58d9c392b", "submitter": { "id": 85366, "url": "http://patchwork.ozlabs.org/api/people/85366/?format=api", "name": "Cupertino Miranda", "email": "cupertino.miranda@oracle.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260402153113.81939-1-cupertino.miranda@oracle.com/mbox/", "series": [ { "id": 498501, "url": "http://patchwork.ozlabs.org/api/series/498501/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=498501", "date": "2026-04-02T15:31:13", "name": "bpf: Fix bit-field shifting in CO-RE expressions", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498501/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2219212/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2219212/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256\n header.s=corp-2025-04-25 header.b=QtjyyuVA;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com\n header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com\n header.b=t2yXnOAV;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=oracle.com header.i=@oracle.com header.a=rsa-sha256\n header.s=corp-2025-04-25 header.b=QtjyyuVA;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com\n header.a=rsa-sha256 header.s=selector2-oracle-onmicrosoft-com\n header.b=t2yXnOAV", "sourceware.org;\n dmarc=pass (p=reject dis=none) header.from=oracle.com", "sourceware.org; spf=pass smtp.mailfrom=oracle.com", "server2.sourceware.org;\n arc=pass smtp.remote-ip=205.220.165.32" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fmm7C0CBkz1yGH\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 03 Apr 2026 02:32:06 +1100 (AEDT)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id B0E2B4BA23C9\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 2 Apr 2026 15:32:04 +0000 (GMT)", "from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com\n [205.220.165.32])\n by sourceware.org (Postfix) with ESMTPS id 4F3CE4BA2E1B;\n Thu, 2 Apr 2026 15:31:33 +0000 (GMT)", "from pps.filterd (m0246629.ppops.net [127.0.0.1])\n by mx0b-00069f02.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n 632FCaW42207721; Thu, 2 Apr 2026 15:31:32 GMT", "from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com\n (iadpaimrmta03.appoci.oracle.com [130.35.103.27])\n by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4d66v5rm4q-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n Thu, 02 Apr 2026 15:31:31 +0000 (GMT)", "from pps.filterd\n (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1])\n by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2)\n with ESMTP id 632EqOc3039582; Thu, 2 Apr 2026 15:31:30 GMT", "from cy3pr05cu001.outbound.protection.outlook.com\n (mail-westcentralusazon11013032.outbound.protection.outlook.com\n [40.93.201.32])\n by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id\n 4d65ekef7e-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK);\n Thu, 02 Apr 2026 15:31:30 +0000", "from CH0PR10MB5129.namprd10.prod.outlook.com (2603:10b6:610:d8::12)\n by SA2PR10MB4409.namprd10.prod.outlook.com (2603:10b6:806:11a::15)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.21; Thu, 2 Apr\n 2026 15:31:25 +0000", "from CH0PR10MB5129.namprd10.prod.outlook.com\n ([fe80::b7b0:9485:8d1c:d791]) by CH0PR10MB5129.namprd10.prod.outlook.com\n ([fe80::b7b0:9485:8d1c:d791%3]) with mapi id 15.20.9769.018; Thu, 2 Apr 2026\n 15:31:25 +0000" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org B0E2B4BA23C9", "OpenDKIM Filter v2.11.0 sourceware.org 4F3CE4BA2E1B" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 4F3CE4BA2E1B", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 4F3CE4BA2E1B", "ARC-Seal": [ "i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1775143893; cv=pass;\n b=E9w0gD9+rBrP8jJu5hLHI+97OqP1Z0ynGexI4BM+Yj2r/1dt9/aQeC6vyhJnB1yIpfF2vg7bhyqMXiE6mUE6VTfnjootjOvTiraWXw4gn3dsKltzrQG0oVKj8H4/Z9fsfcNhz4zx6rPZ20CwrCv3Uerwy0vJFtOrMId7tGgtXyA=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=wjDbcvpfYkxSTn/IcfGe3kn5dB5tOoNEeuhjM7MAbgFcruoUfP+hF5knttRzaCZ+SSzWDLsIEsHUoWPGKomW4z53s1cNA3Jy8+W5/JcQgcdAtsw/XFxCeTPC5yFw4fvG9z5Bs6EQhjVu4cFUvPV1+zrj7n5/qYjHER0K8o/R4ArVZVSBrP6FGkznQ0BM4YqIhez2YdZjIMZRA/InK4nIN8MJocUrF9NXs2ih8WpT/epXWtidh0QqJ2/y1L8ENZ7GnTxmOZR8Mi40i815/1J9puOf9zhd6ZvyG3J8IQcKGP6Dp5tMyhejrxDTIS6XbcDc4cX1Kw8wPD+qzk+jYLm++A==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775143893; c=relaxed/simple;\n bh=ob8ayPPiHjEGjdmjw6JUlPRphpaHMjWvNgZ0+DwP7pQ=;\n h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id:\n MIME-Version;\n b=u/WH8HHIHnf6xCUOLiwJAU/UTr9akC6T9Op8bi35IamuZ7HqImh18PBqSDNPTZsaI2tz1m6E3vmY8RJqxa4FiSX3vdz+rCFI2ud7qUx+zGvL3yxue10xd7oUC/l2Zc9Sft5qHrwxLN8NgkjBBRkGEkRiBTV5/7Bc5eO5dmnHs/U=", "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=kmrfifJNFe/Ta/wwnUpmFCapsc8v81E+I0WQYdPVjm8=;\n b=c2LFpD+KPxsI8CKdiDQ2Y19DcYvu4TNoj+rCw5dLVJidCKO4dVRqBNPHo4CtEt8I+s7Xajki/izdsDU2YbMCRJGipJQX4iVhMTSnhjjWzDonHwnBydtZ3P+mZCpBtmbGm4+lGjCHJ9IXgU8hOgtmB6mn8K7RLxvErU0vyd9tmDqAtbeEvw6ZSYW3SdG8nDZeN7VTK4AhKIEv9w5grPcHZ5a2pUH34YL1d4KphcqrE8iZH1D71jAFfuTmvLBNUu0+iRhWZbiHDLKxfTj1+sM0se1evqFRHyNZT4d/N7Pw4RqtXp/rAS25OVYDBeaz6O4sdDFaFodZ4rBVknJW4GNN2A==" ], "ARC-Authentication-Results": [ "i=2; server2.sourceware.org", "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com;\n dkim=pass header.d=oracle.com; arc=none" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc\n :content-transfer-encoding:content-type:date:from:message-id\n :mime-version:subject:to; s=corp-2025-04-25; bh=kmrfifJNFe/Ta/ww\n nUpmFCapsc8v81E+I0WQYdPVjm8=; b=QtjyyuVAuC5AaEOaki8SF03qs8IoXcfC\n RsISpcs0lqRVBm0hRbk4H1FVq7rU5VKEhtidkI8+02uY9lq10l39ArH1LOxOJ7ft\n bcmpwbKRtp79a3is2ljgUV6R5ddnuJNGnfPHIPXP/O+RPYrDmaSlXb+rG3pSzK04\n T4wbj9P6zLfTRTbcZvLLTsEG6x4SYyxRNgT2TnzgT8rOpHg7/LqZpDU4G25ZI9PV\n NwI4PO78PGv+wdP1+GANizNHiLGEBm9Vjbui1VdH84JjTf0w5pXW4EQqTLOZBCXB\n hFCWGpP12KmAwrhMkvShQpAShNuSNw9IHzty3ZGsm/OVE6WXVd5kLg==", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=kmrfifJNFe/Ta/wwnUpmFCapsc8v81E+I0WQYdPVjm8=;\n b=t2yXnOAVRhaDbM6PdbnOOQJn8ATTKnfcNKCFYE1BLk+6lx/iF44/v/x60J/LD7JMIlaK8qgCsQ/t7cxA/TI0tNutKimuDS2d0IYO2+yDLxGMpaPwtilpuOh+tLmPSQKfbn2LVXHiTJtbtYc7tppZS9ScYaqQypyobeNuhKwzB6c=" ], "From": "Cupertino Miranda <cupertino.miranda@oracle.com>", "To": "gcc-patches@gcc.gnu.org", "Cc": "david.faust@oracle.com, jose.marchesi@oracle.com,\n elena.zannoni@oracle.com,\n bpf@gcc.gnu.org, Cupertino Miranda <cupertino.miranda@oracle.com>", "Subject": "[PATCH] bpf: Fix bit-field shifting in CO-RE expressions", "Date": "Thu, 2 Apr 2026 16:31:13 +0100", "Message-Id": "<20260402153113.81939-1-cupertino.miranda@oracle.com>", "X-Mailer": "git-send-email 2.30.2", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "DX0P273CA0069.AREP273.PROD.OUTLOOK.COM\n (2603:1086:300:59::9) To CH0PR10MB5129.namprd10.prod.outlook.com\n (2603:10b6:610:d8::12)", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "CH0PR10MB5129:EE_|SA2PR10MB4409:EE_", "X-MS-Office365-Filtering-Correlation-Id": "641a286d-1fc1-41cc-e785-08de90cce6be", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|366016|1800799024|376014|18002099003|56012099003;", "X-Microsoft-Antispam-Message-Info": "\n WY+gmG5+KxIsea4PcNt2UaeVjiKkwUHvbiBAVJTZSZFs0ZYBk8aPZJYRbWga/8duX1E9W/RsNGx3QPWOxY9r7+PvC+P8ebJrXZTxt9R/t/5c570XTkO1TEvCglRfdOQ+8pFrU83Agm+y15150sUQO9vjMtfLXlXqklZ7WMomt2Es+8vfhi+syDu3dFtGhkP0xSd0SgpRtDwJ/9wu4HBbvgjSf05i2iI0BuLSn5T1L9PXSXvW3VGHTAu0IH9n2WQis/6tQmZq72tx14qR/By30sKpywAzxSdID1/eJoheqkm8osapiHzPBQZTA1DXroKXyj2EG6ChAVt5PspURfWLZ73F/WYAUt0BTeznRVm3+/Xz+HADmsjWRAFoapnTwVdTAutiJYmcWx38uryzxroDO1rQoq+U4e83lRTAO/v9Q5qCBtee3kKwkH9GidpPiHAZ5Zb3rMZgVm70GI6GmkWPsIgzxUJTnPOgSiYOVJTcbKYe6V3hpkx+T6BoZX3i24j6iyP1Hpy5CXlX03zUdz9yphFt/9V2ZiHTGw6JoFbWAB70A9tdrKNG2edqYCDbvWg2aioVifMt/kMKvJuvM7NsvKT8l/xc2O8o0PEDBhcTFFAi69zTgu5uoFXx5xwGbKyX9AupQlKpOaAx20M8rGuZfQyBSeC1QORUYMw+VWWoleNnHu3mV19Pvs75aMNjpxVZ", "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:CH0PR10MB5129.namprd10.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230040)(366016)(1800799024)(376014)(18002099003)(56012099003);\n DIR:OUT;\n SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n sD3nSiVaP2jiMvn/LqWKP/7AHYgmZZLtuRKsu9e0L2cc4EYC+k70geHD7jH/a0R33gLIwrZZNc9hfYHBMS93D0+90poT196Bv83RH/GsapVYGxRlNuzEizKr1y/EqAWXtYQ8LYtHsQ2o+h77jp4oJc0CTKMPpbXdqZWu6oQO/LU7Y7LMNenI20Il67c9Yu6pAP6Q9aIgjjQ94tN3XEDHJnMISF1PAuqaN/iWwsnwu49eRoIKninJTAcezMoWGwsyK94QVQIFUQclLaphiDL0I7CELs7lvRqzOAV4ckZx2i5VBRneYh7S7sX/78FqG7GkFkKWksH5l2qnLf2m2TjOxP9UZnOsH48IzapDpS8K97ZlYwqeamDOlrmGDQveQsup/qM1o5+uZmjHsFWf3cSIB0AN3VVBh2XbEM8MlyFaV6ei0QpsKxjTrP8OfjJPxcQXWoiHNXK46BYD1QM+2okQLRB01gcWbOf4ciLgoEKB49IPnxv3gAdmspa82xd+pFyfzbi6hKZsK28g0fFUeMt0kalTIV/6pykDLcRvb8oji1Vdi9UeGqQ+Ew5PfKu3wm+tD6LP1CrSViLbHtM/eFh/Qklj+E+Nk3XLO7MJN7gYUyoimvGoK4ivIVOcgStKJvnItVfGB/cWUnP6417O8zW0vWe3M4iockVJZF8HlfQZ7nxPr812TriIGPDO23eac7+EyNDVjputS6HnmfESuUWZFZ7+y6rDFDaEsCnU5GYwYKa6c1XhJEpPGqsoYeIQoINBVIERbYkmtx8Mae0CCzCX59tfDGMxgze4Cetwum/XuYaFZOwMSE1WQ3JM7SrHgtLQCYYQE+0XkQrDyQ+u6sdfIbeuQIQEOP5p90PkqSMStzsfbC6JIHAQ5/wVt//WMvi/8+meR0BjG9nu0lpA1mFELDOYN82yowL6rTQX4Nd4gjTZ8zVTbOqcA/omyIlvnAJA5nEC0HbiNoE8gZxnA+qBJro6+Ge07KCR9GW3AG8cIzwm7/cjxzqLSs0T89pt+Us5tHz7+TjJPuaNGvdl3521bEAghsl2qDi1/87lZwFV4d24g/RhpOGzOADW7wCb186sfuuPaIufrR+si+l1m6mh1Syl9P+p9YuSCrPmDAbTccuzwzmPVhnr2KEf3usFUzPcfusYrOGBio01cyapgqISiD6jNdsyAAFR/xhaJ3HE2HCk/NiJE1Gw4mba6Cq/IrnlyRmP/fD/a4rGZTn3jrDXtiPOd3OGH1Zo0zewGEJCjpzuCxwzW04HYbbbWET3PsjhQXw+NdunEXwJDSemPa+vbMvdByAn4wPUS4GQJYvUbDsETY5igs95PLVYjxefiXcrQz5Xb6sdqMvtFXMWwTXcMUJ3WJQ54YeX+vehGwazL2YcbiES80P2NlxqBi8c5l2bjsAYFWtambzU9YAOD6Wk8pqitnQyYVpvEx9U7g7lUlpuq3BAJIoExqfqFMjsFQESypsQ0rU+4p8xrcYoexCRb7N3sZaxh4XE0GsbaOvcWxHcUWaGhIy+VYXx+bkWwANHVxoRD1+yPml0g+m2Gy4HQKQe//HZhQl8LC/+h6ZvNF9UKdTXdJjMrGlt2EJ21lE8udDTp43xcFWMOpYBzhbcG0Y9DqJaLdtc2fMtT1Gi6UKTY6A2taxozxIhds/J9SJms5YS6fe/PzhhM/HnDoKrbuIy1G/DPDiOYoC7I2xpecv38ly70JlOuY138MbWMEXsbodsh8W3d55FMqPvxPPgMHSbPsCtdjrtI8FMMl4PBpQ=", "X-Exchange-RoutingPolicyChecked": "\n rW2NrOS32FNH/bCzr0eXUopAnDOz+V0IgcNuePQH0kTk2SZz+3ErstIbvdBR6E+CJXyWuGcxKU6JQOUaw8iKs95aEFPY9g/aQRE2czPd/SP37l9+SfqWWQTVj/JQX2MArAG2voCuyDF1FWXD1UKhvk7/jTTNHxXcq4Dit9ZFiZH7WgSzJkeHFD+gbHpWDKQNC6ggj50T2FKcFer6BvOOlh01jtY04CvQRy64vSaWWYIcK+bLt/eaUq7VVQP9Ak46Cwv6hBUEncIcbqgTBkhVtGkGADLvIpmvFyz/jMXQ2Zkma4Bt94L8qQa/9Mivk33ijZoQnuwfyfeCy+hqEbkWGA==", "X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0": "\n Upm20GkBA3jCmdB99nT2e+I4EV7H4+ZwEURqwXLPM0Zlrfv5lhl0mQFOQa4kkxM0hi0vviAYM8k2SJ065G3UE70WtDa+KkDm3igsZ2d51xMA0aVmNz7KLFFGMV/Oy1DiU7hqAEH+7XVlMyw8l98cR0UUkPX0gDx8vd8/iV709T+0nEh/pEAxKgFGdjJNBSQtgaYk0R0WL8M2ZrJLg1sObxGIKh8x/Ah3ViUin8VhQ3b19Y52W1llqbFDKZeYCyASAVAmynZ21GdG66DCQeY6g9nn9jC3Bozw5EV/1Oc7G5vKsL2gc0gvKwMaCqKWIbpYqdeeNDqpzi1Hwxe7HG4IMOAxJcFgVaYm3lR3MgCEqbfl1rwDV30Krj8gNrsY7n+P9Qflop4uyAS3bU829ByoVud4ojcuUel3dYEy0JW+OcqY+pxiLrLDRXhCxGb7qE55ClLETlIh89AZUsSDBAVcufS0sC/LRhFAOGmSxDb5qTWFcPr8WO/mzYy+au9fp4WIv695jl4Jz2HNpkPUJgQIRZiAGo8zAYVf5auMl/oifZJg1CgX1/MkiJs1+n+rpBEFrlQ0q2qO1ZpF0tXs+kFDmRhyqzsV31nk3yNyiaiBnCs=", "X-OriginatorOrg": "oracle.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 641a286d-1fc1-41cc-e785-08de90cce6be", "X-MS-Exchange-CrossTenant-AuthSource": "CH0PR10MB5129.namprd10.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "02 Apr 2026 15:31:25.6661 (UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-CrossTenant-Id": "4e2c6054-71cb-48f1-bd6c-3a9705aca71b", "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED", "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n M5ZXqG6JfBvRALPh3w/SOnsxzRzbeJHjCHz7t5DObwEnbsVZdQxOLvoN4H4/XKnxIvSPpD9M8fUmdwqZQrbf+eHVNC0ps1Ygil9MoHTMLIg=", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SA2PR10MB4409", "X-Proofpoint-Virus-Version": "vendor=baseguard\n engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49\n definitions=2026-04-02_02,2026-04-02_03,2025-10-01_01", "X-Proofpoint-Spam-Details": "rule=notspam policy=default score=0 mlxlogscore=999\n mlxscore=0 adultscore=0\n bulkscore=0 phishscore=0 suspectscore=0 malwarescore=0 spamscore=0\n classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2603050001\n definitions=main-2604020139", "X-Proofpoint-GUID": "Hv3jJvq1IkDerZtsH1omnReXumRo7r_g", "X-Authority-Analysis": "v=2.4 cv=G7cR0tk5 c=1 sm=1 tr=0 ts=69ce8bd3 b=1 cx=c_pps\n a=qoll8+KPOyaMroiJ2sR5sw==:117\n a=qoll8+KPOyaMroiJ2sR5sw==:17\n a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19\n a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=A5OVakUREuEA:10\n a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=jiCTI4zE5U7BLdzWsZGv:22\n a=EIcjfB9IiI4px24ztqRk:22 a=rRSh8p47dRZLf87SFqIA:9 a=O8hF6Hzn-FEA:10 cc=ntf\n awl=host:12292", "X-Proofpoint-ORIG-GUID": "Hv3jJvq1IkDerZtsH1omnReXumRo7r_g", "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNDAyMDEzOSBTYWx0ZWRfX2cdlyhq3ojw9\n ahLfssxbcpkrKm8EG50uhDZBKQK+YtX+SP2x6afdaeBJEXOddPLWr2SzJzfkYlgg2TxRU+tSwLL\n A6yv1U7cWwuoeNxkL1HjvPHjLby/ybJzL4daNE+ydC8XDnNq+y2G5ZYJDHkmKBaPZtiU0tn/pIQ\n vkLKYlr0D3d8iFdAORAqX3ZQWoa7mMigWoI8XCPMzr59km/MvyGI16KxUsHRhJZAsmdXazLAbtv\n bQaNJb7WqR30aU9gP9cU02Xdj5UiwEQT+nv20YHqhL1Oen9TVMRVm9G+PilRv+iTulEXsbT9krr\n U6xZtBVgaLhT482dRxQ9xsQ2pnFbPA4rlh6rcNQG8f/MQRyF7GFmUmoaZbZ01i95Ab2i2iYJpIZ\n lXQlM+fKGGeQg5aNXlaVux1FG5JLAboDMi0we/IQ+1uU/ulQniyePZbbhFadKODDqbVutKnFhDK\n ohoJm0RLY8xKYZAsSmtXXpIRkbhVhY11uWIAJQvM=", "X-BeenThere": "gcc-patches@gcc.gnu.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>", "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>", "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>", "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org" }, "content": "Hi everyone,\n\nThis patch fixes bit-field accesses in CO-RE code generation.\n\nNo regressions. The selftests improved with following diff:\n\n3993c3993\n< #463 tc_change_tail:FAIL\n---\n> #463 tc_change_tail:OK\n4013c4013\n< #473/4 tc_tunnel/sit_none:FAIL\n---\n> #473/4 tc_tunnel/sit_none:OK\n4028c4028\n< #473 tc_tunnel:FAIL\n---\n> #473 tc_tunnel:OK\n\nLooking forward to your review.\n\nCheers,\nCupertino\n\n------\n\nThis patch corrects GCC to do proper bit shifting for bit-field access\nexpressions that get patched for CO-RE access.\nSince we convert field accesses in an early pass, we needed to\nexplicitly generate shifting and masking to properly access the\nbit-fields.\n\ngcc/ChangeLog:\n\n\tPR target/123894\n * config/bpf/core-builtins.cc\n\t (core_expr_with_field_expr_plus_base): Add parameter to return\n\t the tree node for the type associated with the access mode.\n\t (gen_mask_for_size): New function\n\t (gen_rhs_bitfield_adjust): Add function to adapt bitfield accesses\n\t through shifting and masking.\n\t (gen_lrhs_bitfield_adjust): Add function to adapt bitfields in rhs\n\t when a core expression is used in a lhs assignment.\n\t (requires_bitfield_adjust): Add function to verify if an\n\t expression requires bitfield adaptation.\n\t (replace_core_access_index_comp_expr): Add logic for bitfield\n\t adaptation.\n (core_make_builtins): Refactor gimplification. Do bitfield\n\t adjusting.\n\ngcc/testsuite/\n\n\t* gcc.target/bpf/core-bitfields.c: Added new test.\n---\n gcc/config/bpf/core-builtins.cc | 238 +++++++++++++++---\n gcc/testsuite/gcc.target/bpf/core-bitfields.c | 57 +++++\n 2 files changed, 261 insertions(+), 34 deletions(-)\n create mode 100644 gcc/testsuite/gcc.target/bpf/core-bitfields.c", "diff": "diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc\nindex d0c6cfdaf1c0..7b994fd6f10b 100644\n--- a/gcc/config/bpf/core-builtins.cc\n+++ b/gcc/config/bpf/core-builtins.cc\n@@ -1328,11 +1328,23 @@ construct_builtin_core_reloc (location_t loc, tree fndecl, tree *args,\n - base + __builtin_preserve_field_expr (expr, SIZEOF) */\n \n static tree\n-core_expr_with_field_expr_plus_base (tree base, tree expr, bool leaf_node)\n+core_expr_with_field_expr_plus_base (tree base, tree expr, bool leaf_node,\n+\t\t\t\t tree *access_type)\n {\n tree type = TREE_TYPE (expr);\n tree args[2];\n \n+ tree mem_access_type = lang_hooks.types.type_for_mode (TYPE_MODE (type),\n+\t\t\t\t\t\t\t TYPE_UNSIGNED (type));\n+\n+ /* Only use mode type for integer types, where the value can be a bitfield\n+ access. */\n+ if (TREE_CODE (type) != INTEGER_TYPE)\n+ mem_access_type = type;\n+\n+ mem_access_type = build_pointer_type (mem_access_type);\n+ *access_type = mem_access_type;\n+\n if (base == expr)\n return expr;\n else if (TREE_CODE (expr) == ARRAY_REF\n@@ -1366,12 +1378,13 @@ core_expr_with_field_expr_plus_base (tree base, tree expr, bool leaf_node)\n \t\t\t fold_build1 (NOP_EXPR, ptr_type_node, base),\n \t\t\t offset);\n \n- tmp = fold_build1 (NOP_EXPR, build_pointer_type (type), tmp);\n+ tmp = fold_build1 (NOP_EXPR, mem_access_type, tmp);\n return tmp;\n }\n else\n {\n tree fndecl = bpf_builtins[BPF_BUILTIN_PRESERVE_FIELD_INFO];\n+\n args[0] = expr;\n args[1] = build_int_cst (integer_type_node, BPF_FIELD_BYTE_OFFSET);\n tree builtin_call = construct_builtin_core_reloc (UNKNOWN_LOCATION,\n@@ -1385,7 +1398,7 @@ core_expr_with_field_expr_plus_base (tree base, tree expr, bool leaf_node)\n tree tmp = fold_build2 (POINTER_PLUS_EXPR, ptr_type_node,\n \t\t\t fold_build1 (NOP_EXPR, ptr_type_node, base),\n \t\t\t fold_build1 (NOP_EXPR, size_type_node, builtin_call));\n- tmp = fold_build1 (NOP_EXPR, build_pointer_type (type), tmp);\n+ tmp = fold_build1 (NOP_EXPR, mem_access_type, tmp);\n return tmp;\n }\n }\n@@ -1460,8 +1473,10 @@ make_core_safe_access_index (tree expr, bool *changed, bool entry = true)\n /* The remaining is to traverse the field part of the field expression. */\n if (mode != VOIDmode && var_off == NULL_TREE)\n {\n+ tree access_type = NULL_TREE;\n *changed = true;\n- return core_expr_with_field_expr_plus_base (base, expr, true);\n+ return core_expr_with_field_expr_plus_base (base, expr, true,\n+\t\t\t\t\t\t &access_type);\n }\n else\n {\n@@ -1496,8 +1511,10 @@ make_core_safe_access_index (tree expr, bool *changed, bool entry = true)\n && mode != VOIDmode && var_off != NULL_TREE)\n || entry == true)\n {\n+ tree access_type = NULL_TREE;\n *changed = true;\n- ret = core_expr_with_field_expr_plus_base (ret, expr, false);\n+ ret = core_expr_with_field_expr_plus_base (ret, expr, false,\n+\t\t\t\t\t\t &access_type);\n }\n return ret;\n }\n@@ -1507,12 +1524,129 @@ make_core_safe_access_index (tree expr, bool *changed, bool entry = true)\n __builtin_preserve_access_index argument expression from within\n bpf_resolve_overloaded_core_builtin. */\n \n+static tree\n+gen_mask_for_size (tree type, poly_int64 bitsize)\n+{\n+ tree mask = build_int_cst (type, 1);\n+ mask = fold_build2 (LSHIFT_EXPR, type, mask,\n+\t\t build_int_cst (type, bitsize));\n+ mask = fold_build2 (MINUS_EXPR, type, mask,\n+\t\t build_int_cst (type, 1));\n+ return mask;\n+}\n+\n+static tree\n+gen_rhs_bitfield_adjust (tree bit_type, tree mem_access_type,\n+\t\t\t tree mem_ref, tree offset, tree sizemask)\n+{\n+ tree value = mem_ref;\n+\n+ /* Shift read value to position it in least significant bits. */\n+ if (TREE_INT_CST_LOW (offset) != 0)\n+ value = fold_build2 (RSHIFT_EXPR, mem_access_type, value, offset);\n+\n+ value = fold_build2 (BIT_AND_EXPR, mem_access_type, value, sizemask);;\n+ /* The casting takes care of the sign extension. */\n+ value = fold_build1 (NOP_EXPR, bit_type, value);\n+ return value;\n+}\n+\n+static tree\n+gen_lrhs_bitfied_adjust (tree mem_access_type, tree mem_ref, tree lhs,\n+\t\t\t tree offset, tree bitmask)\n+{\n+ /* Mask to clear bits in destination bitfield. */\n+ tree clear_mask = fold_build2 (LSHIFT_EXPR, mem_access_type, bitmask, offset);\n+ clear_mask = fold_build1 (BIT_NOT_EXPR, mem_access_type, clear_mask);\n+\n+ /* Collect the value from the pointer reference. */\n+ tree read_value = fold_build2 (BIT_AND_EXPR, mem_access_type, mem_ref,\n+\t\t\t\t clear_mask);\n+\n+\n+ tree new_value = lhs;\n+ if (TREE_CODE (lhs) == NOP_EXPR\n+ && TREE_TYPE (TREE_OPERAND (lhs, 0)) == mem_access_type)\n+ new_value = TREE_OPERAND (lhs, 0);\n+ new_value = fold_build1 (NOP_EXPR, mem_access_type, new_value);\n+ new_value = fold_build2 (BIT_AND_EXPR, mem_access_type, new_value, bitmask);\n+ new_value = fold_build2 (LSHIFT_EXPR, mem_access_type, new_value, offset);\n+\n+\n+ new_value = fold_build2 (BIT_IOR_EXPR, mem_access_type, read_value,\n+\t\t\t new_value);\n+ return new_value;\n+}\n+\n+static bool\n+requires_bitfield_adjust (tree node, tree *p_mem_access_type,\n+\t\t\t tree *offset, tree *bitmask)\n+{\n+ poly_int64 bitsize, bitpos;\n+ tree var_off;\n+ machine_mode mode;\n+ int sign, reverse, vol;\n+\n+ get_inner_reference (node, &bitsize, &bitpos, &var_off, &mode,\n+\t\t &sign, &reverse, &vol);\n+\n+ tree type = TREE_TYPE (node);\n+ tree mem_access_type = lang_hooks.types.type_for_mode (TYPE_MODE (type),\n+\t\t\t\t\t\t\t TYPE_UNSIGNED (type));\n+ *p_mem_access_type = mem_access_type;\n+\n+ /* Only use mode type for integer types, where the value can be a bitfield\n+ access. */\n+ if (TREE_CODE (type) != INTEGER_TYPE)\n+ return false;\n+\n+ if (TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (mem_access_type))\n+ {\n+ *offset = fold_build2 (TRUNC_MOD_EXPR, mem_access_type,\n+\t\t\t build_int_cst (mem_access_type, bitpos),\n+\t\t\t TYPE_SIZE (mem_access_type));\n+\n+ *bitmask = gen_mask_for_size (mem_access_type, bitsize);\n+\n+ return true;\n+ }\n+\n+ return false;\n+}\n+\n static tree\n replace_core_access_index_comp_expr (tree *node, int *walk_subtrees,\n-\t\t\t\t void *data ATTRIBUTE_UNUSED)\n+\t\t\t\t void *data)\n {\n bool valid = true;\n gcc_assert (*node != NULL_TREE);\n+ bool is_lhs = (bool) data;\n+ tree mem_access_type, offset, bitmask;\n+\n+ if (TREE_CODE (*node) == MODIFY_EXPR\n+ && requires_bitfield_adjust (TREE_OPERAND (*node, 0), &mem_access_type,\n+\t\t\t\t &offset, &bitmask))\n+ {\n+ TREE_VISITED (*node) = 1;\n+ walk_tree (&TREE_OPERAND (*node, 0), replace_core_access_index_comp_expr,\n+\t\t (void *) true, NULL);\n+ walk_tree (&TREE_OPERAND (*node, 1), replace_core_access_index_comp_expr,\n+\t\t NULL, NULL);\n+\n+ TREE_TYPE (*node) = TREE_TYPE (TREE_OPERAND (*node, 0));\n+ TREE_OPERAND (*node, 1) = gen_lrhs_bitfied_adjust (mem_access_type,\n+\t\t\t\t\tTREE_OPERAND (*node, 0),\n+\t\t\t\t\tTREE_OPERAND (*node, 1),\n+\t\t\t\t\toffset, bitmask);\n+\n+ *node = fold_build2 (MODIFY_EXPR,\n+\t\t\t TREE_TYPE (TREE_OPERAND (*node, 0)),\n+\t\t\t TREE_OPERAND (*node, 0),\n+\t\t\t TREE_OPERAND (*node, 1));\n+\n+ *walk_subtrees = false;\n+ return NULL_TREE;\n+ }\n \n tree *expr = node;\n bool should_indirect = false;\n@@ -1525,18 +1659,29 @@ replace_core_access_index_comp_expr (tree *node, int *walk_subtrees,\n if (valid == true && n > 0)\n {\n bool changed = false;\n- tree expr_test = make_core_safe_access_index (*expr, &changed);\n- *walk_subtrees = 0;\n+ tree expr_test = make_core_safe_access_index (*expr, &changed, true);\n+ tree access_type = TREE_TYPE (expr_test);\n \n if (changed == true)\n \t{\n \t if (should_indirect == true)\n \t expr_test = fold_build1 (INDIRECT_REF,\n-\t\t\t\t TREE_TYPE (TREE_TYPE (expr_test)),\n+\t\t\t\t TREE_TYPE (access_type),\n \t\t\t\t expr_test);\n \n+\t if (is_lhs == false\n+\t && requires_bitfield_adjust (*node, &mem_access_type, &offset,\n+\t\t\t\t\t &bitmask))\n+\t {\n+\t tree orig_type = TREE_TYPE (*node);\n+\t expr_test = gen_rhs_bitfield_adjust (orig_type, mem_access_type,\n+\t\t\t\t\t\t expr_test, offset, bitmask);\n+\t }\n+\n+\n \t *expr = expr_test;\n \t}\n+ *walk_subtrees = 0;\n }\n return NULL_TREE;\n }\n@@ -1896,49 +2041,74 @@ core_make_builtins (tree *tp, int *walk_subtrees, void *data)\n expr = TREE_OPERAND (*tp, 0);\n }\n \n+ poly_int64 bitsize, bitpos;\n+ tree var_off;\n+ machine_mode mode;\n+ int sign, reverse, vol;\n+\n+ tree base = get_inner_reference (expr, &bitsize, &bitpos, &var_off, &mode,\n+\t\t\t\t &sign, &reverse, &vol);\n+\n if (is_attr_preserve_access (expr)\n && (n = compute_field_expr (expr, NULL, &valid, NULL)) > 0\n && valid == true)\n {\n- poly_int64 bitsize, bitpos;\n- tree var_off;\n- machine_mode mode;\n- int sign, reverse, vol;\n-\n- tree base = get_inner_reference (expr, &bitsize, &bitpos, &var_off, &mode,\n-\t\t\t\t &sign, &reverse, &vol);\n-\n- tree new_expr = core_expr_with_field_expr_plus_base (base, expr, true);\n+ tree access_type = NULL_TREE;\n+ tree new_expr = core_expr_with_field_expr_plus_base (base, expr, true,\n+\t\t\t\t\t\t\t &access_type);\n \n /* Abort convertion if it is just a pointer or a reference to an\n \t attributed type. */\n if (new_expr != expr)\n \t{\n-\n \t gimple_seq before = NULL;\n+\t gimple_seq after = NULL;\n \t push_gimplify_context ();\n-\n \t gimplify_expr (&new_expr, &before, NULL, is_gimple_val, fb_rvalue);\n \n \t tree new_expr_type = TREE_TYPE (new_expr);\n-\n-\t /* Replace original expression by new_expr. If the type is the same\n-\t tree node, good! If it is a pointer type, we need to dereference\n-\t the type within the pointer to guarantee it is the same. */\n-\t if (TREE_TYPE (new_expr) == TREE_TYPE (*tp)\n-\t || (is_addr_expr\n-\t\t && TREE_TYPE (new_expr_type) == TREE_TYPE (expr)))\n-\t *tp = fold (new_expr);\n-\t else if (TREE_TYPE (new_expr) == build_pointer_type (TREE_TYPE (*tp)))\n-\t *tp = fold_build2 (MEM_REF, TREE_TYPE (*tp),\n-\t\t\t new_expr, build_int_cst (ptr_type_node, 0));\n+\t tree mem_access_type, offset, bitmask;\n+\n+\t if (requires_bitfield_adjust (*tp , &mem_access_type, &offset,\n+\t\t\t\t\t&bitmask))\n+\t {\n+\t tree value = build_simple_mem_ref (new_expr);\n+\t if (wi->is_lhs)\n+\t\t{\n+\t\t gcc_assert (is_gimple_assign (wi->stmt));\n+\t\t tree *rhs = gimple_assign_rhs1_ptr (wi->stmt);\n+\n+\t\t *rhs = gen_lrhs_bitfied_adjust (mem_access_type,\n+\t\t\t\t\t\t value, *rhs, offset,\n+\t\t\t\t\t\t bitmask);\n+\t\t gimplify_expr (rhs, &before, &after, is_gimple_val,\n+\t\t\t\t fb_rvalue);\n+\t\t}\n+\t else\n+\t\t{\n+\t\t value = gen_rhs_bitfield_adjust (TREE_TYPE (*tp),\n+\t\t\t\t\t\t mem_access_type,\n+\t\t\t\t\t\t value, offset, bitmask);\n+\t\t gimplify_expr (&value, &before, NULL, is_gimple_val,\n+\t\t\t\t fb_rvalue);\n+\t\t}\n+\t *tp = value;\n+\t }\n \t else\n-\t gcc_assert (0);\n+\t {\n+\t if (TYPE_MAIN_VARIANT (new_expr_type) != TYPE_MAIN_VARIANT (\n+\t\t\t\t\t\t TREE_TYPE (*tp))\n+\t\t&& !is_addr_expr)\n+\t new_expr = build_simple_mem_ref (new_expr);\n+\n+\t new_expr = fold (new_expr);\n+\t *tp = new_expr;\n+\t }\n \n \t gsi_insert_seq_before (&(wi->gsi), before, GSI_SAME_STMT);\n+\t gsi_insert_seq_after (&(wi->gsi), after, GSI_SAME_STMT);\n \t pop_gimplify_context (NULL);\n-\n-\t *walk_subtrees = false;\n+\t *walk_subtrees = 0;\n \t}\n }\n return NULL_TREE;\ndiff --git a/gcc/testsuite/gcc.target/bpf/core-bitfields.c b/gcc/testsuite/gcc.target/bpf/core-bitfields.c\nnew file mode 100644\nindex 000000000000..6cbaf1035fb4\n--- /dev/null\n+++ b/gcc/testsuite/gcc.target/bpf/core-bitfields.c\n@@ -0,0 +1,57 @@\n+/* Test for BPF CO-RE __attribute__((preserve_access_index)) with accesses on\n+ LHS and both LHS and RHS of assignment. */\n+\n+/* { dg-do compile } */\n+/* { dg-options \"-O2 -dA -gbtf -mco-re -masm=normal\" } */\n+\n+struct S {\n+ unsigned char a: 2;\n+ unsigned char b: 2;\n+ unsigned char c: 2;\n+ unsigned char d: 2;\n+} __attribute__((preserve_access_index));\n+\n+struct S_no {\n+ unsigned char a: 2;\n+ unsigned char b: 2;\n+ unsigned char c: 2;\n+ unsigned char d: 2;\n+};\n+\n+char foo (struct S *s, struct S_no *s_no, unsigned char v)\n+{\n+ unsigned char z = s->c;\n+ s->b = v;\n+\n+ return z;\n+}\n+char bar (struct S_no *s_no)\n+{\n+ unsigned char y = __builtin_preserve_access_index (s_no->d);\n+ return y;\n+}\n+\n+/* { dg-final { scan-assembler-times \"ascii \\\"0:1.0\\\"\\[\\t \\]+\\[^\\n\\]*btf_aux_string\" 1 } } */\n+/* { dg-final { scan-assembler-times \"ascii \\\"0:2.0\\\"\\[\\t \\]+\\[^\\n\\]*btf_aux_string\" 1 } } */\n+/* { dg-final { scan-assembler-times \"ascii \\\"0:3.0\\\"\\[\\t \\]+\\[^\\n\\]*btf_aux_string\" 1 } } */\n+\n+/* { dg-final { scan-assembler-times \"bpfcr_astr_off \\\\(\\\"0:1\\\"\\\\)\" 1 } } */\n+/* { dg-final { scan-assembler-times \"bpfcr_astr_off \\\\(\\\"0:2\\\"\\\\)\" 1 } } */\n+/* { dg-final { scan-assembler-times \"bpfcr_astr_off \\\\(\\\"0:3\\\"\\\\)\" 1 } } */\n+/* { dg-final { scan-assembler-times \"bpfcr_type \\\\(struct S\\\\)\" 2 } } */\n+/* { dg-final { scan-assembler-times \"bpfcr_type \\\\(struct S_no\\\\)\" 1 } } */\n+\n+/* In foo */\n+\n+/* { dg-final { scan-assembler-times \"rsh32\\t%r0,4\" 1 } } */\n+/* { dg-final { scan-assembler-times \"lsh32\\t%r3,2\" 1 } } */\n+/* { dg-final { scan-assembler-times \"and32\\t%r3,12\" 1 } } */\n+/* { dg-final { scan-assembler-times \"and32\\t%r4,-13\" 1 } } */\n+/* { dg-final { scan-assembler-times \"and32\\t%r0,3\" 1 } } */\n+/* { dg-final { scan-assembler-times \"or32\\t%r4,%r3\" 1 } } */\n+\n+/* In bar */\n+\n+/* { dg-final { scan-assembler-times \"rsh32\\t%r0,6\" 1 } } */\n+\n+\n", "prefixes": [] }