Skip to content

Commit

Permalink
Mark destructor of hyperobject member referenced
Browse files Browse the repository at this point in the history
  • Loading branch information
VoxSciurorum committed Feb 7, 2024
1 parent fda22b2 commit 8b9ff9c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
2 changes: 1 addition & 1 deletion clang/lib/Sema/SemaDeclCXX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5775,7 +5775,7 @@ Sema::MarkBaseAndMemberDestructorsReferenced(SourceLocation Location,

QualType FieldType = Context.getBaseElementType(Field->getType());

const RecordType* RT = FieldType->getAs<RecordType>();
const RecordType* RT = FieldType.stripHyperobject()->getAs<RecordType>();
if (!RT)
continue;

Expand Down
23 changes: 23 additions & 0 deletions clang/test/Cilk/hyper-destruct2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// RUN: %clang_cc1 %s -x c++ -fopencilk -verify -disable-llvm-passes -S -emit-llvm -o - | FileCheck %s
// expected-no-diagnostics
template <typename T>
struct Inner
{
static void identity(void *);
static void reduce(void *, void *);
Inner();
~Inner() noexcept { }
};

struct Outer {
Inner<char> _Hyperobject(&Inner<char>::identity, &Inner<char>::reduce) member;
Outer();
~Outer();
};

// Make sure the appropriate variant of ~Inner() is emitted.
// CHECK: define dso_local void @_ZN5OuterD2Ev
// CHECK: call void @_ZN5InnerIcED2Ev
// CHECK: define linkonce_odr void @_ZN5InnerIcED2Ev

Outer::~Outer() { }

0 comments on commit 8b9ff9c

Please sign in to comment.