[flang] Added the machinery for REAL DO controls to be treated as a separate
authorPeter Steinfeld <psteinfeld@nvidia.com>
Wed, 5 Jun 2019 21:34:25 +0000 (14:34 -0700)
committerPeter Steinfeld <psteinfeld@nvidia.com>
Mon, 10 Jun 2019 20:31:31 +0000 (13:31 -0700)
extension.

Original-commit: flang-compiler/f18@1907cf867277df34925bfab53f2060c303774ce3
Reviewed-on: https://github.com/flang-compiler/f18/pull/478
Tree-same-pre-rewrite: false

flang/lib/parser/features.h
flang/lib/semantics/check-do-stmt.cc

index 520faf5..44b358f 100644 (file)
@@ -30,7 +30,8 @@ ENUM_CLASS(LanguageFeature, BackslashEscapes, OldDebugLines,
     Convert, Dispose, IOListLeadingComma, AbbreviatedEditDescriptor,
     ProgramParentheses, PercentRefAndVal, OmitFunctionDummies, CrayPointer,
     Hollerith, ArithmeticIF, Assign, AssignedGOTO, Pause, OpenMP,
-    CruftAfterAmpersand, ClassicCComments, AdditionalFormats, BigIntLiterals)
+    CruftAfterAmpersand, ClassicCComments, AdditionalFormats, BigIntLiterals,
+    RealDoControls)
 
 using LanguageFeatures =
     common::EnumSet<LanguageFeature, LanguageFeature_enumSize>;
index d1111e7..dbd59d6 100644 (file)
@@ -398,10 +398,12 @@ private:
   }
 
   void CheckDoControl(parser::CharBlock sourceLocation, bool isReal) {
-    if ((isReal) && (!context_.warnOnNonstandardUsage())) {
+    bool warn = context_.warnOnNonstandardUsage() ||
+        context_.ShouldWarn(parser::LanguageFeature::RealDoControls);
+    bool enabled = context_.IsEnabled(parser::LanguageFeature::RealDoControls);
+    if (isReal && enabled && !(warn)) {
       // No messages for the default case
-    } else if (isReal && context_.warnOnNonstandardUsage() &&
-        (!context_.warningsAreErrors())) {
+    } else if (isReal && enabled && warn && !context_.warningsAreErrors()) {
       context_.Say(sourceLocation, "DO controls should be INTEGER"_en_US);
     } else {
       context_.Say(sourceLocation, "DO controls should be INTEGER"_err_en_US);