aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaChecking.cpp
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2018-12-05 18:56:57 +0000
committerAaron Ballman <aaron@aaronballman.com>2018-12-05 18:56:57 +0000
commitc3463f6ba8f5b0baacd46a18a7c991e3a3d65403 (patch)
tree3b9c9fd6f815d580f7b7c55e7319397761aa687d /clang/lib/Sema/SemaChecking.cpp
parent83efe2f1f6aee588e15ed9a9a4bbea0e5d0ac1fe (diff)
downloadllvm-c3463f6ba8f5b0baacd46a18a7c991e3a3d65403.zip
llvm-c3463f6ba8f5b0baacd46a18a7c991e3a3d65403.tar.gz
llvm-c3463f6ba8f5b0baacd46a18a7c991e3a3d65403.tar.bz2
Do not check for parameters shadowing fields in function declarations.
We would issue a false-positive diagnostic for parameters in function declarations shadowing fields; we now only issue the diagnostic on a function definition instead. llvm-svn: 348400
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 4f891e0..d82bd20 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -12141,6 +12141,18 @@ bool Sema::CheckParmsForFunctionDef(ArrayRef<ParmVarDecl *> Parameters,
if (!Param->getType().isConstQualified())
Diag(Param->getLocation(), diag::err_attribute_pointers_only)
<< Attr->getSpelling() << 1;
+
+ // Check for parameter names shadowing fields from the class.
+ if (LangOpts.CPlusPlus && !Param->isInvalidDecl()) {
+ // The owning context for the parameter should be the function, but we
+ // want to see if this function's declaration context is a record.
+ DeclContext *DC = Param->getDeclContext();
+ if (DC && DC->isFunctionOrMethod()) {
+ if (auto *RD = dyn_cast<CXXRecordDecl>(DC->getParent()))
+ CheckShadowInheritedFields(Param->getLocation(), Param->getDeclName(),
+ RD, /*DeclIsField*/ false);
+ }
+ }
}
return HasInvalidParm;