diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-03 23:27:44 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2014-06-03 23:27:44 +0000 |
| commit | 760520bcb78d9b91b3bbf74704d9cb3ba6b5c5b6 (patch) | |
| tree | 1ff10bb9dab6817ca90dcf831870df27b85a0389 /clang/test | |
| parent | 08d84943afdce3e73c256e273d2697002303f9f7 (diff) | |
| download | bcm5719-llvm-760520bcb78d9b91b3bbf74704d9cb3ba6b5c5b6.tar.gz bcm5719-llvm-760520bcb78d9b91b3bbf74704d9cb3ba6b5c5b6.zip | |
Add __builtin_operator_new and __builtin_operator_delete, which act like calls
to the normal non-placement ::operator new and ::operator delete, but allow
optimizations like new-expressions and delete-expressions do.
llvm-svn: 210137
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGenCXX/new.cpp | 9 | ||||
| -rw-r--r-- | clang/test/Sema/builtins.c | 5 |
2 files changed, 14 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/new.cpp b/clang/test/CodeGenCXX/new.cpp index 26db84225f1..d8aa258cbbf 100644 --- a/clang/test/CodeGenCXX/new.cpp +++ b/clang/test/CodeGenCXX/new.cpp @@ -326,6 +326,15 @@ namespace N3664 { } } +namespace builtins { + // CHECK-LABEL: define void @_ZN8builtins1fEv + void f() { + // CHECK: call noalias i8* @_Znwm(i64 4) [[ATTR_BUILTIN_NEW]] + // CHECK: call void @_ZdlPv({{.*}}) [[ATTR_BUILTIN_DELETE]] + __builtin_operator_delete(__builtin_operator_new(4)); + } +} + // CHECK-DAG: attributes [[ATTR_NOBUILTIN]] = {{[{].*}} nobuiltin {{.*[}]}} // CHECK-DAG: attributes [[ATTR_NOBUILTIN_NOUNWIND]] = {{[{].*}} nobuiltin nounwind {{.*[}]}} diff --git a/clang/test/Sema/builtins.c b/clang/test/Sema/builtins.c index 8ca33c8e752..7647100bc27 100644 --- a/clang/test/Sema/builtins.c +++ b/clang/test/Sema/builtins.c @@ -197,3 +197,8 @@ void no_ms_builtins() { __noop(1); // expected-warning {{implicit declaration}} __debugbreak(); // expected-warning {{implicit declaration}} } + +void unavailable() { + __builtin_operator_new(0); // expected-error {{'__builtin_operator_new' is only available in C++}} + __builtin_operator_delete(0); // expected-error {{'__builtin_operator_delete' is only available in C++}} +} |

