diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2018-12-05 18:56:57 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2018-12-05 18:56:57 +0000 |
commit | c3463f6ba8f5b0baacd46a18a7c991e3a3d65403 (patch) | |
tree | 3b9c9fd6f815d580f7b7c55e7319397761aa687d /clang/lib/Sema/SemaChecking.cpp | |
parent | 83efe2f1f6aee588e15ed9a9a4bbea0e5d0ac1fe (diff) | |
download | llvm-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.cpp | 12 |
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; |