Skip to content
Permalink
Browse files
8252899: jextract can't handle multiple extern declarations that have…
… the same name, but a different type name

Reviewed-by: sundar
  • Loading branch information
JornVernee committed Sep 8, 2020
1 parent 33cba7a commit 6f39187ebe4aa555b36798e80a8d9b87cfa73316
@@ -57,7 +57,7 @@ public class OutputFactory implements Declaration.Visitor<Void, Declaration> {
private static final String VA_LIST_TAG = "__va_list_tag";
private final Set<String> constants = new HashSet<>();
// To detect duplicate Variable and Function declarations.
private final Set<Declaration.Variable> variables = new HashSet<>();
private final Set<String> variables = new HashSet<>();
private final Set<Declaration.Function> functions = new HashSet<>();

protected final HeaderBuilder toplevelBuilder;
@@ -83,7 +83,7 @@ private String structDefinitionName(Declaration decl) {

// have we seen this Variable earlier?
protected boolean variableSeen(Declaration.Variable tree) {
return !variables.add(tree);
return !variables.add(tree.name());
}

// have we seen this Function earlier?
@@ -0,0 +1,57 @@
/*
* Copyright (c) 2020, 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.
*/

import org.testng.annotations.Test;
import test.jextract.redef.*;

import java.lang.reflect.Method;

import static org.testng.Assert.assertEquals;
import static test.jextract.redef.redef_h.*;

/*
* @test id=classes
* @library ..
* @modules jdk.incubator.jextract
* @run driver JtregJextract -t test.jextract.redef -- redef.h
* @run testng/othervm -Dforeign.restricted=permit TestGlobalRedefinition
*/
/*
* @test id=sources
* @library ..
* @modules jdk.incubator.jextract
* @run driver JtregJextractSources -t test.jextract.redef -- redef.h
* @run testng/othervm -Dforeign.restricted=permit TestGlobalRedefinition
*/
public class TestGlobalRedefinition {
@Test
public void test() throws Throwable {
Method mGet = redef_h.class.getMethod("x$get");
C c1 = mGet.getAnnotatedReturnType().getAnnotation(C.class);
assertEquals(c1.value(), "int");

Method mSet = redef_h.class.getMethod("x$set", int.class);
C c2 = mSet.getAnnotatedParameterTypes()[0].getAnnotation(C.class);
assertEquals(c2.value(), "int");
}
}
@@ -0,0 +1,26 @@
/*
* Copyright (c) 2020, 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.
*/
typedef int MyInt;

extern const int x;
extern const MyInt x;

0 comments on commit 6f39187

Please sign in to comment.