mehdi_amini added inline comments.

================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:2374
+  llvm::Constant *Init = nullptr;
+  if (D && D->isConstexpr() && !D->isInline() && !D->hasAttr<DLLImportAttr>()) 
{
+    const VarDecl *InitDecl;
----------------
rsmith wrote:
> Applying this for only `constexpr` variables seems unnecessarily 
> conservative; it seems we could equally do this for any variable that is 
> `const` and has no `mutable` fields (though we'd need to check for 
> `EmitConstantInit` failing in the general case).
OK I will improve, and include a test with a struct with a mutable field.


================
Comment at: clang/test/CodeGenCXX/cxx11-extern-constexpr.cpp:1
+// RUN: %clang_cc1 -std=c++11 %s -emit-llvm -o - -triple x86_64-linux-gnu | 
FileCheck %s
+
----------------
rsmith wrote:
> Please also test what happens in C++1z mode, particularly as static constexpr 
> data members are implicitly `inline` there.
This is already covered by ```clang/test/CodeGenCXX/cxx1z-inline-variables.cpp 
``` (I actually broke this test during development because I didn't know about 
inline variable). But I can also add coverage for it here if you'd like.


================
Comment at: clang/test/CodeGenCXX/cxx11-extern-constexpr.cpp:15
+// CHECK: @_ZL4BAR3 = available_externally constant i32 44,
+static constexpr int BAR3 = 44;
+
----------------
rsmith wrote:
> mehdi_amini wrote:
> > Looks like I have a bug here, this should be an internal.
> I would imagine that we skip promotion of declaration to definition in this 
> case if we already have a definition.
> 
> To that end, please add a testcase like this:
> 
> ```
> struct Bar {
>   static constexpr int BAZ = 42;
> };
> auto *use = &Bar::BAZ;
> const int Bar::BAZ;
> ```
> 
> ... to make sure that we convert the definition of `Bar::BAZ` from 
> `available_externally` to a strong definition (I think we should end up with 
> `weak_odr` here).
`weak_odr` in C++17 because it is an inline variable, but I expect a strong 
definition in c++11.
I'll add this, this is a good test-case!


https://reviews.llvm.org/D34992



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

Reply via email to