[PATCH] D87425: [CodeGen][typeid] Emit typeinfo directly if type is known at compile-time

Hans Wennborg via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 10 05:18:28 PDT 2020


hans added a comment.

I'm not sure that changing isPotentiallyEvaluated() is the right thing to do. The meaning of that corresponds to text in the standard: https://eel.is/c++draft/expr.typeid#3 so changing it to something that doesn't match the standard exactly seems wrong.

I think it would be safer to do the change purely as an optimization in codegen (maybe we could add a new helper method that could also be used by the warning).

Also, I found another interesting test case: https://godbolt.org/z/aW4ojr

  #include <typeinfo>
  
  class B {
  public:
    virtual void f();
  };
  
  B f();
  
   const std::type_info& g() {
    return typeid(f());
  }

Here MSVC warns about /GR- and emits the call to  __RTtypeid even though I think it's not necessary since the type is statically known. Actually, if I understand things correctly, f() shouldn't even be evaluated here since the expression is not a glvalue, and Clang gets that right. So that's a case where our codegen is better than MSVC :-)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87425



More information about the cfe-commits mailing list