From: Richard Smith Date: Fri, 9 Dec 2016 19:35:45 +0000 (+0000) Subject: Add tests for a couple more DRs. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9100cdfedeb0bca2d294ff877e8ecb354cd67e69;p=clang Add tests for a couple more DRs. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289258 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CXX/drs/dr0xx.cpp b/test/CXX/drs/dr0xx.cpp index 82f71afd25..c988b6aba5 100644 --- a/test/CXX/drs/dr0xx.cpp +++ b/test/CXX/drs/dr0xx.cpp @@ -333,7 +333,7 @@ namespace dr27 { // dr27: yes E &m = true ? n : n; } -// dr28: na +// dr28: na lib namespace dr29 { // dr29: 3.4 void dr29_f0(); // expected-note {{here}} diff --git a/test/CXX/drs/dr118.cpp b/test/CXX/drs/dr118.cpp new file mode 100644 index 0000000000..58aa3912c8 --- /dev/null +++ b/test/CXX/drs/dr118.cpp @@ -0,0 +1,26 @@ +// RUN: %clang_cc1 -triple x86_64-linux -std=c++98 %s -pedantic-errors -emit-llvm -o - | FileCheck %s --implicit-check-not " call " +// RUN: %clang_cc1 -triple x86_64-linux -std=c++11 %s -pedantic-errors -emit-llvm -o - | FileCheck %s --implicit-check-not " call " +// RUN: %clang_cc1 -triple x86_64-linux -std=c++14 %s -pedantic-errors -emit-llvm -o - | FileCheck %s --implicit-check-not " call " +// RUN: %clang_cc1 -triple x86_64-linux -std=c++1z %s -pedantic-errors -emit-llvm -o - | FileCheck %s --implicit-check-not " call " + +// dr118: yes + +struct S { + virtual void f(); +}; +void (S::*pmf)(); + +// CHECK-LABEL: define {{.*}} @_Z1g +void g(S *sp) { + // CHECK: call void % + sp->f(); // 1: polymorphic + // CHECK: call void @ + sp->S::f(); // 2: non-polymorphic + // CHECK: call void @ + (sp->S::f)(); // 3: non-polymorphic + // CHECK: call void % + (sp->*pmf)(); // 4: polymorphic + // CHECK: call void % + (sp->*&S::f)(); // 5: polymorphic +} + diff --git a/test/CXX/drs/dr158.cpp b/test/CXX/drs/dr158.cpp new file mode 100644 index 0000000000..37b2ca42e3 --- /dev/null +++ b/test/CXX/drs/dr158.cpp @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -triple x86_64-linux -std=c++98 %s -O3 -disable-llvm-optzns -pedantic-errors -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-linux -std=c++11 %s -O3 -disable-llvm-optzns -pedantic-errors -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-linux -std=c++14 %s -O3 -disable-llvm-optzns -pedantic-errors -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-linux -std=c++1z %s -O3 -disable-llvm-optzns -pedantic-errors -emit-llvm -o - | FileCheck %s + +// dr158: yes + +// CHECK-LABEL: define {{.*}} @_Z1f +const int *f(const int * const *p, int **q) { + // CHECK: load i32**, {{.*}}, !tbaa ![[INTPTR_TBAA:[^,]*]] + const int *x = *p; + // CHECK: store i32* null, {{.*}}, !tbaa ![[INTPTR_TBAA]] + *q = 0; + return x; +} + +struct A {}; + +// CHECK-LABEL: define {{.*}} @_Z1g +const int *(A::*const *g(const int *(A::* const **p)[3], int *(A::***q)[3]))[3] { + // CHECK: load i64**, {{.*}}, !tbaa ![[MEMPTR_TBAA:[^,]*]] + const int *(A::*const *x)[3] = *p; + // CHECK: store i64* null, {{.*}}, !tbaa ![[MEMPTR_TBAA]] + *q = 0; + return x; +} + diff --git a/test/CXX/drs/dr1xx.cpp b/test/CXX/drs/dr1xx.cpp index dbd1599e21..9521f0a8b7 100644 --- a/test/CXX/drs/dr1xx.cpp +++ b/test/CXX/drs/dr1xx.cpp @@ -35,7 +35,7 @@ namespace dr102 { // dr102: yes } // dr103: na -// dr104 FIXME: add codegen test +// dr104: na lib // dr105: na namespace dr106 { // dr106: sup 540 @@ -202,7 +202,7 @@ namespace dr116 { // dr116: yes } // dr117: na -// dr118 FIXME: add codegen test +// dr118 is in its own file. // dr119: na // dr120: na @@ -608,7 +608,7 @@ namespace dr155 { // dr155: dup 632 struct S { int n; } s = { { 1 } }; // expected-warning {{braces around scalar initializer}} } -// dr158 FIXME write codegen test +// dr158 is in its own file. namespace dr159 { // dr159: 3.5 namespace X { void f(); } diff --git a/www/cxx_dr_status.html b/www/cxx_dr_status.html index 7ec85cd9e5..90c28d54c7 100644 --- a/www/cxx_dr_status.html +++ b/www/cxx_dr_status.html @@ -207,7 +207,7 @@ 28 CD1 'exit', 'signal' and static object destruction - N/A + N/A (Library DR) 29 @@ -663,7 +663,7 @@ 104 NAD Destroying the exception temp when no handler is found - Unknown + N/A (Library DR) 105 @@ -747,7 +747,7 @@ 118 CD1 Calls via pointers to virtual member functions - Unknown + Yes 119 @@ -987,7 +987,7 @@ 158 CD1 Aliasing and qualification conversions - Unknown + Yes 159 diff --git a/www/make_cxx_dr_status b/www/make_cxx_dr_status index 3f37217810..48f524208a 100755 --- a/www/make_cxx_dr_status +++ b/www/make_cxx_dr_status @@ -126,6 +126,9 @@ def availability(issue): elif status == 'na': avail = 'N/A' avail_style = ' class="na"' + elif status == 'na lib': + avail = 'N/A (Library DR)' + avail_style = ' class="na"' elif status.startswith('sup '): dup = status.split(' ', 1)[1] avail = 'Superseded by %s' % (dup, dup)