[cfe-dev] [Openmp-dev] [OpenMP] Parameter packs
Joachim Protze via cfe-dev
cfe-dev at lists.llvm.org
Mon Oct 15 08:16:18 PDT 2018
On 10/15/2018 05:03 PM, Kelvin Li via Openmp-dev wrote:
> The OpenMP specification has the following restriction:
>
> "Variadic parameter packs cannot be expanded into a directive or its
> clauses except as part of an expression argument to be evaluated by the
> base language, such as into a function call inside an if clause."
>
Glad to see that this is covered by spec text. Unfortunately, searching
the document for "parameter pack" has no match, because of the line
break between the two words :/
> The language committee has some discussions on it in the last
> face-to-face meeting. We will look into relaxing this restriction to
> provide better usage with C++ templates.
>
> Kelvin
>
>
> "Openmp-dev" <openmp-dev-bounces at lists.llvm.org> wrote on 2018/10/15
> 10:45:30 AM:
>
> > From: David Greene via Openmp-dev <openmp-dev at lists.llvm.org>
> > To: "cfe-dev at lists.llvm.org" <cfe-dev at lists.llvm.org>, "openmp-
> > dev at lists.llvm.org" <openmp-dev at lists.llvm.org>
> > Date: 2018/10/15 10:46 AM
> > Subject: [Openmp-dev] [OpenMP] Parameter packs
> > Sent by: "Openmp-dev" <openmp-dev-bounces at lists.llvm.org>
> >
> > Should this compile?
> >
> > #include <tuple>
> >
> > constexpr std::size_t N = 100;
> >
> > double A[N];
> >
> > template<typename ...Args>
> > void loop(Args ...args) {
> > #pragma omp parallel firstprivate(args...)
> > for (std::size_t i = 0; i < N; ++i) {
> > A[i] = (i + ... + args);
> > }
> > }
> >
> > int main(void) {
> > std::apply([] (const auto & ...args) { loop(args...); },
> > std::tuple<int, double, float>(10, 2.6, 3.4));
> > std::apply([] (const auto & ...args) { loop(args...); },
> > std::tuple<int, long, char, double, short>(10, 100,
> > 'b', 2.6, 3));
> > return 0;
> > }
> >
> > clang++ errors with:
> >
> > firstprivate.cpp:10:39: error: expected ',' or ')' in 'firstprivate'
> clause
> > #pragma omp parallel firstprivate(args...)
> > ^
> > firstprivate.cpp:10:39: error: expected expression
> > 2 errors generated.
> >
> > g++ gives a similar error. I was not terribly surprised by this.
> > However, it sure would be nice if it worked.
> >
> > -David
> > _______________________________________________
> > Openmp-dev mailing list
> > Openmp-dev at lists.llvm.org
> > https://urldefense.proofpoint.com/v2/url?
> >
> u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_openmp-2Ddev&d=DwIGaQ&c=jf_iaSHvJObTbx-
> >
> siA1ZOg&r=yebGUrvFJWJ7GtM9woczVA&m=2EY3U33AkbJ5xLUmwJHWUGdi3b2YZ6eYCasI_AnITmo&s=5ovzADp3MTFkziuO0pgVRB4f6eqcyYS8Rujz1vEheF0&e=
> >
>
>
>
> _______________________________________________
> Openmp-dev mailing list
> Openmp-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-dev
>
More information about the cfe-dev
mailing list