[clang] [clang] Warn about deprecated volatile-qualified return types (PR #137899)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 29 16:48:12 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: None (halbi2)
<details>
<summary>Changes</summary>
Fixes #<!-- -->133380
---
Full diff: https://github.com/llvm/llvm-project/pull/137899.diff
3 Files Affected:
- (modified) clang/lib/Sema/SemaType.cpp (+5-5)
- (modified) clang/test/CXX/expr/expr.const/p2-0x.cpp (+1-1)
- (modified) clang/test/SemaCXX/deprecated.cpp (+7)
``````````diff
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 6e7ee8b5506ff..31bdc97d014d6 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -5056,13 +5056,13 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state,
S.Diag(DeclType.Loc, diag::err_func_returning_qualified_void) << T;
} else
diagnoseRedundantReturnTypeQualifiers(S, T, D, chunkIndex);
-
- // C++2a [dcl.fct]p12:
- // A volatile-qualified return type is deprecated
- if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20)
- S.Diag(DeclType.Loc, diag::warn_deprecated_volatile_return) << T;
}
+ // C++2a [dcl.fct]p12:
+ // A volatile-qualified return type is deprecated
+ if (T.isVolatileQualified() && S.getLangOpts().CPlusPlus20)
+ S.Diag(DeclType.Loc, diag::warn_deprecated_volatile_return) << T;
+
// Objective-C ARC ownership qualifiers are ignored on the function
// return type (by type canonicalization). Complain if this attribute
// was written here.
diff --git a/clang/test/CXX/expr/expr.const/p2-0x.cpp b/clang/test/CXX/expr/expr.const/p2-0x.cpp
index df5ce108aca82..c6c3381be5523 100644
--- a/clang/test/CXX/expr/expr.const/p2-0x.cpp
+++ b/clang/test/CXX/expr/expr.const/p2-0x.cpp
@@ -356,7 +356,7 @@ namespace LValueToRValue {
// - a non-volatile glvalue of literal type that refers to a non-volatile
// temporary object whose lifetime has not ended, initialized with a
// constant expression;
- constexpr volatile S f() { return S(); }
+ constexpr volatile S f() { return S(); } // cxx20-warning {{volatile-qualified return type 'volatile S' is deprecated}}
static_assert(f().i, ""); // expected-error {{constant expression}} expected-note {{read of volatile-qualified type}}
static_assert(((volatile const S&&)(S)0).i, ""); // expected-error {{constant expression}} expected-note {{read of volatile-qualified type}}
}
diff --git a/clang/test/SemaCXX/deprecated.cpp b/clang/test/SemaCXX/deprecated.cpp
index a24b40d8e622a..061fa8b54dff1 100644
--- a/clang/test/SemaCXX/deprecated.cpp
+++ b/clang/test/SemaCXX/deprecated.cpp
@@ -231,6 +231,13 @@ namespace DeprecatedVolatile {
a = c = a;
b += a;
}
+
+ volatile struct amber jurassic();
+ // cxx20-warning at -1 {{volatile-qualified return type 'volatile struct amber' is deprecated}}
+ void trex(volatile short left_arm, volatile struct amber right_arm);
+ // cxx20-warning at -1 {{volatile-qualified parameter type 'volatile short' is deprecated}}
+ // cxx20-warning at -1 {{volatile-qualified parameter type 'volatile struct amber' is deprecated}}
+ void fly(volatile struct pterosaur* pteranodon);
}
namespace ArithConv {
``````````
</details>
https://github.com/llvm/llvm-project/pull/137899
More information about the cfe-commits
mailing list