Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_langtools
提交
7cc46a88
D
dragonwell8_langtools
项目概览
openanolis
/
dragonwell8_langtools
通知
0
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_langtools
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7cc46a88
编写于
7月 24, 2017
作者:
A
asaha
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
e99feb57
892c1651
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
215 addition
and
11 deletion
+215
-11
.hgtags
.hgtags
+14
-0
src/share/classes/com/sun/tools/javac/jvm/Gen.java
src/share/classes/com/sun/tools/javac/jvm/Gen.java
+7
-2
src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
+12
-3
test/tools/javac/T7008643/InlinedFinallyConfuseDebuggersTest.java
...ls/javac/T7008643/InlinedFinallyConfuseDebuggersTest.java
+2
-1
test/tools/javac/T8180660/MissingLNTEntryForFinalizerTest.java
...tools/javac/T8180660/MissingLNTEntryForFinalizerTest.java
+170
-0
test/tools/javac/linenumbers/FinallyLineNumberTest.java
test/tools/javac/linenumbers/FinallyLineNumberTest.java
+10
-5
未找到文件。
.hgtags
浏览文件 @
7cc46a88
...
...
@@ -668,6 +668,8 @@ b353281f73db9617d993353e468342d3420c29f1 jdk8u112-b14
6116c6644be0c85556931aaeb9b4f2dbc9c79157 jdk8u112-b15
ee37eafc48cb6fb20cb6c1e31cfecfe1ccc800da jdk8u112-b16
de1c3df992adb0c704005583210d1ed6dac758cd jdk8u112-b31
c94fd1b737d005962ba62fa03106de791692f39c jdk8u112-b32
721ea56edf4196b37a081ac47206202d7560e16c jdk8u112-b33
5710d574a99aeff3600c49a4aed34fa1b373f7b8 jdk8u121-b00
ab5d32d8cf5f6d81482692f801385a869b2d83c1 jdk8u121-b01
e260d46661d2da3ede78aae434d5420acce99950 jdk8u121-b02
...
...
@@ -682,6 +684,12 @@ dc1dd2e6cf8e094c4a8437d54ebc7bac1f7ab964 jdk8u121-b06
b634abfcd98fb8b201da9208e398ea17cabd2b32 jdk8u121-b11
7fc347da372c8c4e5530a7fa32084b5dbc4ee8b6 jdk8u121-b12
f634736433d9fc1cffbdc55611f97ecb2cd44059 jdk8u121-b13
1dc3121986c615c2ac1f5e7d6705b197c5dfcae6 jdk8u121-b31
970edd6f01b76e916cf223fbc53dcef085a0255b jdk8u121-b32
edc3e462837bcc5916a2aace14e6b137ba88d4b6 jdk8u121-b33
ae7a4fec2fd96e417285536967aa8eff6442df23 jdk8u121-b34
8bcb0ed6a82367e0a40c9cda20720b34441f7846 jdk8u121-b35
176bae232abb77c08c4dcafba5a44e4dac941127 jdk8u121-b36
8b331e7199f74a2dea8a8a866f0d7f1977f146ee jdk8u131-b00
0d04068f82fe680c65619e08ef012ead7483873b jdk8u131-b01
452448c6347af8f7bd827dd4632ac06c991a15b8 jdk8u131-b02
...
...
@@ -694,6 +702,10 @@ bc4f253725f93d9b832ec60d521cd5426a9489ea jdk8u131-b07
2f2c4931d13c44bb6a0f808809e723de0677e302 jdk8u131-b09
676a07884de49a7c60379da8ac892fe1403de6b6 jdk8u131-b10
5162417b51bdf68b95696198181f2e662a14ff8a jdk8u131-b11
12f40d1f41c2cea8b61d046796a753000e61196f jdk8u131-b31
508e7f6446deede595bbdbdc6d6cf9fc1ae8e728 jdk8u131-b32
df2b65224ab78a312559ae3054aeb3ef73abaf9e jdk8u131-b33
08a21473de54fd89fd53a01351cad954f60d2652 jdk8u131-b34
1175fac90fdbbd864f7b1f306397644d26eb9781 jdk8u141-b00
bb163efa3276e129c69bad28299a6283b869caa3 jdk8u141-b01
5864e3781953daa69efd54b329a358a568229268 jdk8u141-b02
...
...
@@ -710,5 +722,7 @@ b5259d2465fa61256f485860f986bd575f13fe92 jdk8u141-b12
9a5ddb594b491ec32e9fafa7008631291ab66d6e jdk8u141-b13
553043f3a2319af6fd6bc704bc8fd7fa4500ee80 jdk8u141-b14
027f6df9fe82624fb7d489ffd848a26796de4868 jdk8u141-b15
716e712f0db45c8231208bc70ab4d2a8a40c4d3a jdk8u141-b31
09c2459991619ef7061ad2bc66373ed29f500acf jdk8u141-b32
4c355f7002c36bb626b42d5c1d42ea91d77ba5d6 jdk8u144-b00
816907853a15d9b22a87032d07327a400f8568b3 jdk8u144-b01
src/share/classes/com/sun/tools/javac/jvm/Gen.java
浏览文件 @
7cc46a88
...
...
@@ -27,6 +27,7 @@ package com.sun.tools.javac.jvm;
import
java.util.*
;
import
com.sun.tools.javac.tree.TreeInfo.PosKind
;
import
com.sun.tools.javac.util.*
;
import
com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition
;
import
com.sun.tools.javac.util.List
;
...
...
@@ -1531,12 +1532,16 @@ public class Gen extends JCTree.Visitor {
catchallpc
,
0
);
startseg
=
env
.
info
.
gaps
.
next
().
intValue
();
}
code
.
statBegin
(
TreeInfo
.
finalizerPos
(
env
.
tree
));
code
.
statBegin
(
TreeInfo
.
finalizerPos
(
env
.
tree
,
PosKind
.
FIRST_STAT_POS
));
code
.
markStatBegin
();
Item
excVar
=
makeTemp
(
syms
.
throwableType
);
excVar
.
store
();
genFinalizer
(
env
);
code
.
resolvePending
();
code
.
statBegin
(
TreeInfo
.
finalizerPos
(
env
.
tree
,
PosKind
.
END_POS
));
code
.
markStatBegin
();
excVar
.
load
();
registerCatch
(
body
.
pos
(),
startseg
,
env
.
info
.
gaps
.
next
().
intValue
(),
...
...
@@ -1550,7 +1555,7 @@ public class Gen extends JCTree.Visitor {
code
.
resolve
(
env
.
info
.
cont
);
// Mark statement line number
code
.
statBegin
(
TreeInfo
.
finalizerPos
(
env
.
tree
));
code
.
statBegin
(
TreeInfo
.
finalizerPos
(
env
.
tree
,
PosKind
.
FIRST_STAT_POS
));
code
.
markStatBegin
();
// Save return address.
...
...
src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
浏览文件 @
7cc46a88
/*
* Copyright (c) 1999, 201
4
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
7
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -35,6 +35,7 @@ import com.sun.tools.javac.comp.Env;
import
com.sun.tools.javac.tree.JCTree.*
;
import
com.sun.tools.javac.tree.JCTree.JCPolyExpression.*
;
import
com.sun.tools.javac.util.*
;
import
com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition
;
import
static
com
.
sun
.
tools
.
javac
.
code
.
Flags
.*;
import
static
com
.
sun
.
tools
.
javac
.
code
.
TypeTag
.
BOT
;
...
...
@@ -611,13 +612,21 @@ public class TreeInfo {
};
}
public
enum
PosKind
{
START_POS
()
{
int
toPos
(
JCTree
tree
)
{
return
TreeInfo
.
getStartPos
(
tree
);
}
},
FIRST_STAT_POS
()
{
int
toPos
(
JCTree
tree
)
{
return
firstStatPos
(
tree
);
}
},
END_POS
()
{
int
toPos
(
JCTree
tree
)
{
return
endPos
(
tree
);
}
};
abstract
int
toPos
(
JCTree
tree
);
}
/** The position of the finalizer of given try/synchronized statement.
*/
public
static
int
finalizerPos
(
JCTree
tree
)
{
public
static
int
finalizerPos
(
JCTree
tree
,
PosKind
posKind
)
{
if
(
tree
.
hasTag
(
TRY
))
{
JCTry
t
=
(
JCTry
)
tree
;
Assert
.
checkNonNull
(
t
.
finalizer
);
return
firstStat
Pos
(
t
.
finalizer
);
return
posKind
.
to
Pos
(
t
.
finalizer
);
}
else
if
(
tree
.
hasTag
(
SYNCHRONIZED
))
{
return
endPos
(((
JCSynchronized
)
tree
).
body
);
}
else
{
...
...
test/tools/javac/T7008643/InlinedFinallyConfuseDebuggersTest.java
浏览文件 @
7cc46a88
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013,
2017,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -64,6 +64,7 @@ public class InlinedFinallyConfuseDebuggersTest {
{
9
,
21
},
//System.out.println("finally");
{
10
,
29
},
{
9
,
32
},
//System.out.println("finally");
{
10
,
41
},
//}
{
11
,
43
},
};
...
...
test/tools/javac/T8180660/MissingLNTEntryForFinalizerTest.java
0 → 100644
浏览文件 @
7cc46a88
/*
* Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8180141
* @summary Missing entry in LineNumberTable for break statement that jumps out of try-finally
* @compile -g MissingLNTEntryForFinalizerTest.java
* @run main MissingLNTEntryForFinalizerTest
*/
import
java.io.File
;
import
java.net.URI
;
import
javax.tools.JavaFileObject
;
import
javax.tools.SimpleJavaFileObject
;
import
com.sun.tools.classfile.*
;
import
com.sun.tools.javac.comp.Attr
;
import
com.sun.tools.javac.comp.AttrContext
;
import
com.sun.tools.javac.comp.Env
;
import
com.sun.tools.javac.file.JavacFileManager
;
import
com.sun.tools.javac.main.JavaCompiler
;
import
com.sun.tools.javac.tree.JCTree
;
import
com.sun.tools.javac.tree.JCTree.*
;
import
com.sun.tools.javac.util.Context
;
import
com.sun.tools.javac.util.List
;
import
static
com
.
sun
.
tools
.
javac
.
util
.
List
.
of
;
import
static
com
.
sun
.
tools
.
javac
.
tree
.
JCTree
.
Tag
.*;
public
class
MissingLNTEntryForFinalizerTest
{
protected
ReusableJavaCompiler
tool
;
Context
context
;
MissingLNTEntryForFinalizerTest
()
{
context
=
new
Context
();
JavacFileManager
.
preRegister
(
context
);
MyAttr
.
preRegister
(
context
);
tool
=
new
ReusableJavaCompiler
(
context
);
}
public
static
void
main
(
String
...
args
)
throws
Throwable
{
new
MissingLNTEntryForFinalizerTest
().
test
();
}
void
test
()
throws
Throwable
{
JavaSource
source
=
new
JavaSource
(
"1"
);
tool
.
clear
();
List
<
JavaFileObject
>
inputs
=
of
(
source
);
try
{
tool
.
compile
(
inputs
);
}
catch
(
Throwable
ex
)
{
throw
new
AssertionError
(
ex
);
}
File
testClasses
=
new
File
(
"."
);
File
file
=
new
File
(
testClasses
,
"Test1.class"
);
ClassFile
classFile
=
ClassFile
.
read
(
file
);
for
(
Method
m
:
classFile
.
methods
)
{
if
(
classFile
.
constant_pool
.
getUTF8Value
(
m
.
name_index
).
equals
(
"foo"
))
{
Code_attribute
code
=
(
Code_attribute
)
m
.
attributes
.
get
(
Attribute
.
Code
);
LineNumberTable_attribute
lnt
=
(
LineNumberTable_attribute
)
code
.
attributes
.
get
(
Attribute
.
LineNumberTable
);
checkLNT
(
lnt
,
MyAttr
.
lineNumber
);
}
}
}
void
checkLNT
(
LineNumberTable_attribute
lnt
,
int
lineToCheckFor
)
{
for
(
LineNumberTable_attribute
.
Entry
e:
lnt
.
line_number_table
)
{
if
(
e
.
line_number
==
lineToCheckFor
)
{
return
;
}
}
throw
new
AssertionError
(
"seek line number not found in the LNT for method foo()"
);
}
class
JavaSource
extends
SimpleJavaFileObject
{
String
id
;
String
template
=
"import java.util.*;\n"
+
"class Test#Id {\n"
+
" void foo() {\n"
+
" List<String> l = null;\n"
+
" String first = null;\n"
+
" try {\n"
+
" first = l.get(0);\n"
+
" } finally {\n"
+
" if (first != null) {\n"
+
" System.out.println(\"finalizer\");\n"
+
" }\n"
+
" }\n"
+
" }\n"
+
"}"
;
JavaSource
(
String
id
)
{
super
(
URI
.
create
(
"myfo:/Test.java"
),
JavaFileObject
.
Kind
.
SOURCE
);
this
.
id
=
id
;
}
@Override
public
CharSequence
getCharContent
(
boolean
ignoreEncodingErrors
)
{
return
template
.
replace
(
"#Id"
,
id
);
}
}
/* this class has been set up to do not depend on a fixed line number, this Attr subclass will
* look for 'break' or 'continue' statements in order to find the actual line number they occupy.
* This way the test can find if that line number appears in the LNT generated for a given class.
*/
static
class
MyAttr
extends
Attr
{
static
int
lineNumber
;
static
void
preRegister
(
Context
context
)
{
context
.
put
(
attrKey
,
(
com
.
sun
.
tools
.
javac
.
util
.
Context
.
Factory
<
Attr
>)
c
->
new
MyAttr
(
c
));
}
MyAttr
(
Context
context
)
{
super
(
context
);
}
@Override
public
com
.
sun
.
tools
.
javac
.
code
.
Type
attribStat
(
JCTree
tree
,
Env
<
AttrContext
>
env
)
{
com
.
sun
.
tools
.
javac
.
code
.
Type
result
=
super
.
attribStat
(
tree
,
env
);
if
(
tree
.
hasTag
(
TRY
))
{
JCTry
tryTree
=
(
JCTry
)
tree
;
lineNumber
=
env
.
toplevel
.
lineMap
.
getLineNumber
(
tryTree
.
finalizer
.
endpos
);
}
return
result
;
}
}
static
class
ReusableJavaCompiler
extends
JavaCompiler
{
ReusableJavaCompiler
(
Context
context
)
{
super
(
context
);
}
protected
void
checkReusable
()
{
// do nothing
}
@Override
public
void
close
()
{
//do nothing
}
void
clear
()
{
//do nothing
}
}
}
test/tools/javac/linenumbers/FinallyLineNumberTest.java
浏览文件 @
7cc46a88
/*
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015,
2017,
Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -36,7 +36,6 @@ import com.sun.tools.classfile.Code_attribute;
import
com.sun.tools.classfile.LineNumberTable_attribute
;
import
com.sun.tools.classfile.LineNumberTable_attribute.Entry
;
import
java.io.File
;
import
java.io.IOException
;
public
class
FinallyLineNumberTest
{
...
...
@@ -46,13 +45,13 @@ public class FinallyLineNumberTest {
if
(
lines
==
null
)
{
throw
new
Exception
(
"finally line number table could not be loaded"
);
}
if
(
lines
.
length
!=
4
)
{
if
(
lines
.
length
!=
5
)
{
// Help debug
System
.
err
.
println
(
"LineTable error, got lines:"
);
for
(
Entry
e
:
lines
)
{
System
.
err
.
println
(
e
.
line_number
);
}
throw
new
Exception
(
"finally line number table incorrect: length="
+
lines
.
length
+
" expected length=
4
"
);
throw
new
Exception
(
"finally line number table incorrect: length="
+
lines
.
length
+
" expected length=
5
"
);
}
// return null line, for the load null operation
...
...
@@ -71,11 +70,17 @@ public class FinallyLineNumberTest {
throw
new
Exception
(
"finally line number table incorrect: got="
+
current
+
" expected="
+
first
);
}
// f
inally line, f
or when exception is thrown
// for when exception is thrown
current
=
lines
[
3
].
line_number
;
if
(
current
!=
first
+
2
)
{
throw
new
Exception
(
"finally line number table incorrect: got="
+
current
+
" expected="
+
(
first
+
2
));
}
// the '}' closing the finally block
current
=
lines
[
4
].
line_number
;
if
(
current
!=
first
+
3
)
{
throw
new
Exception
(
"finally line number table incorrect: got="
+
current
+
" expected="
+
(
first
+
3
));
}
}
static
Entry
[]
findEntries
()
throws
IOException
,
ConstantPoolException
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录