@@ -41,20 +41,33 @@ ENUM_CLASS(LanguageFeature, BackslashEscapes, OldDebugLines,
41
41
ActualIntegerConvertedToSmallerKind, HollerithOrCharacterAsBOZ,
42
42
BindingAsProcedure, StatementFunctionExtensions,
43
43
UseGenericIntrinsicWhenSpecificDoesntMatch, DataStmtExtensions,
44
- RedundantContiguous, InitBlankCommon, EmptyBindCDerivedType,
45
- MiscSourceExtensions, AllocateToOtherLength, LongNames, IntrinsicAsSpecific,
46
- BenignNameClash, BenignRedundancy, NullMoldAllocatableComponentValue,
47
- NopassScalarBase, MiscUseExtensions, ImpliedDoIndexScope,
48
- DistinctCommonSizes, OddIndexVariableRestrictions,
49
- IndistinguishableSpecifics)
44
+ RedundantContiguous, RedundantAttribute, InitBlankCommon,
45
+ EmptyBindCDerivedType, MiscSourceExtensions, AllocateToOtherLength,
46
+ LongNames, IntrinsicAsSpecific, BenignNameClash, BenignRedundancy,
47
+ NullMoldAllocatableComponentValue, NopassScalarBase, MiscUseExtensions,
48
+ ImpliedDoIndexScope, DistinctCommonSizes, OddIndexVariableRestrictions,
49
+ IndistinguishableSpecifics, SubroutineAndFunctionSpecifics,
50
+ EmptySequenceType, NonSequenceCrayPointee, BranchIntoConstruct,
51
+ BadBranchTarget, ConvertedArgument, HollerithPolymorphic, ListDirectedSize)
50
52
51
- // Portability and suspicious usage warnings for conforming code
53
+ // Portability and suspicious usage warnings
52
54
ENUM_CLASS (UsageWarning, Portability, PointerToUndefinable,
53
55
NonTargetPassedToTarget, PointerToPossibleNoncontiguous,
54
- ShortCharacterActual, ExprPassedToVolatile, ImplicitInterfaceActual,
55
- PolymorphicTransferArg, PointerComponentTransferArg, TransferSizePresence,
56
- F202XAllocatableBreakingChange, DimMustBePresent, CommonBlockPadding,
57
- LogicalVsCBool, BindCCharLength, ProcDummyArgShapes, ExternalNameConflict)
56
+ ShortCharacterActual, ShortArrayActual, ExprPassedToVolatile,
57
+ ImplicitInterfaceActual, PolymorphicTransferArg,
58
+ PointerComponentTransferArg, TransferSizePresence,
59
+ F202XAllocatableBreakingChange, OptionalMustBePresent, CommonBlockPadding,
60
+ LogicalVsCBool, BindCCharLength, ProcDummyArgShapes, ExternalNameConflict,
61
+ FoldingException, FoldingAvoidsRuntimeCrash, FoldingValueChecks,
62
+ FoldingFailure, FoldingLimit, Interoperability, Bounds, Preprocessing,
63
+ Scanning, OpenAccUsage, ProcPointerCompatibility, VoidMold,
64
+ KnownBadImplicitInterface, EmptyCase, CaseOverflow, CUDAUsage,
65
+ IgnoreTKRUsage, ExternalInterfaceMismatch, DefinedOperatorArgs, Final,
66
+ ZeroDoStep, UnusedForallIndex, OpenMPUsage, ModuleFile, DataLength,
67
+ IgnoredDirective, HomonymousSpecific, HomonymousResult,
68
+ IgnoredIntrinsicFunctionType, PreviousScalarUse,
69
+ RedeclaredInaccessibleComponent, ImplicitShared, IndexVarRedefinition,
70
+ IncompatibleImplicitInterfaces, BadTypeForTarget)
58
71
59
72
using LanguageFeatures = EnumSet<LanguageFeature, LanguageFeature_enumSize>;
60
73
using UsageWarnings = EnumSet<UsageWarning, UsageWarning_enumSize>;
@@ -77,8 +90,57 @@ class LanguageFeatureControl {
77
90
disable_.set (LanguageFeature::LogicalAbbreviations);
78
91
disable_.set (LanguageFeature::XOROperator);
79
92
disable_.set (LanguageFeature::OldStyleParameter);
93
+ // These warnings are enabled by default, but only because they used
94
+ // to be unconditional. TODO: prune this list
95
+ warnLanguage_.set (LanguageFeature::ExponentMatchingKindParam);
96
+ warnLanguage_.set (LanguageFeature::RedundantAttribute);
97
+ warnLanguage_.set (LanguageFeature::SubroutineAndFunctionSpecifics);
98
+ warnLanguage_.set (LanguageFeature::EmptySequenceType);
99
+ warnLanguage_.set (LanguageFeature::NonSequenceCrayPointee);
100
+ warnLanguage_.set (LanguageFeature::BranchIntoConstruct);
101
+ warnLanguage_.set (LanguageFeature::BadBranchTarget);
102
+ warnLanguage_.set (LanguageFeature::ConvertedArgument);
103
+ warnLanguage_.set (LanguageFeature::HollerithPolymorphic);
104
+ warnLanguage_.set (LanguageFeature::ListDirectedSize);
105
+ warnUsage_.set (UsageWarning::ShortArrayActual);
106
+ warnUsage_.set (UsageWarning::FoldingException);
107
+ warnUsage_.set (UsageWarning::FoldingAvoidsRuntimeCrash);
108
+ warnUsage_.set (UsageWarning::FoldingValueChecks);
109
+ warnUsage_.set (UsageWarning::FoldingFailure);
110
+ warnUsage_.set (UsageWarning::FoldingLimit);
111
+ warnUsage_.set (UsageWarning::Interoperability);
112
+ warnUsage_.set (UsageWarning::Bounds);
113
+ warnUsage_.set (UsageWarning::Preprocessing);
114
+ warnUsage_.set (UsageWarning::Scanning);
115
+ warnUsage_.set (UsageWarning::OpenAccUsage);
116
+ warnUsage_.set (UsageWarning::ProcPointerCompatibility);
117
+ warnUsage_.set (UsageWarning::VoidMold);
118
+ warnUsage_.set (UsageWarning::KnownBadImplicitInterface);
119
+ warnUsage_.set (UsageWarning::EmptyCase);
120
+ warnUsage_.set (UsageWarning::CaseOverflow);
121
+ warnUsage_.set (UsageWarning::CUDAUsage);
122
+ warnUsage_.set (UsageWarning::IgnoreTKRUsage);
123
+ warnUsage_.set (UsageWarning::ExternalInterfaceMismatch);
124
+ warnUsage_.set (UsageWarning::DefinedOperatorArgs);
125
+ warnUsage_.set (UsageWarning::Final);
126
+ warnUsage_.set (UsageWarning::ZeroDoStep);
127
+ warnUsage_.set (UsageWarning::UnusedForallIndex);
128
+ warnUsage_.set (UsageWarning::OpenMPUsage);
129
+ warnUsage_.set (UsageWarning::ModuleFile);
130
+ warnUsage_.set (UsageWarning::DataLength);
131
+ warnUsage_.set (UsageWarning::IgnoredDirective);
132
+ warnUsage_.set (UsageWarning::HomonymousSpecific);
133
+ warnUsage_.set (UsageWarning::HomonymousResult);
134
+ warnUsage_.set (UsageWarning::IgnoredIntrinsicFunctionType);
135
+ warnUsage_.set (UsageWarning::PreviousScalarUse);
136
+ warnUsage_.set (UsageWarning::RedeclaredInaccessibleComponent);
137
+ warnUsage_.set (UsageWarning::ImplicitShared);
138
+ warnUsage_.set (UsageWarning::IndexVarRedefinition);
139
+ warnUsage_.set (UsageWarning::IncompatibleImplicitInterfaces);
140
+ warnUsage_.set (UsageWarning::BadTypeForTarget);
80
141
}
81
142
LanguageFeatureControl (const LanguageFeatureControl &) = default ;
143
+
82
144
void Enable (LanguageFeature f, bool yes = true ) { disable_.set (f, !yes); }
83
145
void EnableWarning (LanguageFeature f, bool yes = true ) {
84
146
warnLanguage_.set (f, yes);
@@ -88,10 +150,19 @@ class LanguageFeatureControl {
88
150
}
89
151
void WarnOnAllNonstandard (bool yes = true ) { warnAllLanguage_ = yes; }
90
152
void WarnOnAllUsage (bool yes = true ) { warnAllUsage_ = yes; }
153
+ void DisableAllNonstandardWarnings () {
154
+ warnAllLanguage_ = false ;
155
+ warnLanguage_.clear ();
156
+ }
157
+ void DisableAllUsageWarnings () {
158
+ warnAllUsage_ = false ;
159
+ warnUsage_.clear ();
160
+ }
161
+
91
162
bool IsEnabled (LanguageFeature f) const { return !disable_.test (f); }
92
163
bool ShouldWarn (LanguageFeature f) const {
93
164
return (warnAllLanguage_ && f != LanguageFeature::OpenMP &&
94
- f != LanguageFeature::OpenACC) ||
165
+ f != LanguageFeature::OpenACC && f != LanguageFeature::CUDA ) ||
95
166
warnLanguage_.test (f);
96
167
}
97
168
bool ShouldWarn (UsageWarning w) const {
0 commit comments