diff options
author | Jeffrey Yasskin <jyasskin@google.com> | 2011-01-25 20:08:12 +0000 |
---|---|---|
committer | Jeffrey Yasskin <jyasskin@google.com> | 2011-01-25 20:08:12 +0000 |
commit | c60e13aeff96515d27638129154b1308c15ded3d (patch) | |
tree | f170899d1f2267e8b075786da203ee1633ba29c0 /include | |
parent | 48a4ce7d484a448490edfe9e1d47b806cee85f30 (diff) |
Add an attribute to forbid temporary instances of a type. This allows class
authors to write
class __attribute__((forbid_temporaries)) Name { ... };
when they want to force users to name all variables of the type. This protects
people from doing things like creating a scoped_lock that only lives for a
single statement instead of an entire scope.
The warning produced by this attribute can be disabled by
-Wno-forbid-temporaries.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124217 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/clang/Basic/Attr.td | 5 | ||||
-rw-r--r-- | include/clang/Basic/DiagnosticSemaKinds.td | 3 | ||||
-rw-r--r-- | include/clang/Sema/AttributeList.h | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 9b0982a29b..010736112d 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -232,6 +232,11 @@ def Final : InheritableAttr { let Spellings = []; } +def ForbidTemporaries : Attr { + let Spellings = ["forbid_temporaries"]; + let Subjects = [CXXRecord]; +} + def Format : InheritableAttr { let Spellings = ["format"]; let Args = [StringArgument<"Type">, IntArgument<"FormatIdx">, diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index b18294eb3f..f33285c7d4 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -856,6 +856,9 @@ def err_temp_copy_deleted : Error< "of type %1 invokes deleted constructor">; def err_temp_copy_incomplete : Error< "copying a temporary object of incomplete type %0">; +def warn_temporaries_forbidden : Warning< + "must not create temporaries of type %0">, + InGroup<DiagGroup<"forbid-temporaries">>; // C++0x decltype def err_cannot_determine_declared_type_of_overloaded_function : Error< diff --git a/include/clang/Sema/AttributeList.h b/include/clang/Sema/AttributeList.h index 91389a4d98..7ed6ffcdaf 100644 --- a/include/clang/Sema/AttributeList.h +++ b/include/clang/Sema/AttributeList.h @@ -104,6 +104,7 @@ public: AT_dllimport, AT_ext_vector_type, AT_fastcall, + AT_forbid_temporaries, AT_format, AT_format_arg, AT_global, |