===================================================================
@@ -1,3 +1,15 @@
+2011-09-01 Gary Funck <gary@intrepid.com>
+
+ * opts.c (print_specific_help): Fix off-by-one compare in
+ assertion check.
+ * opts.h (CL_PARAMS, CL_WARNING, CL_OPTIMIZATION, CL_DRIVER,
+ CL_TARGET, CL_COMMON, CL_JOINED, CL_SEPARATE, CL_UNDOCUMENTED):
+ Increase by +5 to allow for more languages.
+ * Makefile.in (options.c): Extract max. number of languages value
+ from opts.h, and pass to optc-gen.awk script.
+ * optc-gen.awk: Use max_lang value and issue error if number of
+ languages exceeds implementation-defined limit.
+
2011-08-31 Richard Sandiford <rdsandiford@googlemail.com>
* config/i386/i386.md: Use (match_test ...) for attribute tests.
===================================================================
@@ -1125,7 +1125,7 @@ print_specific_help (unsigned int includ
/* Sanity check: Make sure that we do not have more
languages than we have bits available to enumerate them. */
- gcc_assert ((1U << cl_lang_count) < CL_MIN_OPTION_CLASS);
+ gcc_assert ((1U << cl_lang_count) <= CL_MIN_OPTION_CLASS);
/* If we have not done so already, obtain
the desired maximum width of the output. */
===================================================================
@@ -127,12 +127,12 @@ extern const unsigned int cl_options_cou
extern const char *const lang_names[];
extern const unsigned int cl_lang_count;
-#define CL_PARAMS (1U << 11) /* Fake entry. Used to display --param info with --help. */
-#define CL_WARNING (1U << 12) /* Enables an (optional) warning message. */
-#define CL_OPTIMIZATION (1U << 13) /* Enables an (optional) optimization. */
-#define CL_DRIVER (1U << 14) /* Driver option. */
-#define CL_TARGET (1U << 15) /* Target-specific option. */
-#define CL_COMMON (1U << 16) /* Language-independent. */
+#define CL_PARAMS (1U << 16) /* Fake entry. Used to display --param info with --help. */
+#define CL_WARNING (1U << 17) /* Enables an (optional) warning message. */
+#define CL_OPTIMIZATION (1U << 18) /* Enables an (optional) optimization. */
+#define CL_DRIVER (1U << 19) /* Driver option. */
+#define CL_TARGET (1U << 20) /* Target-specific option. */
+#define CL_COMMON (1U << 21) /* Language-independent. */
#define CL_MIN_OPTION_CLASS CL_PARAMS
#define CL_MAX_OPTION_CLASS CL_COMMON
@@ -142,9 +142,9 @@ extern const unsigned int cl_lang_count;
This distinction is important because --help will not list options
which only have these higher bits set. */
-#define CL_JOINED (1U << 17) /* If takes joined argument. */
-#define CL_SEPARATE (1U << 18) /* If takes a separate argument. */
-#define CL_UNDOCUMENTED (1U << 19) /* Do not output with --help. */
+#define CL_JOINED (1U << 22) /* If takes joined argument. */
+#define CL_SEPARATE (1U << 23) /* If takes a separate argument. */
+#define CL_UNDOCUMENTED (1U << 24) /* Do not output with --help. */
/* Flags for an enumerated option argument. */
#define CL_ENUM_CANONICAL (1 << 0) /* Canonical for this value. */
===================================================================
@@ -30,6 +30,15 @@
# Dump that array of options into a C file.
END {
+# MAX_LANG is the maximum number of languages that can be defined.
+# Its value is extracted from the value of CL_PARAMS in opts.h
+# and is passed on the command line as '-v max_lang=...'.
+if (n_langs > max_lang) {
+ print "Error: the number of defined languages (" n_langs ") " \
+ "exceeds the maximum supported by this implementation " \
+ "(" max_lang ")" > "/dev/stderr"
+ exit 2
+}
print "/* This file is auto-generated by optc-gen.awk. */"
print ""
n_headers = split(header_name, headers, " ")
===================================================================
@@ -2216,10 +2216,18 @@ s-options: $(ALL_OPT_FILES) Makefile $(s
$(STAMP) s-options
options.c: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
- $(srcdir)/optc-gen.awk
+ $(srcdir)/optc-gen.awk $(srcdir)/opts.h
+ max_lang=`$(AWK) '/^#define +CL_PARAMS +\(1U +<< +[0-9]+\)/ \
+ {x=$$5; sub(")","",x); print +x; exit}' $(srcdir)/opts.h`; \
+ if test -z "$${max_lang}"; then \
+ echo "Could not find a valid CL_PARAMS definition in $(srcdir)/opts.h"; \
+ exit 2; \
+ fi; \
$(AWK) -f $(srcdir)/opt-functions.awk -f $(srcdir)/opt-read.awk \
-f $(srcdir)/optc-gen.awk \
- -v header_name="config.h system.h coretypes.h tm.h" < $< > $@
+ -v max_lang="$$max_lang" \
+ -v header_name="config.h system.h coretypes.h tm.h" < $< > $@.tmp
+ mv $@.tmp $@
options-save.c: optionlist $(srcdir)/opt-functions.awk $(srcdir)/opt-read.awk \
$(srcdir)/optc-save-gen.awk