arguments. * Adds 'nonnull' and 'dereferenceable(N)' to 'this' pointer arguments * Gates 'nonnull' on -f(no-)delete-null-pointer-checks * Introduces this-nonnull.cpp and microsoft-abi-this-nullable.cpp tests to explicitly test the behavior of this change * Refactors hundreds of over-constrained clang tests to permit these attributes, where needed * Updates Clang12 patch notes mentioning this change Reviewed-by: rsmith, jdoerfert Differential Revision: https://reviews.llvm.org/D17993
19 lines
550 B
C++
19 lines
550 B
C++
// RUN: %clang_cc1 %s -emit-llvm -triple %itanium_abi_triple -o - | FileCheck %s
|
|
|
|
// This was a problem in Sema, but only shows up as noinline missing
|
|
// in CodeGen.
|
|
|
|
// CHECK: define linkonce_odr {{.*}}void @_ZN6VectorIiE13growStorageByEv(%struct.Vector* {{[^,]*}} %this) [[NI:#[0-9]+]]
|
|
|
|
template <class Ty> struct Vector {
|
|
void growStorageBy();
|
|
};
|
|
template <class T> __attribute__((noinline)) void Vector<T>::growStorageBy() {
|
|
}
|
|
void foo() {
|
|
Vector<int> strs;
|
|
strs.growStorageBy();
|
|
}
|
|
|
|
// CHECK: attributes [[NI]] = { noinline nounwind{{.*}} }
|