rnk added inline comments.

================
Comment at: test/CodeGenCXX/dllimport-rtti.cpp:7
@@ -6,3 +6,1 @@
 } s;
-// MSVC: [[VF_S:.*]] = private unnamed_addr constant [2 x i8*]
-// MSVC-DAG: @"\01??_SS@@6B@" = unnamed_addr alias i8*, getelementptr inbounds 
([2 x i8*], [2 x i8*]* [[VF_S]], i32 0, i32 1)
----------------
DmitryPolukhin wrote:
> rnk wrote:
> > I would've expected this to remain the same, since the implicit default 
> > ctor of 'S' is constexpr by default in C++14. It seems a lot better to emit 
> > a local vftable here and get static initialization for 's' than dynamic 
> > initialization.
> The context of evaluation of the whole expression is not constexpr so this 
> case can be done both ways. But implemented approach is how MSVC behaves in 
> this case. MSVC has very predictable behavior when local vftable is used - 
> only when class has virtual d-tor. Current Clang behavior is also very 
> consistent - always use local vftable. But this patch makes it hard to 
> predict which table will be used - it becomes use context sensitive instead 
> of depending only on class declaration. Therefore different translation units 
> could use different tables and it could cause strange artifacts. Using 
> dllimported classes in pure constexpr case in my experience is very rare case 
> so it was kind of fine but implicit constructors much more common case.
> 
> Also thinking more about my patch I realized that fix in MayBeEmittedEagerly 
> doesn't work if dllimported class is a member of non-imported class so actual 
> fix would require traversing for all base classes and members for the type.
> 
> So my proposal is to keep things as is for now and abandon this patch if you 
> have no objection.
Sounds good, we also thought this was a reasonable compromise position last 
time we touched this.


https://reviews.llvm.org/D22034



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

Reply via email to