This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG7ad6c8414ce2: [clang] Fix an assertion crash in delayed access check. (authored by hokein).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D91380/new/ https://reviews.llvm.org/D91380 Files: clang/lib/Sema/SemaAccess.cpp clang/test/SemaCXX/cxx14-access.cpp Index: clang/test/SemaCXX/cxx14-access.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/cxx14-access.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++14 -verify %s + +namespace NoCrashOnDelayedAccessCheck { +class Foo { + class Private; // expected-note {{declared private here}} +}; + +struct Bar {}; + +template <typename T> +Foo::Private Bar::ABC; // expected-error {{no member named 'ABC' in 'NoCrashOnDelayedAccessCheck::Bar'}} \ + expected-error {{'Private' is a private member of}} +} Index: clang/lib/Sema/SemaAccess.cpp =================================================================== --- clang/lib/Sema/SemaAccess.cpp +++ clang/lib/Sema/SemaAccess.cpp @@ -1476,7 +1476,8 @@ } else if (FunctionDecl *FN = dyn_cast<FunctionDecl>(D)) { DC = FN; } else if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D)) { - DC = cast<DeclContext>(TD->getTemplatedDecl()); + if (isa<DeclContext>(TD->getTemplatedDecl())) + DC = cast<DeclContext>(TD->getTemplatedDecl()); } EffectiveContext EC(DC);
Index: clang/test/SemaCXX/cxx14-access.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/cxx14-access.cpp @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++14 -verify %s + +namespace NoCrashOnDelayedAccessCheck { +class Foo { + class Private; // expected-note {{declared private here}} +}; + +struct Bar {}; + +template <typename T> +Foo::Private Bar::ABC; // expected-error {{no member named 'ABC' in 'NoCrashOnDelayedAccessCheck::Bar'}} \ + expected-error {{'Private' is a private member of}} +} Index: clang/lib/Sema/SemaAccess.cpp =================================================================== --- clang/lib/Sema/SemaAccess.cpp +++ clang/lib/Sema/SemaAccess.cpp @@ -1476,7 +1476,8 @@ } else if (FunctionDecl *FN = dyn_cast<FunctionDecl>(D)) { DC = FN; } else if (TemplateDecl *TD = dyn_cast<TemplateDecl>(D)) { - DC = cast<DeclContext>(TD->getTemplatedDecl()); + if (isa<DeclContext>(TD->getTemplatedDecl())) + DC = cast<DeclContext>(TD->getTemplatedDecl()); } EffectiveContext EC(DC);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits