tra added a reviewer: rsmith.
tra added a subscriber: rsmith.
tra added a comment.

Tentative LGTM as we need it to fix the regression soon.

Summoning @rsmith for the 'big picture' opinion. 
While the patch may fix this particular regression, I wonder if there's a 
better way to deal with this. We're growing a bit too many nuances that would 
be hard to explain and may cause more corner cases to appear.



================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:2386
+      };
+      if (!HasImplicitConstantAttr(V))
+        DeferredDeclsToEmit.push_back(V);
----------------
IIUIC, The idea here is that we do not want to emit `constexpr int foo;` on 
device, even if we happen to ODR-use it there.
And the way we detect this is by checking for implicit `__constant__` we happen 
to add to constexpr variables.

I think this may be relying on the implementation details too much. It also 
makes compiler's behavior somewhat surprising -- we would potentially emit 
other variables that do not get any device attributes attribute, but would not 
emit the variables with implicit `__constant__`, which is a device attribute.

I'm not sure if we have any good options here. This may be an acceptable 
compromise, but I wonder if there's a better way to deal with this.

That said, this patch is OK to fix the regression we have now, but we may need 
to revisit this.



================
Comment at: clang/test/CodeGenCUDA/host-used-device-var.cu:103-131
+// Check implicit constant variable ODR-used by host code is not emitted.
+// DEV-NEG-NOT: _ZN16TestConstexprVar1oE
+namespace TestConstexprVar {
+char o;
+class ou {
+public:
+  ou(char) { __builtin_strlen(&o); }
----------------
This definitely needs some comments. Otherwise this is nearly incomprehensible 
and it's impossible to tell what's going on.


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

https://reviews.llvm.org/D102801

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

Reply via email to