[Clang] Add __builtin_launder
authorEric Fiselier <eric@efcs.ca>
Fri, 14 Dec 2018 21:11:28 +0000 (21:11 +0000)
committerEric Fiselier <eric@efcs.ca>
Fri, 14 Dec 2018 21:11:28 +0000 (21:11 +0000)
commit261875054e5ebbc7b7ec17b0febecdb5e8507b4c
tree4305141ff96d4eadc6bfeff0fbd351766f4e8e79
parent8f06d102915d37db60792e9b2e8808a6834faea0
[Clang] Add __builtin_launder

Summary:
This patch adds `__builtin_launder`, which is required to implement `std::launder`. Additionally GCC provides `__builtin_launder`, so thing brings Clang in-line with GCC.

I'm not exactly sure what magic `__builtin_launder` requires, but  based on previous discussions this patch applies a `@llvm.invariant.group.barrier`. As noted in previous discussions, this may not be enough to correctly handle vtables.

Reviewers: rnk, majnemer, rsmith

Reviewed By: rsmith

Subscribers: kristina, Romain-Geissler-1A, erichkeane, amharc, jroelofs, cfe-commits, Prazek

Differential Revision: https://reviews.llvm.org/D40218

llvm-svn: 349195
clang/include/clang/Basic/Builtins.def
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/AST/ExprConstant.cpp
clang/lib/CodeGen/CGBuiltin.cpp
clang/lib/Sema/SemaChecking.cpp
clang/test/CodeGen/builtins.c
clang/test/CodeGenCXX/builtin-launder.cpp [new file with mode: 0644]
clang/test/Preprocessor/feature_tests.c
clang/test/Sema/builtins.c
clang/test/SemaCXX/builtins.cpp