brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · e82cb1f Raw
84 lines · plain
1// RUN: rm -rf %t2// RUN: mkdir -p %t3// RUN: split-file %s %t4//5// RUN: %clang_cc1 -std=c++20 %t/template_lambdas.cppm -emit-module-interface \6// RUN:    -o %t/lambdas.pcm7// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \8// RUN:    -verify9//10// RUN: %clang_cc1 -std=c++20 %t/template_lambdas2.cppm -emit-module-interface \11// RUN:    -o %t/lambdas2.pcm12// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \13// RUN:    -verify -DUSE_LAMBDA214 15// Test again with reduced BMI16// RUN: rm -rf %t17// RUN: mkdir -p %t18// RUN: split-file %s %t19//20// RUN: %clang_cc1 -std=c++20 %t/template_lambdas.cppm -emit-reduced-module-interface \21// RUN:    -o %t/lambdas.pcm22// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \23// RUN:    -verify24//25// RUN: %clang_cc1 -std=c++20 %t/template_lambdas2.cppm -emit-reduced-module-interface \26// RUN:    -o %t/lambdas2.pcm27// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -fsyntax-only \28// RUN:    -verify -DUSE_LAMBDA229 30//--- lambdas.h31auto l1 = []<int I>() constexpr -> int {32    return I;33};34 35auto l2 = []<auto I>() constexpr -> decltype(I) {36    return I;37};38 39auto l3 = []<class T>(auto i) constexpr -> T {40  return T(i);41};42 43auto l4 = []<template<class> class T, class U>(T<U>, auto i) constexpr -> U {44  return U(i);45};46 47//--- template_lambdas.cppm48module;49#include "lambdas.h"50export module lambdas;51export using ::l1;52export using ::l2;53export using ::l3;54export using ::l4;55 56//--- template_lambdas2.cppm57export module lambdas2;58export {59#include "lambdas.h"  60}61 62//--- Use.cpp63// expected-no-diagnostics64#ifndef USE_LAMBDA265import lambdas;66#else67import lambdas2;68#endif69 70static_assert(l1.operator()<5>() == 5);71static_assert(l1.operator()<6>() == 6);72 73static_assert(l2.operator()<7>() == 7);74static_assert(l2.operator()<nullptr>() == nullptr);75 76static_assert(l3.operator()<int>(8.4) == 8);77static_assert(l3.operator()<int>(9.9) == 9);78 79template<typename T>80struct DummyTemplate { };81 82static_assert(l4(DummyTemplate<float>(), 12) == 12.0);83static_assert(l4(DummyTemplate<int>(), 19.8) == 19);84