forked from OSchip/llvm-project
[OPENMP] Fix for PR34321: ustom OpenMP reduction in C++ template causes
SEGFAULT at compile time Compiler crashed when tried to rebuild non-template expression in dependent context. llvm-svn: 311777
This commit is contained in:
parent
780b462840
commit
fdc2035373
|
@ -9057,7 +9057,8 @@ buildDeclareReductionRef(Sema &SemaRef, SourceLocation Loc, SourceRange Range,
|
|||
PrevD = D;
|
||||
}
|
||||
}
|
||||
if (Ty->isDependentType() || Ty->isInstantiationDependentType() ||
|
||||
if (SemaRef.CurContext->isDependentContext() || Ty->isDependentType() ||
|
||||
Ty->isInstantiationDependentType() ||
|
||||
Ty->containsUnexpandedParameterPack() ||
|
||||
filterLookupForUDR<bool>(Lookups, [](ValueDecl *D) -> bool {
|
||||
return !D->isInvalidDecl() &&
|
||||
|
|
|
@ -92,6 +92,22 @@ T foo(T a) {
|
|||
return a;
|
||||
}
|
||||
|
||||
struct Summary {
|
||||
void merge(const Summary& other) {}
|
||||
};
|
||||
|
||||
template <typename K>
|
||||
void work() {
|
||||
Summary global_summary;
|
||||
#pragma omp declare reduction(+ : Summary : omp_out.merge(omp_in))
|
||||
#pragma omp parallel for reduction(+ : global_summary)
|
||||
for (int k = 1; k <= 100; ++k) {
|
||||
}
|
||||
}
|
||||
|
||||
struct A {};
|
||||
|
||||
|
||||
// CHECK-LABEL: @main
|
||||
int main() {
|
||||
int i = 0;
|
||||
|
@ -110,6 +126,8 @@ int main() {
|
|||
// CHECK: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
|
||||
// CHECK: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(
|
||||
// CHECK: call {{.*}}void (%ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call({{[^@]*}} @{{[^@]*}}[[REGION:@[^ ]+]]
|
||||
// CHECK-LABEL: work
|
||||
work<A>();
|
||||
// CHECK-LABEL: foo
|
||||
return foo(15);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue