[PATCH] D85102: [clang] improve diagnostics for misaligned and large atomics
Thorsten via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Aug 2 16:09:18 PDT 2020
tschuett updated this revision to Diff 282483.
tschuett added a comment.
Replaced (...) by ;
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D85102/new/
https://reviews.llvm.org/D85102
Files:
clang/include/clang/Basic/DiagnosticFrontendKinds.td
clang/include/clang/Basic/DiagnosticGroups.td
clang/lib/CodeGen/CGAtomic.cpp
Index: clang/lib/CodeGen/CGAtomic.cpp
===================================================================
--- clang/lib/CodeGen/CGAtomic.cpp
+++ clang/lib/CodeGen/CGAtomic.cpp
@@ -807,10 +807,20 @@
bool Oversized = getContext().toBits(sizeChars) > MaxInlineWidthInBits;
bool Misaligned = (Ptr.getAlignment() % sizeChars) != 0;
bool UseLibcall = Misaligned | Oversized;
+ CharUnits MaxInlineWidth =
+ getContext().toCharUnitsFromBits(MaxInlineWidthInBits);
- if (UseLibcall) {
- CGM.getDiags().Report(E->getBeginLoc(), diag::warn_atomic_op_misaligned)
- << !Oversized;
+ DiagnosticsEngine &Diags = CGM.getDiags();
+
+ if (Misaligned) {
+ Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_misaligned)
+ << (int)sizeChars.getQuantity()
+ << (int)Ptr.getAlignment().getQuantity();
+ }
+
+ if (Oversized) {
+ Diags.Report(E->getBeginLoc(), diag::warn_atomic_op_oversized)
+ << (int)sizeChars.getQuantity() << (int)MaxInlineWidth.getQuantity();
}
llvm::Value *Order = EmitScalarExpr(E->getOrder());
Index: clang/include/clang/Basic/DiagnosticGroups.td
===================================================================
--- clang/include/clang/Basic/DiagnosticGroups.td
+++ clang/include/clang/Basic/DiagnosticGroups.td
@@ -699,6 +699,7 @@
def Reorder : DiagGroup<"reorder", [ReorderCtor, ReorderInitList]>;
def UndeclaredSelector : DiagGroup<"undeclared-selector">;
def ImplicitAtomic : DiagGroup<"implicit-atomic-properties">;
+def AtomicAlignment : DiagGroup<"atomic-alignment">;
def CustomAtomic : DiagGroup<"custom-atomic-properties">;
def AtomicProperties : DiagGroup<"atomic-properties",
[ImplicitAtomic, CustomAtomic]>;
Index: clang/include/clang/Basic/DiagnosticFrontendKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticFrontendKinds.td
+++ clang/include/clang/Basic/DiagnosticFrontendKinds.td
@@ -270,8 +270,16 @@
"ifunc resolver function must return a pointer">;
def warn_atomic_op_misaligned : Warning<
- "%select{large|misaligned}0 atomic operation may incur "
- "significant performance penalty">, InGroup<DiagGroup<"atomic-alignment">>;
+ "misaligned atomic operation may incur "
+ "significant performance penalty"
+ "; the expected (%0 bytes) exceeds the actual alignment (%1 bytes)">,
+ InGroup<AtomicAlignment>;
+
+def warn_atomic_op_oversized : Warning<
+ "large atomic operation may incur "
+ "significant performance penalty"
+ "; the access size (%0 bytes) exceeds the max lock-free size (%1 bytes)">,
+InGroup<AtomicAlignment>;
def warn_alias_with_section : Warning<
"%select{alias|ifunc}1 will not be in section '%0' but in the same section "
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85102.282483.patch
Type: text/x-patch
Size: 2759 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200802/372031f9/attachment.bin>
More information about the cfe-commits
mailing list