<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 15, 2020 at 2:52 PM Alexey Bataev <<a href="mailto:a.bataev@outlook.com">a.bataev@outlook.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <p>1. The problem is that it does not produce errors, </p></div></blockquote><div><span class="gmail_default" style="font-family:verdana,sans-serif">ATM, it does produce errors when it's disabled.</span> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>it leads to
      the emission of some declaration that cannot be resolved by the
      linker. This what I was trying to avoid.</p></div></blockquote><div><div class="gmail_default" style="font-family:verdana,sans-serif">I'm OK with disabling it on device, but it should be done in a way to keep RTTI in the host code working.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">E.g. this code should compile: <a href="https://godbolt.org/z/Gzsrof">https://godbolt.org/z/Gzsrof</a></div><div class="gmail_default" style="font-family:verdana,sans-serif">It still has your original change, so clang compilation fails. It does not with NVCC.</div></div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>2. Yes, I did not disable it on the host side, just for the
      device side. I disabled it only for NVPTX target, which is the
      device.<br></p></div></blockquote><div><div class="gmail_default" style="font-family:verdana,sans-serif">It's fine to disable it for code generated for the target. However, the front-end needs to be able to deal with the host-side code where it is OK to use RTTI.</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif">--Artem</div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>
    </p>
    <pre cols="72">-------------
Best regards,
Alexey Bataev</pre>
    <div>15.01.2020 12:49 PM, Artem Belevich
      пишет:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div style="font-family:verdana,sans-serif">Thank you.</div>
        <div style="font-family:verdana,sans-serif"><br>
        </div>
        <div style="font-family:verdana,sans-serif">In general, RTTI should
          probably be treated similar to how we deal with inline
          assembly and ignore errors if they are in the code that we're
          not going to codegen during this side of compilation. E.g.
          during host-side compilation we don't complain about GPU-side
          registers in inline assembly that x86 target is not aware of. </div>
        <div style="font-family:verdana,sans-serif"><br>
        </div>
        <div style="font-family:verdana,sans-serif">Disabling RTTI
          altogether on device side makes it impossible to use in any
          host-side CUDA because RTTI code will be seen by the
          device-side compiler, which will promptly fail, which is
          exactly what happened in this case -- host-side template that
          relied on RTTI failed during device-side compilation:</div>
        <div style="font-family:verdana,sans-serif"><br>
        </div>
        <div style="font-family:verdana,sans-serif"><a href="https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/arena.h#L536" target="_blank">https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/arena.h#L536</a><br>
        </div>
        <div style="font-family:verdana,sans-serif">google/protobuf/arena.h:536:15:
          error: use of typeid requires -frtti<br>
              AllocHook(RTTI_TYPE_ID(T), n);<br>
        </div>
        <div style="font-family:verdana,sans-serif">...<br>
        </div>
        <div style="font-family:verdana,sans-serif">2 errors generated when
          compiling for sm_60.<br>
        </div>
        <div style="font-family:verdana,sans-serif"><br>
        </div>
        <div style="font-family:verdana,sans-serif">--Artem</div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Wed, Jan 15, 2020 at 2:36
          PM Alexey Bataev <<a href="mailto:a.bataev@outlook.com" target="_blank">a.bataev@outlook.com</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>
            <p>Sure, will revert it ASAP.<br>
            </p>
            <pre cols="72">-------------
Best regards,
Alexey Bataev</pre>
            <div>15.01.2020 12:26 PM, Artem Belevich пишет:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">
                <div style="font-family:verdana,sans-serif">Alexey,</div>
                <div style="font-family:verdana,sans-serif"><br>
                </div>
                <div style="font-family:verdana,sans-serif">This breaks
                  compilation of our cuda code which happens to
                  transitively include protobuf headers.</div>
                <div style="font-family:verdana,sans-serif">Can you,
                  please, revert it for now until we figure out how RTTI
                  should be handled?</div>
                <div style="font-family:verdana,sans-serif"><br>
                </div>
                <div style="font-family:verdana,sans-serif">--Artem<br>
                </div>
              </div>
              <br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">On Tue, Jan 14, 2020
                  at 3:15 PM Alexey Bataev via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>>
                  wrote:<br>
                </div>
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
                  Author: Alexey Bataev<br>
                  Date: 2020-01-14T18:12:06-05:00<br>
                  New Revision: 23058f9dd4d7e18239fd63b6da52549514b45fda<br>
                  <br>
                  URL: <a href="https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda</a><br>
                  DIFF: <a href="https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/23058f9dd4d7e18239fd63b6da52549514b45fda.diff</a><br>
                  <br>
                  LOG: [OPENMP]Do not use RTTI by default for NVPTX
                  devices.<br>
                  <br>
                  NVPTX does not support RTTI, so disable it by default.<br>
                  <br>
                  Added: <br>
                      clang/test/Driver/openmp-offload-gpu.cpp<br>
                  <br>
                  Modified: <br>
                      clang/lib/Driver/ToolChain.cpp<br>
                  <br>
                  Removed: <br>
                  <br>
                  <br>
                  <br>
################################################################################<br>
                  diff  --git a/clang/lib/Driver/ToolChain.cpp
                  b/clang/lib/Driver/ToolChain.cpp<br>
                  index cab97b1a601a..3ebbd30195b3 100644<br>
                  --- a/clang/lib/Driver/ToolChain.cpp<br>
                  +++ b/clang/lib/Driver/ToolChain.cpp<br>
                  @@ -68,7 +68,8 @@ static ToolChain::RTTIMode
                  CalculateRTTIMode(const ArgList &Args,<br>
                     }<br>
                  <br>
                     // -frtti is default, except for the PS4 CPU.<br>
                  -  return (Triple.isPS4CPU()) ? ToolChain::RM_Disabled
                  : ToolChain::RM_Enabled;<br>
                  +  return (Triple.isPS4CPU() || Triple.isNVPTX()) ?
                  ToolChain::RM_Disabled<br>
                  +                                                 :
                  ToolChain::RM_Enabled;<br>
                   }<br>
                  <br>
                   ToolChain::ToolChain(const Driver &D, const
                  llvm::Triple &T,<br>
                  <br>
                  diff  --git a/clang/test/Driver/openmp-offload-gpu.cpp
                  b/clang/test/Driver/openmp-offload-gpu.cpp<br>
                  new file mode 100644<br>
                  index 000000000000..9da7308506ae<br>
                  --- /dev/null<br>
                  +++ b/clang/test/Driver/openmp-offload-gpu.cpp<br>
                  @@ -0,0 +1,20 @@<br>
                  +///<br>
                  +/// Perform several driver tests for OpenMP
                  offloading<br>
                  +///<br>
                  +<br>
                  +// REQUIRES: clang-driver<br>
                  +// REQUIRES: x86-registered-target<br>
                  +// REQUIRES: powerpc-registered-target<br>
                  +// REQUIRES: nvptx-registered-target<br>
                  +<br>
                  +///
###########################################################################<br>
                  +<br>
                  +/// PTXAS is passed -c flag by default when
                  offloading to an NVIDIA device using OpenMP<br>
                  +/// Check that the flag is passed when
                  -fopenmp-relocatable-target is used.<br>
                  +// RUN:   %clangxx -### -fopenmp=libomp
                  -fopenmp-targets=nvptx64-nvidia-cuda \<br>
                  +// RUN:          -save-temps -no-canonical-prefixes
                  %s -x c++ -c 2>&1 \<br>
                  +// RUN:   | FileCheck -check-prefix=CHK-RTTI %s<br>
                  +<br>
                  +// CHK-RTTI: clang{{.*}}" "-triple"
                  "nvptx64-nvidia-cuda"<br>
                  +// CHK-RTTI-SAME: "-fno-rtti"<br>
                  +<br>
                  <br>
                  <br>
                  <br>
                  _______________________________________________<br>
                  cfe-commits mailing list<br>
                  <a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
                  <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
                </blockquote>
              </div>
              <br clear="all">
              <div><br>
              </div>
              -- <br>
              <div dir="ltr">
                <div dir="ltr">--Artem Belevich</div>
              </div>
            </blockquote>
          </div>
        </blockquote>
      </div>
      <br clear="all">
      <div><br>
      </div>
      -- <br>
      <div dir="ltr">
        <div dir="ltr">--Artem Belevich</div>
      </div>
    </blockquote>
  </div>

</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr">--Artem Belevich</div></div></div>