--- old/src/jdk.jextract/share/classes/com/sun/tools/jextract/AsmCodeFactory.java 2019-04-10 19:41:52.000000000 +0530 +++ new/src/jdk.jextract/share/classes/com/sun/tools/jextract/AsmCodeFactory.java 2019-04-10 19:41:51.000000000 +0530 @@ -483,7 +483,7 @@ MacroParser.Macro macro = macroTree.macro().get(); log.print(Level.FINE, () -> "Adding macro " + name); - addConstant(global_cw, macroTree.location(), name, macro.type(), macro.value()); + addConstant(global_cw, macroTree.location(), Utils.toMacroName(name), macro.type(), macro.value()); return true; } --- old/src/jdk.jextract/share/classes/com/sun/tools/jextract/AsmCodeFactoryExt.java 2019-04-10 19:41:55.000000000 +0530 +++ new/src/jdk.jextract/share/classes/com/sun/tools/jextract/AsmCodeFactoryExt.java 2019-04-10 19:41:54.000000000 +0530 @@ -200,7 +200,7 @@ String name = macroTree.name(); MacroParser.Macro macro = macroTree.macro().get(); log.print(Level.FINE, () -> "Adding macro " + name); - addConstant(name, macro.type(), macro.value()); + addConstant(Utils.toMacroName(name), macro.type(), macro.value()); return true; } else { return false; --- old/src/jdk.jextract/share/classes/com/sun/tools/jextract/JavaSourceFactory.java 2019-04-10 19:41:57.000000000 +0530 +++ new/src/jdk.jextract/share/classes/com/sun/tools/jextract/JavaSourceFactory.java 2019-04-10 19:41:56.000000000 +0530 @@ -382,7 +382,7 @@ MacroParser.Macro macro = macroTree.macro().get(); log.print(Level.FINE, () -> "Adding macro " + name); - addConstant(global_jsb, macroTree.location(), name, macro.type(), macro.value()); + addConstant(global_jsb, macroTree.location(), Utils.toMacroName(name), macro.type(), macro.value()); return true; } --- old/src/jdk.jextract/share/classes/com/sun/tools/jextract/JavaSourceFactoryExt.java 2019-04-10 19:42:00.000000000 +0530 +++ new/src/jdk.jextract/share/classes/com/sun/tools/jextract/JavaSourceFactoryExt.java 2019-04-10 19:41:58.000000000 +0530 @@ -130,7 +130,7 @@ String name = macroTree.name(); MacroParser.Macro macro = macroTree.macro().get(); log.print(Level.FINE, () -> "Adding macro " + name); - addConstant(header_jsb, name, macro.type(), macro.value()); + addConstant(header_jsb, Utils.toMacroName(name), macro.type(), macro.value()); return true; } else { return false; --- old/src/jdk.jextract/share/classes/com/sun/tools/jextract/Utils.java 2019-04-10 19:42:02.000000000 +0530 +++ new/src/jdk.jextract/share/classes/com/sun/tools/jextract/Utils.java 2019-04-10 19:42:02.000000000 +0530 @@ -99,16 +99,24 @@ return sb.toString(); } - public static String toClassName(String cname) { - StringBuilder sb = new StringBuilder(cname.length()); - cname = toJavaIdentifier(cname); - sb.append(cname); - if (SourceVersion.isKeyword(cname)) { + private static String toSafeName(String name) { + StringBuilder sb = new StringBuilder(name.length()); + name = toJavaIdentifier(name); + sb.append(name); + if (SourceVersion.isKeyword(name)) { sb.append("$"); } return sb.toString(); } + public static String toClassName(String cname) { + return toSafeName(cname); + } + + public static String toMacroName(String mname) { + return toSafeName(mname); + } + public static String toInternalName(String pkg, String name, String... nested) { if ((pkg == null || pkg.isEmpty()) && nested == null) { return name; --- old/test/jdk/com/sun/tools/jextract/test8221154/SrcGenTest.java 2019-04-10 19:42:05.000000000 +0530 +++ new/test/jdk/com/sun/tools/jextract/test8221154/SrcGenTest.java 2019-04-10 19:42:04.000000000 +0530 @@ -43,7 +43,7 @@ /* * @test - * @bug 8221154 8221228 8221336 8221419 8221443 + * @bug 8221154 8221228 8221336 8221419 8221443 8222274 * @summary jextract should generate java source files * @library .. * @run testng SrcGenTest @@ -106,6 +106,7 @@ ArrayList javacOpts = new ArrayList<>(); javacOpts.add("-d"); javacOpts.add(outputDir.toString()); + javacOpts.add(outputDir.resolve("clang_support").resolve("stdbool_h.java").toString()); javacOpts.add(pkgDir.resolve(srcgentestIfaceName + ".java").toString()); javacOpts.add(pkgDir.resolve(srcgentestForwarderName + ".java").toString()); javacOpts.add(pkgDir.resolve("sub").resolve(dupnameIfaceName + ".java").toString()); @@ -116,6 +117,7 @@ } // sanity checks for .class file existence + assertTrue(Files.isRegularFile(outputDir.resolve("clang_support").resolve("stdbool_h.class"))); assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestIfaceName + ".class"))); assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestPointName + ".class"))); assertTrue(Files.isRegularFile(pkgDir.resolve(srcgentestColorName + ".class"))); --- old/test/jdk/com/sun/tools/jextract/test8221154/srcgentest.h 2019-04-10 19:42:07.000000000 +0530 +++ new/test/jdk/com/sun/tools/jextract/test8221154/srcgentest.h 2019-04-10 19:42:07.000000000 +0530 @@ -33,6 +33,11 @@ #define EXPORT #endif +// make sure that 'true', 'false' macros do not +// generate non-compilable source! + +#include + enum { R, G, B };