Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.2/patches/2233036/?format=api
{ "id": 2233036, "url": "http://patchwork.ozlabs.org/api/1.2/patches/2233036/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260505151030.1749548-7-waffl3x@baylibre.com/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/1.2/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": "<20260505151030.1749548-7-waffl3x@baylibre.com>", "list_archive_url": null, "date": "2026-05-05T15:01:59", "name": "[06/12] OpenMP/C++: Force location wrapper on 'omp allocate' directive clauses", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "48a93c64ff520bc40fc005301d2cad66555001d4", "submitter": { "id": 90070, "url": "http://patchwork.ozlabs.org/api/1.2/people/90070/?format=api", "name": "Waffl3x", "email": "waffl3x@baylibre.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260505151030.1749548-7-waffl3x@baylibre.com/mbox/", "series": [ { "id": 502853, "url": "http://patchwork.ozlabs.org/api/1.2/series/502853/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=502853", "date": "2026-05-05T15:01:54", "name": "OpenMP/C++: 'allocate' directive", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/502853/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2233036/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2233036/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=baylibre-com.20251104.gappssmtp.com\n header.i=@baylibre-com.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=T67MG8fA;\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=baylibre-com.20251104.gappssmtp.com\n header.i=@baylibre-com.20251104.gappssmtp.com header.a=rsa-sha256\n header.s=20251104 header.b=T67MG8fA", "sourceware.org;\n dmarc=none (p=none dis=none) header.from=baylibre.com", "sourceware.org; spf=pass smtp.mailfrom=baylibre.com", "server2.sourceware.org;\n arc=none smtp.remote-ip=2607:f8b0:4864:20::435" ], "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 4g925x5Zmrz1yJ0\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 06 May 2026 01:11:17 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id EE9C44B9DB49\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 5 May 2026 15:11:15 +0000 (GMT)", "from mail-pf1-x435.google.com (mail-pf1-x435.google.com\n [IPv6:2607:f8b0:4864:20::435])\n by sourceware.org (Postfix) with ESMTPS id 5A2BF4BA900E\n for <gcc-patches@gcc.gnu.org>; Tue, 5 May 2026 15:10:43 +0000 (GMT)", "by mail-pf1-x435.google.com with SMTP id\n d2e1a72fcca58-824acdfb73dso414105b3a.2\n for <gcc-patches@gcc.gnu.org>; Tue, 05 May 2026 08:10:43 -0700 (PDT)", "from waffl3x-prestige.lan ([2001:56a:f98a:b800:1f67:ce08:3cbd:86b8])\n by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-83965645140sm2674956b3a.12.2026.05.05.08.10.41\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 05 May 2026 08:10:41 -0700 (PDT)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org EE9C44B9DB49", "OpenDKIM Filter v2.11.0 sourceware.org 5A2BF4BA900E" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 5A2BF4BA900E", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 5A2BF4BA900E", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777993843; cv=none;\n b=fM0g7SaC6S7zCOXijWb1TeHRiZ9IY7TI8W17+A7JaF0+xvbEGvWZu/w/yLLSLsnASLsdGCHsFDwUdaejhJ8FOVDDR27PflhuKhtEVlS14AlcXOApKqpYxucPZN2kgdllO5tzcMr4nJWShcKK6GBOWfrI43fVsZZb/pdmK5RdxQE=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777993843; c=relaxed/simple;\n bh=XkqyPNKbct7Xq80C2qckPXdAECkGgnNUCONOIGMupd0=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=u0m+Xa26K+rtYTQIpCIYlzguwkZcHQGflAZVkH8U9LZjNb8DGVVvJxm/ssR7o8eY4bxOeBRT5LOdXkhvyOueLWt8/ABdv20TZVMAwbO4Ewi14qqGSLsvl6b7Bbeq49AjerUt7h8BqFLG8B6Av63hJQ1c8n4CYknv7I0YyjSNTp8=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1777993842;\n x=1778598642;\n darn=gcc.gnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=NY4AKGfBg7OhsvgHP+Fp1lLnyHflwRLlR24CsB1z0rg=;\n b=T67MG8fAI1Ybn09WlXAX100WjoYZfa76c+xrcT7Et/tl+wrWv/QdNffKZQIe5PWj17\n pxjjKF77BxDam7cFs9Zzo4KplxPLfsUGUYC+MgoPrYqlSAm77WPTUPFsWh6Mm2sMgGWU\n ZaHqGlWEU0ekzdI7uVuNgWNlpt6xPSG0mznYBDMo0N6RIBI5mzqY9m0Ejd6sdABjaIDy\n 77zt9CHeohWQlFlR7Ekw6VdKUwdDwGqUhmpKKYtxatDRtGBjw5ZCMa1WWGsEoKvIde39\n 7mQs2VjYXYv+8N7/ZAAa1curK3VuuilNNjPE4ZwshXl/ObTuXPxemL2KJ9CHB49RurSs\n Yr2A==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777993842; x=1778598642;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=NY4AKGfBg7OhsvgHP+Fp1lLnyHflwRLlR24CsB1z0rg=;\n b=LNUqIkvZEhQH7EzTmIRI0rJRNPcbjm4l1aNJqw9bG7lFx1KH/4ROBAYghxqKua+fr9\n VlTem874CPuwg+SsNN3NurZtB/N3EXN+/DJbd6O0Mv7lljQACv+XvVGUosuiDkwcoD+M\n qeUHWQb3/fgMU5Bj5ar5H240OYsJl/xTINCtYAuAMZVJTBdCrUJA2ey80PUKmaoCqWwQ\n 5Aj7SY/zujGY2TaHWsvwpKtSAhGbkKg3g4tAeTpEEbssP0SuC+tgb4aBdqQ3N+R319NW\n XverkPVrD8jF9vTeJMPueVmd9DNQBXbYtXTUT/5r4tsV2U1T4D8kxTTqRWy18LFa/5/y\n ylgA==", "X-Gm-Message-State": "AOJu0YyrqI2hcJX21rqj3P02BBwcZKX5lQXZOjsq33/iw0X6Nlg0yL88\n bkYnIAQvZhk+N2mqNMHgZid48qs+jrdrt+vYxwsrwyHaKq6hd2Ztc3tDAmOJ2R/07bN4PLS/83c\n EelAX", "X-Gm-Gg": "AeBDieuesTdK3bfxN9i+Bykiq8dzJjObINa2A0D21kaiRCGNxNp5SlOscWcQi5npVs4\n +kTTUWGU8v1jZUTC8jt3umrfkkCJCPSAAG+j8V/+nBj4w0Q3TDixlUHvoAbezZvxBA/ldeynbnc\n MY1BtF6lHW9oWiSmt4yHzpsPkMwkzL7ZzGJfGX3hlZxLcKtm/R+09s4c/GcdL1V3wH60/uzCh52\n GGBipyqtgiSP6OdHI5YL127/X9rs63Ce+CLvwKBUVHzCafTHQEsy0YnuQawD+vP49jWdSaiduT2\n 5VuUhGxY4+vORZV6MATTJB7u3MeDtti5VNvWCah6Z6DQ7juYQH+AyDPw9Qv0mqo5X3O/rdLDrDS\n mpAvtgTBhNHYl3EMlsP/dDuShh6iwhL4TUGHCVLLRIFS55A5F5yb41pWKen0768+8e1W3blDJ0w\n UF921eZcGI7ncsDgi6NIr1Z0EdiIKyXR9grgHTPlAtAhFRZ8PjFw==", "X-Received": "by 2002:a05:6a00:3e0b:b0:837:73ab:1013 with SMTP id\n d2e1a72fcca58-83773ab284bmr4457997b3a.6.1777993842173;\n Tue, 05 May 2026 08:10:42 -0700 (PDT)", "From": "Waffl3x <waffl3x@baylibre.com>", "To": "gcc-patches@gcc.gnu.org", "Cc": "Waffl3x <waffl3x@baylibre.com>", "Subject": "[PATCH 06/12] OpenMP/C++: Force location wrapper on 'omp allocate'\n directive clauses", "Date": "Tue, 5 May 2026 09:01:59 -0600", "Message-ID": "<20260505151030.1749548-7-waffl3x@baylibre.com>", "X-Mailer": "git-send-email 2.54.0", "In-Reply-To": "<20260505151030.1749548-1-waffl3x@baylibre.com>", "References": "\n <CAH+W3Ppbho4pj6W-rWk4mMssrttOjt7aNco-oWW5Sw5f5Yx2GA@mail.gmail.com>\n <20260505151030.1749548-1-waffl3x@baylibre.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "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": "Some nodes, such as template parameters, don't get wrapped by\nmaybe_wrap_with_location. We rely on location wrappers for diagnostics of\nclause exprs in finish_omp_allocate, the easiest solution is to force a\nwrapper by replicating the the mechanisms of maybe_wrap_with_location in\ncp_parser_omp_allocate.\n\nUnfortuntely, tsubst_expr uses maybe_wrap_with_location to rewrap location\nwrappers, stripping wrappers that we previously forced. This patch solves\nthat by handling wrappers explicitly in tsubst_expr's OMP_ALLOCATE case.\n\nThis is kind of a kludge, if this is deemed to be a good solution we should\npossibly split it out into its own function (force_wrap_with_location?) and\nchange tsubst_expr to use that for rewrapping. This would be trivial to do,\nbut belongs in a different patch.\n\ngcc/cp/ChangeLog:\n\n\t* parser.cc (cp_parser_omp_allocate): Force a location wrapper.\n\t* pt.cc (tsubst_stmt): Rewrap location wrappers after tsubst_expr.\n\ngcc/testsuite/ChangeLog:\n\n\t* g++.dg/gomp/allocate-10.C: Remove xfails.\n\t* g++.dg/gomp/allocate-14.C: Likewise.\n\t* g++.dg/gomp/allocate-17.C: Likewise.\n\nSigned-off-by: Waffl3x <waffl3x@baylibre.com>\n---\n gcc/cp/parser.cc | 26 +++++++++++++++--\n gcc/cp/pt.cc | 24 ++++++++++++----\n gcc/testsuite/g++.dg/gomp/allocate-10.C | 12 +++-----\n gcc/testsuite/g++.dg/gomp/allocate-14.C | 37 +++++++++++--------------\n gcc/testsuite/g++.dg/gomp/allocate-17.C | 23 +++++++--------\n 5 files changed, 73 insertions(+), 49 deletions(-)", "diff": "diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc\nindex 924e52da6ea..412a71c439c 100644\n--- a/gcc/cp/parser.cc\n+++ b/gcc/cp/parser.cc\n@@ -47373,13 +47373,35 @@ cp_parser_omp_allocate (cp_parser *parser, cp_token *pragma_tok)\n } while (true);\n cp_parser_require_pragma_eol (parser, pragma_tok);\n \n+ /* Some codes, such as template parameters, don't get wrapped by\n+ maybe_wrap_with_location despite not being able to carry a location.\n+ We need a location to issue good diagnostics in finish_omp_allocate. */\n+ auto maybe_force_wrap_with_location = [] (cp_expr expr_with_loc) -> tree\n+ {\n+ tree expr = expr_with_loc.get_value ();\n+ if (!expr || error_operand_p (expr))\n+\treturn expr;\n+ /* In most situations, expr will already have been wrapped. */\n+ if (CAN_HAVE_LOCATION_P (expr))\n+\treturn expr;\n+\n+ location_t expr_loc = expr_with_loc.get_location ();\n+ /* Copied from tree.cc:maybe_wrap_with_location. */\n+ const tree_code code\n+\t= (((CONSTANT_CLASS_P (expr) && TREE_CODE (expr) != STRING_CST)\n+\t || (TREE_CODE (expr) == CONST_DECL && !TREE_STATIC (expr)))\n+\t ? NON_LVALUE_EXPR : VIEW_CONVERT_EXPR);\n+ tree wrapper = build1_loc (expr_loc, code, TREE_TYPE (expr), expr);\n+ EXPR_LOCATION_WRAPPER_P (wrapper) = 1;\n+ return wrapper;\n+ };\n /* We can still diagnose some things about allocator/alignment even if nl\n is NULL_TREE. */\n \n finish_omp_allocate (pragma_tok->location,\n \t\t nl,\n-\t\t allocator,\n-\t\t alignment,\n+\t\t maybe_force_wrap_with_location (allocator),\n+\t\t maybe_force_wrap_with_location (alignment),\n \t\t directive_ctx);\n }\n \ndiff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc\nindex aa41a46e007..d27f3c1118f 100644\n--- a/gcc/cp/pt.cc\n+++ b/gcc/cp/pt.cc\n@@ -20469,11 +20469,25 @@ tsubst_stmt (tree t, tree args, tsubst_flags_t complain, tree in_decl)\n case OMP_ALLOCATE:\n {\n \tgcc_assert (flag_openmp);\n-\n-\ttree alloc\n-\t = tsubst_expr (OMP_ALLOCATE_ALLOCATOR (t), args, complain, in_decl);\n-\ttree align\n-\t = tsubst_expr (OMP_ALLOCATE_ALIGN (t), args, complain, in_decl);\n+\t/* We force a location wrapper in some cases that don't get wrapped by\n+\t maybe_wrap_with_location, tsubst_expr doesn't rewrap them in those\n+\t cases so we have to do it. */\n+\tauto subst_and_rewrap = [&] (const tree expr)\n+\t {\n+\t if (!expr || expr == error_mark_node)\n+\t return expr;\n+\t tree ret = tsubst_expr (tree_strip_any_location_wrapper (expr),\n+\t\t\t\t args, complain, in_decl);\n+\t if (location_wrapper_p (expr) && !CAN_HAVE_LOCATION_P (ret))\n+\t {\n+\t\tret = build1_loc (EXPR_LOCATION (expr), TREE_CODE (expr),\n+\t\t\t\t TREE_TYPE (ret), ret);\n+\t\tEXPR_LOCATION_WRAPPER_P (ret) = 1;\n+\t }\n+\t return ret;\n+\t };\n+\ttree alloc = subst_and_rewrap (OMP_ALLOCATE_ALLOCATOR (t));\n+\ttree align = subst_and_rewrap (OMP_ALLOCATE_ALIGN (t));\n \ttree vars = copy_list (OMP_ALLOCATE_VARS (t));\n \tfor (tree node = vars; node != NULL_TREE; node = TREE_CHAIN (node))\n \t {\ndiff --git a/gcc/testsuite/g++.dg/gomp/allocate-10.C b/gcc/testsuite/g++.dg/gomp/allocate-10.C\nindex e0f3bcc1780..27f739df6a5 100644\n--- a/gcc/testsuite/g++.dg/gomp/allocate-10.C\n+++ b/gcc/testsuite/g++.dg/gomp/allocate-10.C\n@@ -34,7 +34,7 @@ void auto_nttp_allocator_static_0()\n static int a;\n #pragma omp allocate(a) allocator(Alloc)\n /* { dg-error \"invalid conversion from 'int' to 'omp_allocator_handle_t'\" \"\" { target *-*-* } .-1 } */\n- /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { xfail *-*-* } .-2 } */\n+ /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { target *-*-* } .-2 } */\n }\n \n template<auto Alloc>\n@@ -49,7 +49,7 @@ void auto_nttp_allocator_static_2()\n {\n static int a;\n #pragma omp allocate(a) allocator(Alloc)\n- /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { target *-*-* } .-1 } */\n }\n \n template<auto Alloc>\n@@ -76,8 +76,6 @@ void instantiate_auto_nttp_allocator_static()\n \n #undef DEFINITELY_NOT_PREDEFINED\n \n-/* { dg-bogus \"'allocator' clause requires a constant predefined allocator\" \"\" { xfail *-*-* } 0 } */\n-\n /* Invalid align clause */\n \n template<auto Align>\n@@ -91,7 +89,7 @@ template<auto Align>\n void auto_nttp_align_0()\n {\n int a;\n- #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+ #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } } */\n }\n \n template<auto Align>\n@@ -99,7 +97,7 @@ void auto_nttp_align_1()\n {\n int a;\n #pragma omp allocate(a) align(Align)\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n /* { dg-error {could not convert 'nullptr' from 'std::nullptr_t' to '(?:long )?unsigned int'} \"\" { target *-*-* } .-2 } */\n }\n \n@@ -111,5 +109,3 @@ void instantiate_auto_nttp_align()\n auto_nttp_align_1<32>(); /* { dg-bogus \"required from here\" } */\n auto_nttp_align_1<nullptr>(); /* { dg-message \"required from here\" } */\n }\n-\n-/* { dg-bogus \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } 0 } */\ndiff --git a/gcc/testsuite/g++.dg/gomp/allocate-14.C b/gcc/testsuite/g++.dg/gomp/allocate-14.C\nindex d40288d957d..a622adc34d9 100644\n--- a/gcc/testsuite/g++.dg/gomp/allocate-14.C\n+++ b/gcc/testsuite/g++.dg/gomp/allocate-14.C\n@@ -121,9 +121,9 @@ void nttp_allocator_static()\n {\n static int a; /* { dg-note \"'a' declared here\" } */\n #pragma omp allocate(a) allocator(Alloc)\n- /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { target *-*-* } .-1 } */\n /* { dg-note \"because one or more variables with static storage duration appear in the 'allocate' directive\" \"\" { target *-*-* } .-2 } */\n- /* { dg-note \"expression evaluates to '1024'\" \"\" { xfail *-*-* } .-3 }*/\n+ /* { dg-note \"expression evaluates to '1024'\" \"\" { target *-*-* } .-3 }*/\n }\n \n template<omp_allocator_handle_t Alloc>\n@@ -145,9 +145,9 @@ void nttp_dependent_type_allocator_static_0()\n {\n static int a; /* { dg-note \"'a' declared here\" } */\n #pragma omp allocate(a) allocator(Alloc)\n- /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'allocator' clause requires a constant predefined allocator\" \"\" { target *-*-* } .-1 } */\n /* { dg-note \"because one or more variables with static storage duration appear in the 'allocate' directive\" \"\" { target *-*-* } .-2 } */\n- /* { dg-note \"expression evaluates to '1024'\" \"\" { xfail *-*-* } .-3 }*/\n+ /* { dg-note \"expression evaluates to '1024'\" \"\" { target *-*-* } .-3 }*/\n }\n \n template<typename AllocT, AllocT Alloc>\n@@ -266,7 +266,7 @@ template<int Align>\n void nttp_align()\n {\n int a;\n- #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+ #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n }\n \n template<int Align>\n@@ -289,7 +289,7 @@ template<typename AlignT, AlignT Align>\n void nttp_dependent_type_align_0()\n {\n int a;\n- #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+ #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n }\n \n template<typename AlignT, AlignT Align>\n@@ -420,7 +420,7 @@ void all_dependent_2()\n int b = 42;\n Var a = b;\n #pragma omp allocate(a) allocator(Alloc) align(Align)\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n }\n \n template<typename Var,\n@@ -444,7 +444,7 @@ void all_dependent_4()\n Var a = b; /* { dg-note \"'a' declared here\" } */\n #pragma omp allocate(a) allocator(Alloc) align(Align)\n /* { dg-error \"variables with reference type may not appear in an 'allocate' directive\" \"\" { target *-*-* } .-1 } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-2 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-2 } */\n }\n \n template<typename Var,\n@@ -456,7 +456,7 @@ void all_dependent_5()\n Var a = b;\n #pragma omp allocate(a) allocator(Alloc) align(Align)\n /* { dg-error \"invalid conversion from 'int' to 'omp_allocator_handle_t'\" \"\" { target *-*-* } .-1 } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-2 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-2 } */\n }\n \n template<typename Var,\n@@ -469,7 +469,7 @@ void all_dependent_6()\n #pragma omp allocate(a) allocator(Alloc) align(Align)\n /* { dg-error \"variables with reference type may not appear in an 'allocate' directive\" \"\" { target *-*-* } .-1 } */\n /* { dg-error \"invalid conversion from 'int' to 'omp_allocator_handle_t'\" \"\" { target *-*-* } .-2 } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-3 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-3 } */\n }\n \n void instantiate_all_dependent()\n@@ -603,7 +603,7 @@ template<int Align>\n void templ_no_vars_dep_align_invalid()\n {\n #pragma omp allocate() align(Align) /* { dg-error \"expected unqualified-id before '\\\\\\)' token\" } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n }\n template void templ_no_vars_dep_align_invalid<42>();\n \n@@ -876,7 +876,7 @@ template<int Align>\n void templ_invalid_vars_param_dependent_align_invalid(int p) /* { dg-note \"parameter 'p' declared here\" } */\n {\n #pragma omp allocate(p) align(Align) /* { dg-error \"function parameter 'p' may not appear as list item in an 'allocate' directive\" } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n }\n template void templ_invalid_vars_param_dependent_align_invalid<42>(int);\n \n@@ -908,7 +908,7 @@ void templ_invalid_vars_out_of_scope_dependent_align_invalid()\n int a; /* { dg-note \"declared here\" } */\n {\n #pragma omp allocate(a) align(Align) /* { dg-error \"'allocate' directive must be in the same scope as 'a'\" } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n }\n }\n template void templ_invalid_vars_out_of_scope_dependent_align_invalid<42>();\n@@ -944,7 +944,7 @@ void templ_invalid_vars_out_of_scope_and_param_dependent_align_invalid(int p) /*\n {\n #pragma omp allocate(a, p) align(Align) /* { dg-error \"'allocate' directive must be in the same scope as 'a'\" } */\n /* { dg-error \"function parameter 'p' may not appear as list item in an 'allocate' directive\" \"\" { target *-*-* } .-1 } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-2 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-2 } */\n }\n }\n template void templ_invalid_vars_out_of_scope_and_param_dependent_align_invalid<42>(int);\n@@ -1001,7 +1001,7 @@ void multiple_uses_dep_directive_before_invalid_align()\n {\n int a;\n #pragma omp allocate(a) align(Align) /* { dg-note \"'a' previously appeared here\" } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n #pragma omp allocate(a) /* { dg-error \"'a' already appeared as list item in an 'allocate' directive\" } */\n }\n template void multiple_uses_dep_directive_before_invalid_align<42>();\n@@ -1032,11 +1032,6 @@ void multiple_uses_dep_directive_after_invalid_align()\n int a;\n #pragma omp allocate(a) /* { dg-note \"'a' previously appeared here\" } */\n #pragma omp allocate(a) align(Align) /* { dg-error \"'a' already appeared as list item in an 'allocate' directive\" } */\n- /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+ /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n }\n template void multiple_uses_dep_directive_after_invalid_align<42>();\n-\n-/* These are fixed by the later location wrapping patch. */\n-/* { dg-bogus \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } 0 } */\n-/* { dg-bogus \"'allocator' clause requires a constant predefined allocator\" \"\" { xfail *-*-* } 0 } */\n-/* { dg-bogus \"expression evaluates to '1024'\" \"\" { xfail *-*-* } 0 } */\ndiff --git a/gcc/testsuite/g++.dg/gomp/allocate-17.C b/gcc/testsuite/g++.dg/gomp/allocate-17.C\nindex e265ecdd1e7..93777d611ea 100644\n--- a/gcc/testsuite/g++.dg/gomp/allocate-17.C\n+++ b/gcc/testsuite/g++.dg/gomp/allocate-17.C\n@@ -31,7 +31,7 @@ auto lambda_0_bad_align()\n \t int b = 42;\n \t decltype(p3) a = b;\n \t #pragma omp allocate(a) align(Align) allocator(p2)\n-\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n \t return a;\n \t};\n };\n@@ -87,7 +87,7 @@ auto lambda_0_all()\n \t decltype(p3) a = b; /* { dg-message \"'a' declared here\" } */\n \t #pragma omp allocate(a) align(Align) allocator(p2)\n \t /* { dg-error \"variables with reference type may not appear in an 'allocate' directive\" \"\" { target *-*-* } .-1 } */\n-\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-2 } */\n+\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-2 } */\n \t /* { dg-error \"invalid conversion from 'int' to 'omp_allocator_handle_t'\" \"\" { target *-*-* } .-3 } */\n \t return a;\n \t};\n@@ -212,18 +212,18 @@ auto lambda_1_bad_align()\n {\n return [](auto p0){\n int a = 42;\n- #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+ #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n return [](auto p1){\n int a = 42;\n- #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+ #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n return [](auto p2){\n \tint a = 42;\n-\t#pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+\t#pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n \treturn [p2](auto p3){\n \t int b = 42;\n \t decltype(p3) a = b;\n \t #pragma omp allocate(a) align(Align) allocator(p2)\n-\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-1 } */\n+\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-1 } */\n \t return a;\n \t};\n };\n@@ -284,19 +284,19 @@ auto lambda_1_all()\n {\n return [](auto p0){\n int a = 42;\n- #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+ #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n return [](auto p1){\n int a = 42;\n- #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+ #pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n return [](auto p2){\n \tint a = 42;\n-\t#pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } } */\n+\t#pragma omp allocate(a) align(Align) /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" } */\n \treturn [p2](auto p3){\n \t int b = 42;\n \t decltype(p3) a = b; /* { dg-message \"'a' declared here\" } */\n \t #pragma omp allocate(a) align(Align) allocator(p2)\n \t /* { dg-error \"variables with reference type may not appear in an 'allocate' directive\" \"\" { target *-*-* } .-1 } */\n-\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } .-2 } */\n+\t /* { dg-error \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { target *-*-* } .-2 } */\n \t /* { dg-error \"invalid conversion from 'int' to 'omp_allocator_handle_t'\" \"\" { target *-*-* } .-3 } */\n \t return a;\n \t};\n@@ -555,6 +555,3 @@ void instantiate_lambdas_2()\n auto c3 = c2.operator()<int&>(a); /* { dg-message \"required from here\" } */\n }\n }\n-\n-/* This is fixed by the later location wrapping patch. */\n-/* { dg-bogus \"'align' clause argument needs to be positive constant power of two integer expression\" \"\" { xfail *-*-* } 0 } */\n", "prefixes": [ "06/12" ] }