#include "config.h"
#include "system.h"
+#include "coretypes.h"
#include "highlev-plugin-common.h"
#include "hashtab.h"
PLUGIN_EVENT_FIRST_DYNAMIC
};
+/* All globals declared here have C linkage to reduce link compatibility
+ issues with implementation language choice and mangling. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
extern const char **plugin_event_name;
struct plugin_argument
typedef int (*plugin_init_func) (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version);
-#ifdef __cplusplus
-extern "C" {
-#endif
/* Declaration for "plugin_init" function so that it doesn't need to be
duplicated in every plugin. */
extern int plugin_init (struct plugin_name_args *plugin_info,
struct plugin_gcc_version *version);
-#ifdef __cplusplus
-}
-#endif
/* Function type for a plugin callback routine.
-iplugindir program argument to cc1. */
extern const char* default_plugin_dir_name (void);
+#ifdef __cplusplus
+}
+#endif
+
+/* In case the C++ compiler does name mangling for globals, declare
+ plugin_is_GPL_compatible extern "C" so that a later definition
+ in a plugin file will have this linkage. */
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern int plugin_is_GPL_compatible;
+#ifdef __cplusplus
+}
+#endif
+
#endif /* GCC_PLUGIN_H */