# HG changeset patch # User neliasso # Date 1421922193 -3600 # Node ID b9655115bf4edcd4bcea59a646cc2fb1336baa22 # Parent 76473974643b3f6425317e7da723526f17bbc75c 8069035: compiler/oracle/CheckCompileCommandOption.java nightly failure Summary: Fixed whitespace handling and added test cases Reviewed-by: kvn, anoll, zmajo diff -r 76473974643b -r b9655115bf4e hotspot/src/share/vm/compiler/compilerOracle.cpp --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp Thu Jan 22 11:05:14 2015 +0100 +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp Thu Jan 22 11:23:13 2015 +0100 @@ -690,6 +690,13 @@ return NULL; } +int skip_whitespace(char* line) { + // Skip any leading spaces + int whitespace_read = 0; + sscanf(line, "%*[ \t]%n", &whitespace_read); + return whitespace_read; +} + void CompilerOracle::parse_from_line(char* line) { if (line[0] == '\0') return; if (line[0] == '#') return; @@ -756,15 +763,9 @@ line += bytes_read; - // Skip any leading spaces before signature - int whitespace_read = 0; - sscanf(line, "%*[ \t]%n", &whitespace_read); - if (whitespace_read > 0) { - line += whitespace_read; - } - // there might be a signature following the method. // signatures always begin with ( so match that by hand + line += skip_whitespace(line); if (1 == sscanf(line, "(%254[[);/" RANGEBASE "]%n", sig + 1, &bytes_read)) { sig[0] = '('; line += bytes_read; @@ -787,7 +788,9 @@ // // For future extensions: extend scan_flag_and_value() char option[256]; // stores flag for Type (1) and type of Type (2) - while (sscanf(line, "%*[ \t]%255[a-zA-Z0-9]%n", option, &bytes_read) == 1) { + + line += skip_whitespace(line); + while (sscanf(line, "%255[a-zA-Z0-9]%n", option, &bytes_read) == 1) { if (match != NULL && !_quiet) { // Print out the last match added ttyLocker ttyl; @@ -817,6 +820,7 @@ // Type (1) option match = add_option_string(c_name, c_match, m_name, m_match, signature, option, true); } + line += skip_whitespace(line); } // while( } else { match = add_predicate(command, c_name, c_match, m_name, m_match, signature); diff -r 76473974643b -r b9655115bf4e hotspot/test/compiler/oracle/CheckCompileCommandOption.java --- a/hotspot/test/compiler/oracle/CheckCompileCommandOption.java Thu Jan 22 11:05:14 2015 +0100 +++ b/hotspot/test/compiler/oracle/CheckCompileCommandOption.java Thu Jan 22 11:23:13 2015 +0100 @@ -21,12 +21,15 @@ * questions. */ +import java.io.PrintWriter; +import java.io.File; + import com.oracle.java.testlibrary.*; /* * @test CheckCompileCommandOption - * @bug 8055286 8056964 8059847 - * @summary "Checks parsing of -XX:+CompileCommand=option" + * @bug 8055286 8056964 8059847 8069035 + * @summary "Checks parsing of -XX:CompileCommand=option" * @library /testlibrary * @run main CheckCompileCommandOption */ @@ -45,38 +48,69 @@ // have the the following types: intx, uintx, bool, ccstr, // ccstrlist, and double. + private static final String[][] FILE_ARGUMENTS = { + { + "-XX:CompileCommandFile=" + new File(System.getProperty("test.src", "."), "command1.txt"), + "-version" + }, + { + "-XX:CompileCommandFile=" + new File(System.getProperty("test.src", "."), "command2.txt"), + "-version" + } + }; + + private static final String[][] FILE_EXPECTED_OUTPUT = { + { + "CompileCommand: option com/oracle/Test.test bool MyBoolOption1 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption2 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption3 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption4 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption5 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption6 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption7 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption8 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption9 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption10 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption11 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption12 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption13 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption14 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption15 = true", + "CompileCommand: option com/oracle/Test.test(I) bool MyBoolOption16 = true" + }, + { + "CompileCommand: option Test.test const char* MyListOption = '_foo _bar'", + "CompileCommand: option Test.test const char* MyStrOption = '_foo'", + "CompileCommand: option Test.test bool MyBoolOption = false", + "CompileCommand: option Test.test intx MyIntxOption = -1", + "CompileCommand: option Test.test uintx MyUintxOption = 1", + "CompileCommand: option Test.test bool MyFlag = true", + "CompileCommand: option Test.test double MyDoubleOption = 1.123000" + } + }; + private static final String[][] TYPE_1_ARGUMENTS = { { "-XX:CompileCommand=option,com/oracle/Test.test,MyBoolOption1", "-XX:CompileCommand=option,com/oracle/Test,test,MyBoolOption2", "-XX:CompileCommand=option,com.oracle.Test::test,MyBoolOption3", "-XX:CompileCommand=option,com/oracle/Test::test,MyBoolOption4", - "-version" - }, - { - "-XX:CompileCommand=option,com/oracle/Test.test,MyBoolOption1,MyBoolOption2", - "-version" - }, - { - "-XX:CompileCommand=option,com/oracle/Test,test,MyBoolOption1,MyBoolOption2", + "-XX:CompileCommand=option,com/oracle/Test.test,MyBoolOption5,MyBoolOption6", + "-XX:CompileCommand=option,com/oracle/Test,test,MyBoolOption7,MyBoolOption8", "-version" } }; private static final String[][] TYPE_1_EXPECTED_OUTPUTS = { { - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption1 = true", - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption2 = true", - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption3 = true", - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption4 = true" - }, - { - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption1 = true", - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption2 = true", - }, - { - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption1 = true", - "CompilerOracle: option com/oracle/Test.test bool MyBoolOption2 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption1 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption2 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption3 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption4 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption5 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption6 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption7 = true", + "CompileCommand: option com/oracle/Test.test bool MyBoolOption8 = true" } }; @@ -88,38 +122,28 @@ "-XX:CompileCommand=option,Test::test,intx,MyIntxOption,-1", "-XX:CompileCommand=option,Test::test,uintx,MyUintxOption,1", "-XX:CompileCommand=option,Test::test,MyFlag", - "-XX:CompileCommand=option,Test::test,double,MyDoubleOption,1.123", - "-version" - }, - { - "-XX:CompileCommand=option,Test.test,double,MyDoubleOption,1.123", - "-version" - }, - { - "-XX:CompileCommand=option,Test::test,bool,MyBoolOption,false,intx,MyIntxOption,-1,uintx,MyUintxOption,1,MyFlag,double,MyDoubleOption,1.123", + "-XX:CompileCommand=option,Test::test,double,MyDoubleOption1,1.123", + "-XX:CompileCommand=option,Test.test,double,MyDoubleOption2,1.123", + "-XX:CompileCommand=option,Test::test,bool,MyBoolOptionX,false,intx,MyIntxOptionX,-1,uintx,MyUintxOptionX,1,MyFlagX,double,MyDoubleOptionX,1.123", "-version" } }; private static final String[][] TYPE_2_EXPECTED_OUTPUTS = { { - "CompilerOracle: option Test.test const char* MyListOption = '_foo _bar'", - "CompilerOracle: option Test.test const char* MyStrOption = '_foo'", - "CompilerOracle: option Test.test bool MyBoolOption = false", - "CompilerOracle: option Test.test intx MyIntxOption = -1", - "CompilerOracle: option Test.test uintx MyUintxOption = 1", - "CompilerOracle: option Test.test bool MyFlag = true", - "CompilerOracle: option Test.test double MyDoubleOption = 1.123000" - }, - { - "CompilerOracle: option Test.test double MyDoubleOption = 1.123000" - }, - { - "CompilerOracle: option Test.test bool MyBoolOption = false", - "CompilerOracle: option Test.test intx MyIntxOption = -1", - "CompilerOracle: option Test.test uintx MyUintxOption = 1", - "CompilerOracle: option Test.test bool MyFlag = true", - "CompilerOracle: option Test.test double MyDoubleOption = 1.123000", + "CompileCommand: option Test.test const char* MyListOption = '_foo _bar'", + "CompileCommand: option Test.test const char* MyStrOption = '_foo'", + "CompileCommand: option Test.test bool MyBoolOption = false", + "CompileCommand: option Test.test intx MyIntxOption = -1", + "CompileCommand: option Test.test uintx MyUintxOption = 1", + "CompileCommand: option Test.test bool MyFlag = true", + "CompileCommand: option Test.test double MyDoubleOption1 = 1.123000", + "CompileCommand: option Test.test double MyDoubleOption2 = 1.123000", + "CompileCommand: option Test.test bool MyBoolOptionX = false", + "CompileCommand: option Test.test intx MyIntxOptionX = -1", + "CompileCommand: option Test.test uintx MyUintxOptionX = 1", + "CompileCommand: option Test.test bool MyFlagX = true", + "CompileCommand: option Test.test double MyDoubleOptionX = 1.123000", } }; @@ -172,7 +196,7 @@ out.shouldContain(expected_output); } - out.shouldNotContain("CompileCommand: unrecognized line"); + out.shouldNotContain("CompileCommand: An error occured during parsing"); out.shouldHaveExitValue(0); } @@ -183,7 +207,7 @@ pb = ProcessTools.createJavaProcessBuilder(arguments); out = new OutputAnalyzer(pb.start()); - out.shouldContain("CompileCommand: unrecognized line"); + out.shouldContain("CompileCommand: An error occured during parsing"); out.shouldHaveExitValue(0); } @@ -212,5 +236,10 @@ for (String[] arguments: TYPE_2_INVALID_ARGUMENTS) { verifyInvalidOption(arguments); } + + // Check if commands in command file are parsed correctly + for (int i = 0; i < FILE_ARGUMENTS.length; i++) { + verifyValidOption(FILE_ARGUMENTS[i], FILE_EXPECTED_OUTPUT[i]); + } } } diff -r 76473974643b -r b9655115bf4e hotspot/test/compiler/oracle/command1.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/oracle/command1.txt Thu Jan 22 11:23:13 2015 +0100 @@ -0,0 +1,12 @@ +option,com/oracle/Test.test,MyBoolOption1 +option,com/oracle/Test,test,MyBoolOption2 +option,com.oracle.Test::test,MyBoolOption3 +option,com/oracle/Test::test,MyBoolOption4 +option,com/oracle/Test.test,MyBoolOption5,MyBoolOption6 +option,com/oracle/Test,test,MyBoolOption7,MyBoolOption8 +option,com/oracle/Test.test(I),MyBoolOption9 +option,com/oracle/Test,test,(I),MyBoolOption10 +option,com.oracle.Test::test(I),MyBoolOption11 +option,com/oracle/Test::test(I),MyBoolOption12 +option,com/oracle/Test.test(I),MyBoolOption13,MyBoolOption14 +option,com/oracle/Test,test(I),MyBoolOption15,MyBoolOption16 diff -r 76473974643b -r b9655115bf4e hotspot/test/compiler/oracle/command2.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/oracle/command2.txt Thu Jan 22 11:23:13 2015 +0100 @@ -0,0 +1,7 @@ +option,Test::test,ccstrlist,MyListOption,_foo,_bar +option,Test::test,ccstr,MyStrOption,_foo +option,Test::test,bool,MyBoolOption,false +option,Test::test,intx,MyIntxOption,-1 +option,Test::test,uintx,MyUintxOption,1 +option,Test::test,MyFlag +option,Test::test,double,MyDoubleOption,1.123