ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:120300] [Ruby master Bug#20964] Oracle Developer Studio 12.5 on Solaris failed to compile "prism/extension.c", line 499: internal compiler error: Wasted space
@ 2024-12-18 17:27 ngoto (Naohisa Goto) via ruby-core
  2024-12-18 17:35 ` [ruby-core:120302] " ngoto (Naohisa Goto) via ruby-core
  0 siblings, 1 reply; 2+ messages in thread
From: ngoto (Naohisa Goto) via ruby-core @ 2024-12-18 17:27 UTC (permalink / raw)
  To: ruby-core; +Cc: ngoto (Naohisa Goto)

Issue #20964 has been reported by ngoto (Naohisa Goto).

----------------------------------------
Bug #20964: Oracle Developer Studio 12.5 on Solaris failed to compile "prism/extension.c", line 499: internal compiler error: Wasted space
https://bugs.ruby-lang.org/issues/20964

* Author: ngoto (Naohisa Goto)
* Status: Open
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Oracle Developer Studio 12.5 and 12.6 on Solaris 10 failed to compile prism/extension.c with the following error:

```
cc  -errtags=yes -xO4 -xtarget=sparc64xplus -m64 -xatomic=gcc   -g -erroff=E_STATEMENT_NOT_REACHED -erroff=E_INIT_SIGN_EXTEND -erroff=E_INIT_DOES_NOT_FIT -erroff=E_INITIALIZATION_TYPE_MISMATCH   -DRUBY_EXPORT -I. -I.ext/include/sparc64-solaris2.10 -I../ruby.devel/include -I../ruby.devel -I../ruby.devel/prism -I../ruby.devel/enc/unicode/15.0.0   -D_XOPEN_SOURCE=600  -I/usr/local/64/lib/libffi-3.0.10/include -I/usr/local/64/include  -o prism/extension.o -c ../ruby.devel/prism/extension.c
"../ruby.devel/prism/extension.c", line 499: internal compiler error: Wasted space
cc: acomp failed for ../ruby.devel/prism/extension.c
make: *** [prism/extension.o] Error 2
```

The line 499 in prism/extension.c is located at the end of parser_errors() function.

It seems that the error message `internal compiler error: Wasted space` strongly suggests the compiler's bug.

Changing optimization level did not solve the error.

After some trial and error, I found that the following patch dismisses the error.

```
--- a/prism/extension.c
+++ b/prism/extension.c
@@ -464,11 +464,11 @@ parser_errors(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
     pm_diagnostic_t *error;
 
     for (error = (pm_diagnostic_t *) parser->error_list.head; error != NULL; error = (pm_diagnostic_t *) error->node.next) {
-        VALUE location_argv[] = {
-            source,
-            LONG2FIX(error->location.start - parser->start),
-            LONG2FIX(error->location.end - error->location.start)
-        };
+        VALUE location_argv[3];
+
+        location_argv[0] = source;
+        location_argv[1] = LONG2FIX(error->location.start - parser->start);
+        location_argv[2] = LONG2FIX(error->location.end - error->location.start);
 
         VALUE level = Qnil;
         switch (error->level) {
@@ -485,12 +485,12 @@ parser_errors(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
                 rb_raise(rb_eRuntimeError, "Unknown level: %" PRIu8, error->level);
         }
 
-        VALUE error_argv[] = {
-            ID2SYM(rb_intern(pm_diagnostic_id_human(error->diag_id))),
-            rb_enc_str_new_cstr(error->message, encoding),
-            rb_class_new_instance(3, location_argv, rb_cPrismLocation),
-            level
-        };
+        VALUE error_argv[4];
+
+        error_argv[0] = ID2SYM(rb_intern(pm_diagnostic_id_human(error->diag_id)));
+        error_argv[1] = rb_enc_str_new_cstr(error->message, encoding);
+        error_argv[2] = rb_class_new_instance(3, location_argv, rb_cPrismLocation);
+        error_argv[3] = level;
 
         rb_ary_push(errors, rb_class_new_instance(4, error_argv, rb_cPrismParseError));
     }
@@ -507,11 +507,11 @@ parser_warnings(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
     pm_diagnostic_t *warning;
 
     for (warning = (pm_diagnostic_t *) parser->warning_list.head; warning != NULL; warning = (pm_diagnostic_t *) warning->node.next) {
-        VALUE location_argv[] = {
-            source,
-            LONG2FIX(warning->location.start - parser->start),
-            LONG2FIX(warning->location.end - warning->location.start)
-        };
+        VALUE location_argv[3];
+
+        location_argv[0] = source;
+        location_argv[1] = LONG2FIX(warning->location.start - parser->start);
+        location_argv[2] = LONG2FIX(warning->location.end - warning->location.start);
 
         VALUE level = Qnil;
         switch (warning->level) {
@@ -525,12 +525,12 @@ parser_warnings(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
                 rb_raise(rb_eRuntimeError, "Unknown level: %" PRIu8, warning->level);
         }
 
-        VALUE warning_argv[] = {
-            ID2SYM(rb_intern(pm_diagnostic_id_human(warning->diag_id))),
-            rb_enc_str_new_cstr(warning->message, encoding),
-            rb_class_new_instance(3, location_argv, rb_cPrismLocation),
-            level
-        };
+        VALUE warning_argv[4];
+
+        warning_argv[0] = ID2SYM(rb_intern(pm_diagnostic_id_human(warning->diag_id)));
+        warning_argv[1] = rb_enc_str_new_cstr(warning->message, encoding);
+        warning_argv[2] = rb_class_new_instance(3, location_argv, rb_cPrismLocation);
+        warning_argv[3] = level;
 
         rb_ary_push(warnings, rb_class_new_instance(4, warning_argv, rb_cPrismParseWarning));
     }
```

However, I don't like to add the patch because this change significantly decreases maintainability of code.
I also think that the compiler's bug should be fixed in the compiler side and such dirty workaround should not be included.

P.S.
GCC 7.5.0 on Solaris 10 can compile the original code (without the workaround patch) with no errors.
Therefore, it seems that this is not Solaris OS problem but the problem of Oracle Developer Studio 12.5/12.6 compiler.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [ruby-core:120302] [Ruby master Bug#20964] Oracle Developer Studio 12.5 on Solaris failed to compile "prism/extension.c", line 499: internal compiler error: Wasted space
  2024-12-18 17:27 [ruby-core:120300] [Ruby master Bug#20964] Oracle Developer Studio 12.5 on Solaris failed to compile "prism/extension.c", line 499: internal compiler error: Wasted space ngoto (Naohisa Goto) via ruby-core
@ 2024-12-18 17:35 ` ngoto (Naohisa Goto) via ruby-core
  0 siblings, 0 replies; 2+ messages in thread
From: ngoto (Naohisa Goto) via ruby-core @ 2024-12-18 17:35 UTC (permalink / raw)
  To: ruby-core; +Cc: ngoto (Naohisa Goto)

Issue #20964 has been updated by ngoto (Naohisa Goto).

Status changed from Open to Third Party's Issue

Changed to Third Party's Issue

I'm hoping someone who have support contract of Oracle Developer Studio will contact Oracle support to solve this compile error.

----------------------------------------
Bug #20964: Oracle Developer Studio 12.5 on Solaris failed to compile "prism/extension.c", line 499: internal compiler error: Wasted space
https://bugs.ruby-lang.org/issues/20964#change-111068

* Author: ngoto (Naohisa Goto)
* Status: Third Party's Issue
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Oracle Developer Studio 12.5 and 12.6 on Solaris 10 failed to compile prism/extension.c with the following error:

```
cc  -errtags=yes -xO4 -xtarget=sparc64xplus -m64 -xatomic=gcc   -g -erroff=E_STATEMENT_NOT_REACHED -erroff=E_INIT_SIGN_EXTEND -erroff=E_INIT_DOES_NOT_FIT -erroff=E_INITIALIZATION_TYPE_MISMATCH   -DRUBY_EXPORT -I. -I.ext/include/sparc64-solaris2.10 -I../ruby.devel/include -I../ruby.devel -I../ruby.devel/prism -I../ruby.devel/enc/unicode/15.0.0   -D_XOPEN_SOURCE=600  -I/usr/local/64/lib/libffi-3.0.10/include -I/usr/local/64/include  -o prism/extension.o -c ../ruby.devel/prism/extension.c
"../ruby.devel/prism/extension.c", line 499: internal compiler error: Wasted space
cc: acomp failed for ../ruby.devel/prism/extension.c
make: *** [prism/extension.o] Error 2
```

The line 499 in prism/extension.c is located at the end of parser_errors() function.

It seems that the error message `internal compiler error: Wasted space` strongly suggests the compiler's bug.

Changing optimization level did not solve the error.

After some trial and error, I found that the following patch dismisses the error.

```
--- a/prism/extension.c
+++ b/prism/extension.c
@@ -464,11 +464,11 @@ parser_errors(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
     pm_diagnostic_t *error;
 
     for (error = (pm_diagnostic_t *) parser->error_list.head; error != NULL; error = (pm_diagnostic_t *) error->node.next) {
-        VALUE location_argv[] = {
-            source,
-            LONG2FIX(error->location.start - parser->start),
-            LONG2FIX(error->location.end - error->location.start)
-        };
+        VALUE location_argv[3];
+
+        location_argv[0] = source;
+        location_argv[1] = LONG2FIX(error->location.start - parser->start);
+        location_argv[2] = LONG2FIX(error->location.end - error->location.start);
 
         VALUE level = Qnil;
         switch (error->level) {
@@ -485,12 +485,12 @@ parser_errors(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
                 rb_raise(rb_eRuntimeError, "Unknown level: %" PRIu8, error->level);
         }
 
-        VALUE error_argv[] = {
-            ID2SYM(rb_intern(pm_diagnostic_id_human(error->diag_id))),
-            rb_enc_str_new_cstr(error->message, encoding),
-            rb_class_new_instance(3, location_argv, rb_cPrismLocation),
-            level
-        };
+        VALUE error_argv[4];
+
+        error_argv[0] = ID2SYM(rb_intern(pm_diagnostic_id_human(error->diag_id)));
+        error_argv[1] = rb_enc_str_new_cstr(error->message, encoding);
+        error_argv[2] = rb_class_new_instance(3, location_argv, rb_cPrismLocation);
+        error_argv[3] = level;
 
         rb_ary_push(errors, rb_class_new_instance(4, error_argv, rb_cPrismParseError));
     }
@@ -507,11 +507,11 @@ parser_warnings(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
     pm_diagnostic_t *warning;
 
     for (warning = (pm_diagnostic_t *) parser->warning_list.head; warning != NULL; warning = (pm_diagnostic_t *) warning->node.next) {
-        VALUE location_argv[] = {
-            source,
-            LONG2FIX(warning->location.start - parser->start),
-            LONG2FIX(warning->location.end - warning->location.start)
-        };
+        VALUE location_argv[3];
+
+        location_argv[0] = source;
+        location_argv[1] = LONG2FIX(warning->location.start - parser->start);
+        location_argv[2] = LONG2FIX(warning->location.end - warning->location.start);
 
         VALUE level = Qnil;
         switch (warning->level) {
@@ -525,12 +525,12 @@ parser_warnings(pm_parser_t *parser, rb_encoding *encoding, VALUE source) {
                 rb_raise(rb_eRuntimeError, "Unknown level: %" PRIu8, warning->level);
         }
 
-        VALUE warning_argv[] = {
-            ID2SYM(rb_intern(pm_diagnostic_id_human(warning->diag_id))),
-            rb_enc_str_new_cstr(warning->message, encoding),
-            rb_class_new_instance(3, location_argv, rb_cPrismLocation),
-            level
-        };
+        VALUE warning_argv[4];
+
+        warning_argv[0] = ID2SYM(rb_intern(pm_diagnostic_id_human(warning->diag_id)));
+        warning_argv[1] = rb_enc_str_new_cstr(warning->message, encoding);
+        warning_argv[2] = rb_class_new_instance(3, location_argv, rb_cPrismLocation);
+        warning_argv[3] = level;
 
         rb_ary_push(warnings, rb_class_new_instance(4, warning_argv, rb_cPrismParseWarning));
     }
```

However, I don't like to add the patch because this change significantly decreases maintainability of code.
I also think that the compiler's bug should be fixed in the compiler side and such dirty workaround should not be included.

P.S.
GCC 7.5.0 on Solaris 10 can compile the original code (without the workaround patch) with no errors.
Therefore, it seems that this is not Solaris OS problem but the problem of Oracle Developer Studio 12.5/12.6 compiler.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-12-18 17:35 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-12-18 17:27 [ruby-core:120300] [Ruby master Bug#20964] Oracle Developer Studio 12.5 on Solaris failed to compile "prism/extension.c", line 499: internal compiler error: Wasted space ngoto (Naohisa Goto) via ruby-core
2024-12-18 17:35 ` [ruby-core:120302] " ngoto (Naohisa Goto) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).