--- a/hotspot/src/share/vm/classfile/verifier.cpp Fri May 09 08:34:22 2014 -0700
+++ b/hotspot/src/share/vm/classfile/verifier.cpp Fri May 09 16:50:54 2014 -0400
@@ -364,7 +364,7 @@
void ErrorContext::details(outputStream* ss, const Method* method) const {
if (is_valid()) {
- ss->print_cr("");
+ ss->cr();
ss->print_cr("Exception Details:");
location_details(ss, method);
reason_details(ss);
@@ -379,7 +379,7 @@
streamIndentor si(ss);
ss->indent().print_cr("Reason:");
streamIndentor si2(ss);
- ss->indent().print("");
+ ss->indent().print("%s", "");
switch (_fault) {
case INVALID_BYTECODE:
ss->print("Error exists in the bytecode");
@@ -432,7 +432,7 @@
ShouldNotReachHere();
ss->print_cr("Unknown");
}
- ss->print_cr("");
+ ss->cr();
}
void ErrorContext::location_details(outputStream* ss, const Method* method) const {
@@ -507,7 +507,7 @@
for (u2 i = 0; i < sm_table->number_of_entries(); ++i) {
ss->indent();
sm_frame->print_on(ss, current_offset);
- ss->print_cr("");
+ ss->cr();
current_offset += sm_frame->offset_delta();
sm_frame = sm_frame->next();
}
@@ -579,7 +579,8 @@
tty->print_cr("Verifying method %s", m->name_and_sig_as_C_string());
}
- const char* bad_type_msg = "Bad type on operand stack in %s";
+// For clang, the only good constant format string is a literal constant format string.
+#define bad_type_msg "Bad type on operand stack in %s"
int32_t max_stack = m->verifier_max_stack();
int32_t max_locals = m->max_locals();
@@ -1676,6 +1677,8 @@
}
}
+#undef bad_type_message
+
char* ClassVerifier::generate_code_data(methodHandle m, u4 code_length, TRAPS) {
char* code_data = NEW_RESOURCE_ARRAY(char, code_length);
memset(code_data, 0, sizeof(char) * code_length);
@@ -2363,8 +2366,8 @@
if (opcode == Bytecodes::_invokedynamic) {
if (_klass->major_version() < Verifier::INVOKEDYNAMIC_MAJOR_VERSION) {
class_format_error(
- "invokedynamic instructions not supported by this class file version",
- _klass->external_name());
+ "invokedynamic instructions not supported by this class file version (%d), class %s",
+ _klass->major_version(), _klass->external_name());
return;
}
} else {