[cfe-commits] r161236 - in /cfe/trunk:

Benjamin Kramer benny.kra at gmail.com
Fri Aug 3 08:18:01 PDT 2012


On 03.08.2012, at 16:34, David Blaikie <dblaikie at gmail.com> wrote:

> lib/AST/RecordLayoutBuilder.cpp
> 
> test/CodeGenCXX/cxx11-vtable-key-function.cpp
> MIME-Version: 1.0
> Content-Type: text/plain; charset="utf-8"
> Content-Transfer-Encoding: 7bit
> 
> Why can't the key function have a (non inline) = default definition?

It can.

> What happens if the only non inline virtual functions are = defaulted?

>From the documentation of CXXMethodDecl::isUserProvided:

> True if this method is user-declared and was not deleted or defaulted on its *first declaration*

So this should not affect out-of-line defaulted key functions, it only prevents inline defaulted functions from being promoted to a key function.

- Ben

> From: Benjamin Kramer
> Sent: 8/3/2012 1:42 AM
> To: cfe-commits at cs.uiuc.edu
> Subject: [cfe-commits] r161236 - in /cfe/trunk:
> lib/AST/RecordLayoutBuilder.cpp
> test/CodeGenCXX/cxx11-vtable-key-function.cpp
> Author: d0k
> Date: Fri Aug  3 03:39:58 2012
> New Revision: 161236
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=161236&view=rev
> Log:
> Fix failed to generate vtables in certain cases.
> 
> By C++ standard, the vtable should be generated if the first non-inline
> virtual function is defined in the TU.  Current version of clang doesn't
> generate vtable if the first virtual function is defaulted, because the
> key function is regarded as the defaulted function.
> 
> Patch by Li Kan!
> 
> Added:
>    cfe/trunk/test/CodeGenCXX/cxx11-vtable-key-function.cpp
> Modified:
>    cfe/trunk/lib/AST/RecordLayoutBuilder.cpp
> 
> Modified: cfe/trunk/lib/AST/RecordLayoutBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/RecordLayoutBuilder.cpp?rev=161236&r1=161235&r2=161236&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/RecordLayoutBuilder.cpp (original)
> +++ cfe/trunk/lib/AST/RecordLayoutBuilder.cpp Fri Aug  3 03:39:58 2012
> @@ -2351,6 +2351,9 @@
>     if (MD->hasInlineBody())
>       continue;
> 
> +    if (!MD->isUserProvided())
> +      continue;
> +
>     // We found it.
>     return MD;
>   }
> 
> Added: cfe/trunk/test/CodeGenCXX/cxx11-vtable-key-function.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/cxx11-vtable-key-function.cpp?rev=161236&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGenCXX/cxx11-vtable-key-function.cpp (added)
> +++ cfe/trunk/test/CodeGenCXX/cxx11-vtable-key-function.cpp Fri Aug  3
> 03:39:58 2012
> @@ -0,0 +1,11 @@
> +// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o -
> -std=c++11 | FileCheck %s
> +// PR13424
> +
> +struct X {
> +  virtual ~X() = default;
> +  virtual void f();
> +};
> +
> +void X::f() {}
> +
> +// CHECK: @_ZTV1X = unnamed_addr constant
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list