diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 3edce941c381..3ab5d26a9a75 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -8669,12 +8669,13 @@ bool Sema::hasAcceptableDefinition(NamedDecl *D, NamedDecl **Suggested, // of it will do. *Suggested = nullptr; for (auto *Redecl : ED->redecls()) { - if (isVisible(Redecl)) + if (isAcceptable(Redecl, Kind)) return true; if (Redecl->isThisDeclarationADefinition() || (Redecl->isCanonicalDecl() && !*Suggested)) *Suggested = Redecl; } + return false; } D = ED->getDefinition(); diff --git a/clang/test/Modules/enum-class.cppm b/clang/test/Modules/enum-class.cppm new file mode 100644 index 000000000000..01ae8c0d8814 --- /dev/null +++ b/clang/test/Modules/enum-class.cppm @@ -0,0 +1,26 @@ +// Checks for reachability for C++11 enum class properly +// +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm +// RUN: %clang_cc1 -std=c++20 -fprebuilt-module-path=%t %t/Use.cpp -verify -fsyntax-only + +//--- foo.h +enum class foo { + a, b, c +}; + +//--- A.cppm +module; +#include "foo.h" +export module A; +export foo func(); + +//--- Use.cpp +// expected-no-diagnostics +import A; +void bar() { + auto f = func(); +}