jkorous added reviewers: rjmccall, doug.gregor.
jkorous added subscribers: rjmccall, doug.gregor.
jkorous added a comment.

Adding @rjmccall and @doug.gregor who might have some insight.

Honestly, I don't know how IWYU works and my familiarity with Sema is limited 
so bear with me.

From what I see `TUScope` is set only in one place in clang and that is `void 
Sema::ActOnTranslationUnitScope(Scope *S)`.

  > grep -nr --exclude="*/test/*" "TUScope\s\+=" .
  ./lib/Sema/Sema.cpp:70:  TUScope = S;
  ./lib/Sema/Sema.cpp:149:  TUScope = nullptr;
  ./lib/Sema/Sema.cpp:946:      TUScope = nullptr;
  ./lib/Sema/Sema.cpp:1168:    TUScope = nullptr;

(TUScope seems not to be copied anywhere.)

  > grep -nr --exclude="*/test/*" "=\s\+TUScope" .

`ActOnTranslationUnitScope` itself is called only from `void 
Parser::Initialize()`.

Just an idea - can't your code mimic behavior of `Parser::Initialize()`?

Other than that it seems that:

1. The code obviously assumes `TUScope != nullptr`.
2. We aren't aware of hitting this case in clang.

So even with my limited insight I would be inclined to make the assumption 
explicit. The whole block of code after `if (isValidVarArgType(E->getType()) == 
VAK_Undefined)` seems to be mostly checks for errors so `ExprError()` seems 
like the right error reporting mechanism here as it's part of this method's 
interface and randomly picked caller's code in `SemaOverload.cpp` seems to 
handle such case.

Re: tests Since you are using Sema from your code I assume you should be able 
to create a regression test (with a suitable code input) as a minimal 
reproducer. You might take a look how is `Sema` set up in unittests.


Repository:
  rC Clang

https://reviews.llvm.org/D54047



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to