1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/compiler/uncommontrap/TestStackBangMonitorOwned.java Tue Apr 01 09:36:49 2014 +0200 1.3 @@ -0,0 +1,268 @@ 1.4 +/* 1.5 + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. 1.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.7 + * 1.8 + * This code is free software; you can redistribute it and/or modify it 1.9 + * under the terms of the GNU General Public License version 2 only, as 1.10 + * published by the Free Software Foundation. 1.11 + * 1.12 + * This code is distributed in the hope that it will be useful, but WITHOUT 1.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1.14 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1.15 + * version 2 for more details (a copy is included in the LICENSE file that 1.16 + * accompanied this code). 1.17 + * 1.18 + * You should have received a copy of the GNU General Public License version 1.19 + * 2 along with this work; if not, write to the Free Software Foundation, 1.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 1.21 + * 1.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 1.23 + * or visit www.oracle.com if you need additional information or have any 1.24 + * questions. 1.25 + */ 1.26 + 1.27 +/* 1.28 + * @test 1.29 + * @bug 8032410 1.30 + * @summary Stack overflow at deoptimization doesn't release owned monitors 1.31 + * @run main/othervm -XX:-BackgroundCompilation -XX:CompileCommand=dontinline,TestStackBangMonitorOwned::m1 -XX:CompileCommand=exclude,TestStackBangMonitorOwned::m2 -Xss256K -XX:-UseOnStackReplacement TestStackBangMonitorOwned 1.32 + * 1.33 + */ 1.34 +public class TestStackBangMonitorOwned { 1.35 + 1.36 + static class UnloadedClass1 { 1.37 + volatile int field; 1.38 + } 1.39 + 1.40 + static Object m1(boolean deopt) { 1.41 + long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, 1.42 + l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, 1.43 + l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36, 1.44 + l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48, 1.45 + l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60, 1.46 + l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72, 1.47 + l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84, 1.48 + l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96, 1.49 + l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107, 1.50 + l108, l109, l110, l111, l112, l113, l114, l115, l116, l117, 1.51 + l118, l119, l120, l121, l122, l123, l124, l125, l126, l127, 1.52 + l128, l129, l130, l131, l132, l133, l134, l135, l136, l137, 1.53 + l138, l139, l140, l141, l142, l143, l144, l145, l146, l147, 1.54 + l148, l149, l150, l151, l152, l153, l154, l155, l156, l157, 1.55 + l158, l159, l160, l161, l162, l163, l164, l165, l166, l167, 1.56 + l168, l169, l170, l171, l172, l173, l174, l175, l176, l177, 1.57 + l178, l179, l180, l181, l182, l183, l184, l185, l186, l187, 1.58 + l188, l189, l190, l191, l192, l193, l194, l195, l196, l197, 1.59 + l198, l199, l200, l201, l202, l203, l204, l205, l206, l207, 1.60 + l208, l209, l210, l211, l212, l213, l214, l215, l216, l217, 1.61 + l218, l219, l220, l221, l222, l223, l224, l225, l226, l227, 1.62 + l228, l229, l230, l231, l232, l233, l234, l235, l236, l237, 1.63 + l238, l239, l240, l241, l242, l243, l244, l245, l246, l247, 1.64 + l248, l249, l250, l251, l252, l253, l254, l255, l256, l257, 1.65 + l258, l259, l260, l261, l262, l263, l264, l265, l266, l267, 1.66 + l268, l269, l270, l271, l272, l273, l274, l275, l276, l277, 1.67 + l278, l279, l280, l281, l282, l283, l284, l285, l286, l287, 1.68 + l288, l289, l290, l291, l292, l293, l294, l295, l296, l297, 1.69 + l298, l299, l300, l301, l302, l303, l304, l305, l306, l307, 1.70 + l308, l309, l310, l311, l312, l313, l314, l315, l316, l317, 1.71 + l318, l319, l320, l321, l322, l323, l324, l325, l326, l327, 1.72 + l328, l329, l330, l331, l332, l333, l334, l335, l336, l337, 1.73 + l338, l339, l340, l341, l342, l343, l344, l345, l346, l347, 1.74 + l348, l349, l350, l351, l352, l353, l354, l355, l356, l357, 1.75 + l358, l359, l360, l361, l362, l363, l364, l365, l366, l367, 1.76 + l368, l369, l370, l371, l372, l373, l374, l375, l376, l377, 1.77 + l378, l379, l380, l381, l382, l383, l384, l385, l386, l387, 1.78 + l388, l389, l390, l391, l392, l393, l394, l395, l396, l397, 1.79 + l398, l399, l400, l401, l402, l403, l404, l405, l406, l407, 1.80 + l408, l409, l410, l411, l412, l413, l414, l415, l416, l417, 1.81 + l418, l419, l420, l421, l422, l423, l424, l425, l426, l427, 1.82 + l428, l429, l430, l431, l432, l433, l434, l435, l436, l437, 1.83 + l438, l439, l440, l441, l442, l443, l444, l445, l446, l447, 1.84 + l448, l449, l450, l451, l452, l453, l454, l455, l456, l457, 1.85 + l458, l459, l460, l461, l462, l463, l464, l465, l466, l467, 1.86 + l468, l469, l470, l471, l472, l473, l474, l475, l476, l477, 1.87 + l478, l479, l480, l481, l482, l483, l484, l485, l486, l487, 1.88 + l488, l489, l490, l491, l492, l493, l494, l495, l496, l497, 1.89 + l498, l499, l500, l501, l502, l503, l504, l505, l506, l507, 1.90 + l508, l509, l510, l511; 1.91 + 1.92 + long ll0, ll1, ll2, ll3, ll4, ll5, ll6, ll7, ll8, ll9, ll10, ll11, ll12, 1.93 + ll13, ll14, ll15, ll16, ll17, ll18, ll19, ll20, ll21, ll22, ll23, ll24, 1.94 + ll25, ll26, ll27, ll28, ll29, ll30, ll31, ll32, ll33, ll34, ll35, ll36, 1.95 + ll37, ll38, ll39, ll40, ll41, ll42, ll43, ll44, ll45, ll46, ll47, ll48, 1.96 + ll49, ll50, ll51, ll52, ll53, ll54, ll55, ll56, ll57, ll58, ll59, ll60, 1.97 + ll61, ll62, ll63, ll64, ll65, ll66, ll67, ll68, ll69, ll70, ll71, ll72, 1.98 + ll73, ll74, ll75, ll76, ll77, ll78, ll79, ll80, ll81, ll82, ll83, ll84, 1.99 + ll85, ll86, ll87, ll88, ll89, ll90, ll91, ll92, ll93, ll94, ll95, ll96, 1.100 + ll97, ll98, ll99, ll100, ll101, ll102, ll103, ll104, ll105, ll106, ll107, 1.101 + ll108, ll109, ll110, ll111, ll112, ll113, ll114, ll115, ll116, ll117, 1.102 + ll118, ll119, ll120, ll121, ll122, ll123, ll124, ll125, ll126, ll127, 1.103 + ll128, ll129, ll130, ll131, ll132, ll133, ll134, ll135, ll136, ll137, 1.104 + ll138, ll139, ll140, ll141, ll142, ll143, ll144, ll145, ll146, ll147, 1.105 + ll148, ll149, ll150, ll151, ll152, ll153, ll154, ll155, ll156, ll157, 1.106 + ll158, ll159, ll160, ll161, ll162, ll163, ll164, ll165, ll166, ll167, 1.107 + ll168, ll169, ll170, ll171, ll172, ll173, ll174, ll175, ll176, ll177, 1.108 + ll178, ll179, ll180, ll181, ll182, ll183, ll184, ll185, ll186, ll187, 1.109 + ll188, ll189, ll190, ll191, ll192, ll193, ll194, ll195, ll196, ll197, 1.110 + ll198, ll199, ll200, ll201, ll202, ll203, ll204, ll205, ll206, ll207, 1.111 + ll208, ll209, ll210, ll211, ll212, ll213, ll214, ll215, ll216, ll217, 1.112 + ll218, ll219, ll220, ll221, ll222, ll223, ll224, ll225, ll226, ll227, 1.113 + ll228, ll229, ll230, ll231, ll232, ll233, ll234, ll235, ll236, ll237, 1.114 + ll238, ll239, ll240, ll241, ll242, ll243, ll244, ll245, ll246, ll247, 1.115 + ll248, ll249, ll250, ll251, ll252, ll253, ll254, ll255, ll256, ll257, 1.116 + ll258, ll259, ll260, ll261, ll262, ll263, ll264, ll265, ll266, ll267, 1.117 + ll268, ll269, ll270, ll271, ll272, ll273, ll274, ll275, ll276, ll277, 1.118 + ll278, ll279, ll280, ll281, ll282, ll283, ll284, ll285, ll286, ll287, 1.119 + ll288, ll289, ll290, ll291, ll292, ll293, ll294, ll295, ll296, ll297, 1.120 + ll298, ll299, ll300, ll301, ll302, ll303, ll304, ll305, ll306, ll307, 1.121 + ll308, ll309, ll310, ll311, ll312, ll313, ll314, ll315, ll316, ll317, 1.122 + ll318, ll319, ll320, ll321, ll322, ll323, ll324, ll325, ll326, ll327, 1.123 + ll328, ll329, ll330, ll331, ll332, ll333, ll334, ll335, ll336, ll337, 1.124 + ll338, ll339, ll340, ll341, ll342, ll343, ll344, ll345, ll346, ll347, 1.125 + ll348, ll349, ll350, ll351, ll352, ll353, ll354, ll355, ll356, ll357, 1.126 + ll358, ll359, ll360, ll361, ll362, ll363, ll364, ll365, ll366, ll367, 1.127 + ll368, ll369, ll370, ll371, ll372, ll373, ll374, ll375, ll376, ll377, 1.128 + ll378, ll379, ll380, ll381, ll382, ll383, ll384, ll385, ll386, ll387, 1.129 + ll388, ll389, ll390, ll391, ll392, ll393, ll394, ll395, ll396, ll397, 1.130 + ll398, ll399, ll400, ll401, ll402, ll403, ll404, ll405, ll406, ll407, 1.131 + ll408, ll409, ll410, ll411, ll412, ll413, ll414, ll415, ll416, ll417, 1.132 + ll418, ll419, ll420, ll421, ll422, ll423, ll424, ll425, ll426, ll427, 1.133 + ll428, ll429, ll430, ll431, ll432, ll433, ll434, ll435, ll436, ll437, 1.134 + ll438, ll439, ll440, ll441, ll442, ll443, ll444, ll445, ll446, ll447, 1.135 + ll448, ll449, ll450, ll451, ll452, ll453, ll454, ll455, ll456, ll457, 1.136 + ll458, ll459, ll460, ll461, ll462, ll463, ll464, ll465, ll466, ll467, 1.137 + ll468, ll469, ll470, ll471, ll472, ll473, ll474, ll475, ll476, ll477, 1.138 + ll478, ll479, ll480, ll481, ll482, ll483, ll484, ll485, ll486, ll487, 1.139 + ll488, ll489, ll490, ll491, ll492, ll493, ll494, ll495, ll496, ll497, 1.140 + ll498, ll499, ll500, ll501, ll502, ll503, ll504, ll505, ll506, ll507, 1.141 + ll508, ll509, ll510, ll511; 1.142 + 1.143 + if (deopt) { 1.144 + method_entered = true; 1.145 + synchronized(monitor) { 1.146 + do_monitor_acquire = true; 1.147 + UnloadedClass1 res = new UnloadedClass1(); // forces deopt with c2 1.148 + res.field = 0; //forced deopt with c1 1.149 + return res; 1.150 + } 1.151 + } 1.152 + return null; 1.153 + } 1.154 + 1.155 + static boolean m2(boolean deopt) { 1.156 + long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, 1.157 + l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, 1.158 + l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36, 1.159 + l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48, 1.160 + l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60, 1.161 + l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72, 1.162 + l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84, 1.163 + l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96, 1.164 + l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107, 1.165 + l108, l109, l110, l111, l112, l113, l114, l115, l116, l117, 1.166 + l118, l119, l120, l121, l122, l123, l124, l125, l126, l127, 1.167 + l128, l129, l130, l131, l132, l133, l134, l135, l136, l137, 1.168 + l138, l139, l140, l141, l142, l143, l144, l145, l146, l147, 1.169 + l148, l149, l150, l151, l152, l153, l154, l155, l156, l157, 1.170 + l158, l159, l160, l161, l162, l163, l164, l165, l166, l167, 1.171 + l168, l169, l170, l171, l172, l173, l174, l175, l176, l177, 1.172 + l178, l179, l180, l181, l182, l183, l184, l185, l186, l187, 1.173 + l188, l189, l190, l191, l192, l193, l194, l195, l196, l197, 1.174 + l198, l199, l200, l201, l202, l203, l204, l205, l206, l207, 1.175 + l208, l209, l210, l211, l212, l213, l214, l215, l216, l217, 1.176 + l218, l219, l220, l221, l222, l223, l224, l225, l226, l227, 1.177 + l228, l229, l230, l231, l232, l233, l234, l235, l236, l237, 1.178 + l238, l239, l240, l241, l242, l243, l244, l245, l246, l247, 1.179 + l248, l249, l250, l251, l252, l253, l254, l255, l256, l257, 1.180 + l258, l259, l260, l261, l262, l263, l264, l265, l266, l267, 1.181 + l268, l269, l270, l271, l272, l273, l274, l275, l276, l277, 1.182 + l278, l279, l280, l281, l282, l283, l284, l285, l286, l287, 1.183 + l288, l289, l290, l291, l292, l293, l294, l295, l296, l297, 1.184 + l298, l299, l300, l301, l302, l303, l304, l305, l306, l307, 1.185 + l308, l309, l310, l311, l312, l313, l314, l315, l316, l317, 1.186 + l318, l319, l320, l321, l322, l323, l324, l325, l326, l327, 1.187 + l328, l329, l330, l331, l332, l333, l334, l335, l336, l337, 1.188 + l338, l339, l340, l341, l342, l343, l344, l345, l346, l347, 1.189 + l348, l349, l350, l351, l352, l353, l354, l355, l356, l357, 1.190 + l358, l359, l360, l361, l362, l363, l364, l365, l366, l367, 1.191 + l368, l369, l370, l371, l372, l373, l374, l375, l376, l377, 1.192 + l378, l379, l380, l381, l382, l383, l384, l385, l386, l387, 1.193 + l388, l389, l390, l391, l392, l393, l394, l395, l396, l397, 1.194 + l398, l399, l400, l401, l402, l403, l404, l405, l406, l407, 1.195 + l408, l409, l410, l411, l412, l413, l414, l415, l416, l417, 1.196 + l418, l419, l420, l421, l422, l423, l424, l425, l426, l427, 1.197 + l428, l429, l430, l431, l432, l433, l434, l435, l436, l437, 1.198 + l438, l439, l440, l441, l442, l443, l444, l445, l446, l447, 1.199 + l448, l449, l450, l451, l452, l453, l454, l455, l456, l457, 1.200 + l458, l459, l460, l461, l462, l463, l464, l465, l466, l467, 1.201 + l468, l469, l470, l471, l472, l473, l474, l475, l476, l477, 1.202 + l478, l479, l480, l481, l482, l483, l484, l485, l486, l487, 1.203 + l488, l489, l490, l491, l492, l493, l494, l495, l496, l497, 1.204 + l498, l499, l500, l501, l502, l503, l504, l505, l506, l507, 1.205 + l508, l509, l510, l511; 1.206 + 1.207 + boolean do_m3 = false; 1.208 + try { 1.209 + do_m3 = m2(deopt); 1.210 + } catch (StackOverflowError e) { 1.211 + return true; 1.212 + } 1.213 + if (do_m3) { 1.214 + try { 1.215 + m1(deopt); 1.216 + } catch (StackOverflowError e) {} 1.217 + } 1.218 + return false; 1.219 + } 1.220 + 1.221 + // Used for synchronization betwen threads 1.222 + static volatile boolean thread_started = false; 1.223 + static volatile boolean do_monitor_acquire = false; 1.224 + static volatile boolean monitor_acquired = false; 1.225 + static volatile boolean method_entered = false; 1.226 + 1.227 + static Object monitor = new Object(); 1.228 + 1.229 + static public void main(String[] args) { 1.230 + // get m1 compiled 1.231 + for (int i = 0; i < 20000; i++) { 1.232 + m1(false); 1.233 + } 1.234 + 1.235 + Thread thread = new Thread() { 1.236 + public void run() { 1.237 + thread_started = true; 1.238 + while(!do_monitor_acquire); 1.239 + System.out.println("Ok to try to acquire the lock"); 1.240 + synchronized(monitor) { 1.241 + monitor_acquired = true; 1.242 + } 1.243 + } 1.244 + }; 1.245 + 1.246 + thread.setDaemon(true); 1.247 + thread.start(); 1.248 + 1.249 + while(!thread_started); 1.250 + 1.251 + m2(true); 1.252 + 1.253 + if (!method_entered) { 1.254 + System.out.println("TEST PASSED"); 1.255 + return; 1.256 + } 1.257 + 1.258 + for (int i = 0; i < 10; i++) { 1.259 + System.out.println("Is lock acquired?"); 1.260 + if (monitor_acquired) { 1.261 + System.out.println("TEST PASSED"); 1.262 + return; 1.263 + } 1.264 + try { 1.265 + Thread.sleep(10000); 1.266 + } catch(InterruptedException ie) { 1.267 + } 1.268 + } 1.269 + System.out.println("TEST FAILED"); 1.270 + } 1.271 +}