Make general reduction available at release N.

Bug: 23535724

Change-Id: I1b00e3a392ec40e93b8e73e1d0a43fb9c947e589
(cherry picked from commit 1623659165bb24d733a40124e929cfd42aa917e3)
diff --git a/slang_rs_pragma_handler.cpp b/slang_rs_pragma_handler.cpp
index e159571..bbedc36 100644
--- a/slang_rs_pragma_handler.cpp
+++ b/slang_rs_pragma_handler.cpp
@@ -196,12 +196,13 @@
     }
 
     // Check API version.
-    if (mContext->getTargetAPI() != RS_DEVELOPMENT_API) {
+    if (mContext->getTargetAPI() < SLANG_FEATURE_GENERAL_REDUCTION_API) {
       PP.Diag(PragmaLocation,
               PP.getDiagnostics().getCustomDiagID(
                 clang::DiagnosticsEngine::Error,
-                "reduction kernels are not supported in SDK level %0"))
-          << mContext->getTargetAPI();
+                "reduction kernels are not supported in SDK levels %0-%1"))
+          << SLANG_MINIMUM_TARGET_API
+          << (SLANG_FEATURE_GENERAL_REDUCTION_API - 1);
       return;
     }
 
diff --git a/slang_version.h b/slang_version.h
index 949074a..6594bb0 100644
--- a/slang_version.h
+++ b/slang_version.h
@@ -27,6 +27,7 @@
 // ICS -> Ice Cream Sandwich
 // JB -> Jelly Bean
 // KK -> KitKat
+// M -> Marshmallow
 enum SlangTargetAPI {
   SLANG_MINIMUM_TARGET_API = 11,
   SLANG_HC_TARGET_API = 11,
@@ -45,6 +46,15 @@
 };
 // Note that RS_VERSION is defined at build time (see Android.mk for details).
 
+// API levels where particular features exist.
+// . Open (feature appears at a particular level and continues to exist):
+//     SLANG_FEAT_FOO_API
+// . Closed (feature exists only through a particular range of API levels):
+//     SLANG_FEAT_BAR_API_MIN, SLANG_FEAT_BAR_API_MAX
+enum SlangFeatureAPI {
+  SLANG_FEATURE_GENERAL_REDUCTION_API = SLANG_N_TARGET_API
+};
+
 // SlangVersion refers to the released compiler version (for which certain
 // behaviors could change - i.e. critical bugs fixed that may require
 // additional workarounds in the backend compiler).
diff --git a/tests/F_reduce_general_bad_accumulator/reduce_general_bad_accumulator.rs b/tests/F_reduce_general_bad_accumulator/reduce_general_bad_accumulator.rs
index 1f426f0..5c16ad3 100644
--- a/tests/F_reduce_general_bad_accumulator/reduce_general_bad_accumulator.rs
+++ b/tests/F_reduce_general_bad_accumulator/reduce_general_bad_accumulator.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall
+// -Wall
 #pragma version(1)
 #pragma rs java_package_name(accum)
 
diff --git a/tests/F_reduce_general_bad_function/reduce_general_bad_function.rs b/tests/F_reduce_general_bad_function/reduce_general_bad_function.rs
index 8287696..d12ace0 100644
--- a/tests/F_reduce_general_bad_function/reduce_general_bad_function.rs
+++ b/tests/F_reduce_general_bad_function/reduce_general_bad_function.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall
+// -Wall
 #pragma version(1)
 #pragma rs java_package_name(fn)
 
diff --git a/tests/F_reduce_general_bad_result/reduce_general_bad_result.rs b/tests/F_reduce_general_bad_result/reduce_general_bad_result.rs
index ab4283d..e403f6e 100644
--- a/tests/F_reduce_general_bad_result/reduce_general_bad_result.rs
+++ b/tests/F_reduce_general_bad_result/reduce_general_bad_result.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall
+// -Wall
 #pragma version(1)
 #pragma rs java_package_name(export)
 
diff --git a/tests/F_reduce_general_parse/reduce_general_parse.rs b/tests/F_reduce_general_parse/reduce_general_parse.rs
index 5566b1a..6606d83 100644
--- a/tests/F_reduce_general_parse/reduce_general_parse.rs
+++ b/tests/F_reduce_general_parse/reduce_general_parse.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall -Werror
+// -Wall -Werror
 #pragma version(1)
 #pragma rs java_package_name(all)
 
diff --git a/tests/F_reduce_general_void/reduce_general_void.rs b/tests/F_reduce_general_void/reduce_general_void.rs
index c5acced..b39fa56 100644
--- a/tests/F_reduce_general_void/reduce_general_void.rs
+++ b/tests/F_reduce_general_void/reduce_general_void.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall
+// -Wall
 #pragma version(1)
 #pragma rs java_package_name(voidptr)
 
diff --git a/tests/F_reduce_general_wrong_api/stderr.txt.expect b/tests/F_reduce_general_wrong_api/stderr.txt.expect
index bd5ff2f..b92931b 100644
--- a/tests/F_reduce_general_wrong_api/stderr.txt.expect
+++ b/tests/F_reduce_general_wrong_api/stderr.txt.expect
@@ -1 +1 @@
-reduce_general_wrong_api.rs:5:12: error: reduction kernels are not supported in SDK level 23
+reduce_general_wrong_api.rs:5:12: error: reduction kernels are not supported in SDK levels 11-23
diff --git a/tests/P_reduce_general_examples/reduce_general_examples.rs b/tests/P_reduce_general_examples/reduce_general_examples.rs
index d64ad92..83f88aa 100644
--- a/tests/P_reduce_general_examples/reduce_general_examples.rs
+++ b/tests/P_reduce_general_examples/reduce_general_examples.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall -Werror
+// -Wall -Werror
 #pragma version(1)
 #pragma rs java_package_name(examples)
 
diff --git a/tests/P_reduce_general_examples_explicit/reduce_general_examples_explicit.rs b/tests/P_reduce_general_examples_explicit/reduce_general_examples_explicit.rs
index 9abea80..bd76c8e 100644
--- a/tests/P_reduce_general_examples_explicit/reduce_general_examples_explicit.rs
+++ b/tests/P_reduce_general_examples_explicit/reduce_general_examples_explicit.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall -Werror
+// -Wall -Werror
 #pragma version(1)
 #pragma rs java_package_name(examples)
 
diff --git a/tests/P_reduce_general_input/gen-input.pl b/tests/P_reduce_general_input/gen-input.pl
index a2f6c37..4be2e83 100755
--- a/tests/P_reduce_general_input/gen-input.pl
+++ b/tests/P_reduce_general_input/gen-input.pl
@@ -18,7 +18,7 @@
 # 3 is not supported for exported types
 my @vecLengths = (1, 2, 4);
 
-print "// -target-api 0 -Wall -Werror\n";
+print "// -Wall -Werror\n";
 print "#pragma version(1)\n";
 print "#pragma rs java_package_name(input)\n\n";
 print "// This test case was created by $0.\n";
diff --git a/tests/P_reduce_general_input/reduce_general_input.rs b/tests/P_reduce_general_input/reduce_general_input.rs
index b27d298..e0fa90f 100644
--- a/tests/P_reduce_general_input/reduce_general_input.rs
+++ b/tests/P_reduce_general_input/reduce_general_input.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall -Werror
+// -Wall -Werror
 #pragma version(1)
 #pragma rs java_package_name(input)
 
diff --git a/tests/P_reduce_general_inputs/gen-inputs.pl b/tests/P_reduce_general_inputs/gen-inputs.pl
index 3146d5c..136ec27 100755
--- a/tests/P_reduce_general_inputs/gen-inputs.pl
+++ b/tests/P_reduce_general_inputs/gen-inputs.pl
@@ -29,7 +29,7 @@
   return 1;
 }
 
-print "// -target-api 0 -Wall -Werror\n";
+print "// -Wall -Werror\n";
 print "#pragma version(1)\n";
 print "#pragma rs java_package_name(inputs)\n\n";
 print "// This test case was created by $0.\n";
diff --git a/tests/P_reduce_general_inputs/reduce_general_inputs.rs b/tests/P_reduce_general_inputs/reduce_general_inputs.rs
index 079bacb..aa7aae7 100644
--- a/tests/P_reduce_general_inputs/reduce_general_inputs.rs
+++ b/tests/P_reduce_general_inputs/reduce_general_inputs.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall -Werror
+// -Wall -Werror
 #pragma version(1)
 #pragma rs java_package_name(inputs)
 
diff --git a/tests/P_reduce_general_reflect/reduce_general_reflect.rs b/tests/P_reduce_general_reflect/reduce_general_reflect.rs
index 34b792d..a7ef619 100644
--- a/tests/P_reduce_general_reflect/reduce_general_reflect.rs
+++ b/tests/P_reduce_general_reflect/reduce_general_reflect.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall -Werror
+// -Wall -Werror
 #pragma version(1)
 #pragma rs java_package_name(reflect)
 
diff --git a/tests/P_reduce_general_result/gen-result.pl b/tests/P_reduce_general_result/gen-result.pl
index a042625..66dad34 100755
--- a/tests/P_reduce_general_result/gen-result.pl
+++ b/tests/P_reduce_general_result/gen-result.pl
@@ -14,7 +14,7 @@
 # 3 is not supported for exported types
 my @vecLengths = (1, 2, 4);
 
-print "// -target-api 0 -Wall -Werror\n";
+print "// -Wall -Werror\n";
 print "#pragma version(1)\n";
 print "#pragma rs java_package_name(result)\n\n";
 print "// This test case was created by $0.\n";
diff --git a/tests/P_reduce_general_result/reduce_general_result.rs b/tests/P_reduce_general_result/reduce_general_result.rs
index 8e0ba2b..06c38bc 100644
--- a/tests/P_reduce_general_result/reduce_general_result.rs
+++ b/tests/P_reduce_general_result/reduce_general_result.rs
@@ -1,4 +1,4 @@
-// -target-api 0 -Wall -Werror
+// -Wall -Werror
 #pragma version(1)
 #pragma rs java_package_name(result)