[PATCH] D145906: [clang-tidy] Correctly handle evaluation order of designated initializers.

Martin Böhme via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 14 07:11:08 PDT 2023


mboehme added inline comments.


================
Comment at: clang-tools-extra/clang-tidy/utils/ExprSequence.cpp:67
+llvm::SmallVector<const InitListExpr *>
+allInitListExprForms(const InitListExpr *InitList) {
+  llvm::SmallVector<const InitListExpr *> result = {InitList};
----------------
PiotrZSL wrote:
> maybe some other name instead of allInitListExprForms, like getAllInitForms
How about this?


================
Comment at: clang-tools-extra/clang-tidy/utils/ExprSequence.cpp:69-72
+  if (InitList->isSemanticForm() && InitList->getSyntacticForm())
+    result.push_back(InitList->getSyntacticForm());
+  if (InitList->isSyntacticForm() && InitList->getSemanticForm())
+    result.push_back(InitList->getSemanticForm());
----------------
PiotrZSL wrote:
> this looks like typo... but it isn't, it's just unnecessary.
> 
> ``InitList->isSemanticForm() && InitList->getSyntacticForm()`` is equal to:
> ``AltForm.getInt() && AltForm.getPointer()``
> 
> ``InitList->isSyntacticForm() && InitList->getSemanticForm()`` is equal to:
> ``(!AltForm.getInt() || !AltForm.getPointer()) && (!AltForm.getInt()) && AltForm.getPointer()``
> 
> Why we coudn't have "getAnyForm".
> 
> any code could just look like this:
> ``if (const InitListExpr * Form = InitList->getSyntacticForm())``
> ``      result.push_back(Form);``
> ``if (const InitListExpr * Form = InitList->getSemanticForm())``
> ``      result.push_back(Form);``
> 
> this looks like typo... but it isn't, it's just unnecessary.

Ah, of course, thanks for pointing this out to me.

> Why we coudn't have "getAnyForm".

Not sure exactly what you mean?

I've updated the code to do what you suggested above (i.e. don't call `isSemanticForm()`, just call `getSyntacticForm()` and see if returns non-null).

We still need to initialize `result` with `InitList` because `InitList->getSyntacticForm()` returns null if `InitList` is already in syntactic form.

I hope that makes sense? Please let me know if there's anything I missed from your original response.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145906/new/

https://reviews.llvm.org/D145906



More information about the cfe-commits mailing list