From: David Majnemer Date: Wed, 17 Dec 2014 02:41:36 +0000 (+0000) Subject: Sema: Don't dyn_cast a null pointer in CheckUsingDeclQualifier X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=65c422ad3f0e74a95af524bab4bd98eb10615025;p=clang Sema: Don't dyn_cast a null pointer in CheckUsingDeclQualifier This code was written with the intent that a pointer could be null but we dyn_cast'd it anyway. Change the dyn_cast to a dyn_cast_or_null. This fixes PR21933. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224411 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index b2a765b53a..96149c5e04 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -8159,7 +8159,7 @@ bool Sema::CheckUsingDeclQualifier(SourceLocation UsingLoc, // If we weren't able to compute a valid scope, it must be a // dependent class scope. if (!NamedContext || NamedContext->isRecord()) { - auto *RD = dyn_cast(NamedContext); + auto *RD = dyn_cast_or_null(NamedContext); if (RD && RequireCompleteDeclContext(const_cast(SS), RD)) RD = nullptr; diff --git a/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8-cxx0x.cpp b/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8-cxx0x.cpp index 4f89dcfb3f..ebe5388d65 100644 --- a/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8-cxx0x.cpp +++ b/test/CXX/dcl.dcl/basic.namespace/namespace.udecl/p8-cxx0x.cpp @@ -17,6 +17,11 @@ void f() { using X::s; // expected-error{{using declaration cannot refer to class member}} } +template +struct PR21933 : T { + static void StaticFun() { using T::member; } // expected-error{{using declaration cannot refer to class member}} +}; + struct S { static int n; struct Q {};