[PATCH] D57787: [clang-tidy] modernize-avoid-c-arrays: avoid main function (PR40604)

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 6 05:25:09 PST 2019

aaron.ballman added inline comments.

Comment at: clang-tidy/modernize/AvoidCArraysCheck.cpp:35
+  const clang::DeclContext *DC = Node.getDeclContext();
+  const clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(DC);
+  if (!FD)
JonasToth wrote:
> lebedev.ri wrote:
> > lebedev.ri wrote:
> > > JonasToth wrote:
> > > > There is `FunctionDecl->castToDeclContext()` which is probably a better fit here.
> > > I'm guessing you meant `cast*From*DeclContext()`.
> > > Interesting, that function is never once used.
> > > And it uses `static_cast<>()`..
> > I'm not too sure about this.
> > Given `ParmVarDecl`, are we sure it's `DeclContext` is *always* `FunctionDecl`?
> From Doc "Represents a parameter to a function. " so i think it has always a `FunctionDecl` (or subclass) as DeclContext.
> Maybe that function is a relict? I just saw it in the docs too and thought it makes sense to use it. No opinion on that, @aaron.ballman do you know more on that?
> From Doc "Represents a parameter to a function. " so i think it has always a FunctionDecl (or subclass) as DeclContext.

`ObjCMethodDecl` is not a subclass of `FunctionDecl`, yet it contains `ParmVarDecl` objects and is a `DeclContext`.

I would use `dyn_cast` here instead.

Comment at: docs/clang-tidy/checks/modernize-avoid-c-arrays.rst:58
+Similarly, the ``main()`` function is ignored. It's second and third params can
+be either ``char* argv[]`` or ``char** argv``, but can not be ``std::array<>``.
It's -> Its
params -> parameters

  rCTE Clang Tools Extra



More information about the cfe-commits mailing list