
Close https://github.com/llvm/llvm-project/issues/87609 We tried to profile the body of the lambda expressions in https://reviews.llvm.org/D153957. But as the original comments show, it is indeed dangerous. After we tried to skip calculating the ODR hash values recently, we have fall into this trap twice. So in this patch, I choose to not profile the body of the lambda expression. The signature of the lambda is still profiled.
45 lines
836 B
C++
45 lines
836 B
C++
// RUN: rm -rf %t
|
|
// RUN: mkdir -p %t
|
|
// RUN: split-file %s %t
|
|
//
|
|
// RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf %t/A.cppm -emit-module-interface -o %t/A.pcm
|
|
// RUN: %clang_cc1 -std=c++20 -fskip-odr-check-in-gmf %t/test.cpp -fprebuilt-module-path=%t -fsyntax-only -verify
|
|
|
|
//--- header.h
|
|
#pragma once
|
|
template <class _Tp>
|
|
class Optional {};
|
|
|
|
template <class _Tp>
|
|
concept C = requires(const _Tp& __t) {
|
|
[]<class _Up>(const Optional<_Up>&) {}(__t);
|
|
};
|
|
|
|
//--- func.h
|
|
#include "header.h"
|
|
template <C T>
|
|
void func() {}
|
|
|
|
//--- test_func.h
|
|
#include "func.h"
|
|
|
|
inline void test_func() {
|
|
func<Optional<int>>();
|
|
}
|
|
|
|
//--- A.cppm
|
|
module;
|
|
#include "header.h"
|
|
#include "test_func.h"
|
|
export module A;
|
|
export using ::test_func;
|
|
|
|
//--- test.cpp
|
|
// expected-no-diagnostics
|
|
import A;
|
|
#include "test_func.h"
|
|
|
|
void test() {
|
|
test_func();
|
|
}
|