This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH RFA: Avoid crash in Java compiler


I was testing a bootstrap on i386-unknown-netbsdelf1.6.1, and I
happened to have CLASSPATH set in my environment.  I got an error
which ended up in a compiler ICE.  I do not get the error if CLASSPATH
is not set, but of course the compiler should not ICE.

The errors were:

gmake[4]: Entering directory `/usr/home/ian/gcc/bootstrap/i386-unknown-netbsdelf1.6.1/libjava/external/w3c_dom'
here=`pwd`; cd ../../../../../gcc/libjava/external/w3c_dom; \
/usr/home/ian/gcc/bootstrap/./gcc/gcj -B/usr/home/ian/gcc/bootstrap/./gcc/ -B/usr/local/i386-unknown-netbsdelf1.6.1/bin/ -B/usr/local/i386-unknown-netbsdelf1.6.1/lib/ -isystem /usr/local/i386-unknown-netbsdelf1.6.1/include -isystem /usr/local/i386-unknown-netbsdelf1.6.1/sys-include --encoding=UTF-8 -Wno-deprecated -fbootclasspath=/usr/home/ian/gcc/bootstrap/i386-unknown-netbsdelf1.6.1/libjava':'../../../../../gcc/libjava/external/w3c_dom':'../../../../../gcc/libjava':'../.. -C -d $here org/w3c/dom/xpath/XPathNamespace.java org/w3c/dom/xpath/XPathResult.java org/w3c/dom/xpath/XPathException.java org/w3c/dom/xpath/XPathExpression.java org/w3c/dom/xpath/XPathNSResolver.java org/w3c/dom/xpath/XPathEvaluator.java org/w3c/dom/DOMException.java org/w3c/dom/Comment.java org/w3c/dom/stylesheets/DocumentStyle.java org/w3c/dom/stylesheets/MediaList.java org/w3c/dom/stylesheets/LinkStyle.java org/w3c/dom/stylesheets/StyleSheet.java org/w3c/dom/stylesheets/StyleSheetList.java org/w3c/dom/Attr.java org/w3c/dom/Notation.java org/w3c/dom/TypeInfo.java org/w3c/dom/html2/HTMLIsIndexElement.java org/w3c/dom/html2/HTMLTableColElement.java org/w3c/dom/html2/HTMLLinkElement.java org/w3c/dom/html2/HTMLTitleElement.java org/w3c/dom/html2/HTMLBRElement.java org/w3c/dom/html2/HTMLHeadElement.java org/w3c/dom/html2/HTMLHtmlElement.java org/w3c/dom/html2/HTMLScriptElement.java org/w3c/dom/html2/HTMLTableRowElement.java org/w3c/dom/html2/HTMLOptionsCollection.java org/w3c/dom/html2/HTMLTableCellElement.java org/w3c/dom/html2/HTMLDListElement.java org/w3c/dom/html2/HTMLFieldSetElement.java org/w3c/dom/html2/HTMLImageElement.java org/w3c/dom/html2/HTMLHRElement.java org/w3c/dom/html2/HTMLModElement.java org/w3c/dom/html2/HTMLHeadingElement.java org/w3c/dom/html2/HTMLTableElement.java org/w3c/dom/html2/HTMLAreaElement.java org/w3c/dom/html2/HTMLOptGroupElement.java org/w3c/dom/html2/HTMLIFrameElement.java org/w3c/dom/html2/HTMLDirectoryElement.java org/w3c/dom/html2/HTMLParamElement.java org/w3c/dom/html2/HTMLLegendElement.java org/w3c/dom/html2/HTMLFrameElement.java org/w3c/dom/html2/HTMLFormElement.java org/w3c/dom/html2/HTMLStyleElement.java org/w3c/dom/html2/HTMLFrameSetElement.java org/w3c/dom/html2/HTMLCollection.java org/w3c/dom/html2/HTMLAnchorElement.java org/w3c/dom/html2/HTMLLabelElement.java org/w3c/dom/html2/HTMLBodyElement.java org/w3c/dom/html2/HTMLOptionElement.java org/w3c/dom/html2/HTMLTableSectionElement.java org/w3c/dom/html2/HTMLAppletElement.java org/w3c/dom/html2/HTMLSelectElement.java org/w3c/dom/html2/HTMLMetaElement.java org/w3c/dom/html2/HTMLMenuElement.java org/w3c/dom/html2/HTMLDivElement.java org/w3c/dom/html2/HTMLLIElement.java org/w3c/dom/html2/HTMLFontElement.java org/w3c/dom/html2/HTMLOListElement.java org/w3c/dom/html2/HTMLBaseFontElement.java org/w3c/dom/html2/HTMLElement.java org/w3c/dom/html2/HTMLTableCaptionElement.java org/w3c/dom/html2/HTMLTextAreaElement.java org/w3c/dom/html2/HTMLPreElement.java org/w3c/dom/html2/HTMLObjectElement.java org/w3c/dom/html2/HTMLBaseElement.java org/w3c/dom/html2/HTMLUListElement.java org/w3c/dom/html2/HTMLMapElement.java org/w3c/dom/html2/HTMLParagraphElement.java org/w3c/dom/html2/HTMLButtonElement.java org/w3c/dom/html2/HTMLQuoteElement.java org/w3c/dom/html2/HTMLInputElement.java org/w3c/dom/html2/HTMLDocument.java org/w3c/dom/ls/LSParser.java org/w3c/dom/ls/LSSerializerFilter.java org/w3c/dom/ls/LSLoadEvent.java org/w3c/dom/ls/DOMImplementationLS.java org/w3c/dom/ls/LSException.java org/w3c/dom/ls/LSSerializer.java org/w3c/dom/ls/LSResourceResolver.java org/w3c/dom/ls/LSOutput.java org/w3c/dom/ls/LSInput.java org/w3c/dom/ls/LSProgressEvent.java org/w3c/dom/ls/LSParserFilter.java org/w3c/dom/DOMLocator.java org/w3c/dom/DOMStringList.java org/w3c/dom/DocumentFragment.java org/w3c/dom/events/MutationEvent.java org/w3c/dom/events/UIEvent.java org/w3c/dom/events/EventListener.java org/w3c/dom/events/Event.java org/w3c/dom/events/MouseEvent.java org/w3c/dom/events/EventTarget.java org/w3c/dom/events/DocumentEvent.java org/w3c/dom/events/EventException.java org/w3c/dom/EntityReference.java org/w3c/dom/DOMErrorHandler.java org/w3c/dom/views/AbstractView.java org/w3c/dom/views/DocumentView.java org/w3c/dom/DOMError.java org/w3c/dom/bootstrap/DOMImplementationRegistry.java org/w3c/dom/traversal/TreeWalker.java org/w3c/dom/traversal/NodeFilter.java org/w3c/dom/traversal/DocumentTraversal.java org/w3c/dom/traversal/NodeIterator.java org/w3c/dom/CharacterData.java org/w3c/dom/DOMConfiguration.java org/w3c/dom/css/CSSRule.java org/w3c/dom/css/Rect.java org/w3c/dom/css/CSSStyleSheet.java org/w3c/dom/css/CSSFontFaceRule.java org/w3c/dom/css/CSSPrimitiveValue.java org/w3c/dom/css/CSSRuleList.java org/w3c/dom/css/ViewCSS.java org/w3c/dom/css/CSSStyleRule.java org/w3c/dom/css/CSSUnknownRule.java org/w3c/dom/css/RGBColor.java org/w3c/dom/css/ElementCSSInlineStyle.java org/w3c/dom/css/CSSMediaRule.java org/w3c/dom/css/CSS2Properties.java org/w3c/dom/css/CSSValue.java org/w3c/dom/css/CSSStyleDeclaration.java org/w3c/dom/css/DOMImplementationCSS.java org/w3c/dom/css/CSSCharsetRule.java org/w3c/dom/css/Counter.java org/w3c/dom/css/CSSPageRule.java org/w3c/dom/css/DocumentCSS.java org/w3c/dom/css/CSSValueList.java org/w3c/dom/css/CSSImportRule.java org/w3c/dom/NameList.java org/w3c/dom/Element.java org/w3c/dom/Document.java org/w3c/dom/ranges/Range.java org/w3c/dom/ranges/RangeException.java org/w3c/dom/ranges/DocumentRange.java org/w3c/dom/DOMImplementationList.java org/w3c/dom/Entity.java org/w3c/dom/UserDataHandler.java org/w3c/dom/DOMImplementation.java org/w3c/dom/CDATASection.java org/w3c/dom/ProcessingInstruction.java org/w3c/dom/Node.java org/w3c/dom/NamedNodeMap.java org/w3c/dom/NodeList.java org/w3c/dom/Text.java org/w3c/dom/DocumentType.java org/w3c/dom/DOMImplementationSource.java
org/w3c/dom/bootstrap/DOMImplementationRegistry.java: In class 'org.w3c.dom.bootstrap.DOMImplementationRegistry$2':
org/w3c/dom/bootstrap/DOMImplementationRegistry.java: In method 'org.w3c.dom.bootstrap.DOMImplementationRegistry$2.run()':
org/w3c/dom/bootstrap/DOMImplementationRegistry.java:326: error: Can't find method 'getContextClassLoader()' in type 'java.lang.Thread'.
   				Thread.currentThread().getContextClassLoader();
                                                          ^
org/w3c/dom/bootstrap/DOMImplementationRegistry.java: In class 'org.w3c.dom.bootstrap.DOMImplementationRegistry':
org/w3c/dom/bootstrap/DOMImplementationRegistry.java: In method '<clinit>()':
org/w3c/dom/bootstrap/DOMImplementationRegistry.java:60: error: final field 'PROPERTY' may not have been initialized
org/w3c/dom/bootstrap/DOMImplementationRegistry.java:66: error: final field 'DEFAULT_LINE_LENGTH' may not have been initialized
org/w3c/dom/bootstrap/DOMImplementationRegistry.java:1: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.



The crash occurs in maybe_yank_clinit in java/parse.y.  The code
dereferences a NULL pointer.  This simple patch avoids the ICE.

I haven't tested this except on the original test case.  I don't know
whether the patch is correct, in the sense that I don't know whether
a NULL pointer here is hiding a different problem elsewhere.

Should I check this in?

Ian


2005-03-29  Ian Lance Taylor  <ian@airs.com>

	* parse.y (maybe_yank_clinit): Don't crash if bbody is NULL.


Index: parse.y
===================================================================
RCS file: /cvs/gcc/gcc/gcc/java/parse.y,v
retrieving revision 1.530
diff -p -u -r1.530 parse.y
--- parse.y	10 Mar 2005 18:40:26 -0000	1.530
+++ parse.y	29 Mar 2005 22:01:20 -0000
@@ -8091,7 +8091,7 @@ maybe_yank_clinit (tree mdecl)
 
   /* Now we analyze the method body and look for something that
      isn't a MODIFY_EXPR */
-  if (!IS_EMPTY_STMT (bbody) && analyze_clinit_body (type, bbody))
+  if (bbody && !IS_EMPTY_STMT (bbody) && analyze_clinit_body (type, bbody))
     return 0;
 
   /* Get rid of <clinit> in the class' list of methods */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]