.stop                   = amd_fam14h_stop,
        .do_register            = amd_fam14h_register,
        .unregister             = amd_fam14h_unregister,
-       .needs_root             = 1,
+       .flags.needs_root       = 1,
        .overflow_s             = OVERFLOW_MS / 1000,
 };
 #endif /* #if defined(__i386__) || defined(__x86_64__) */
 
        .stop                   = cpuidle_stop,
        .do_register            = cpuidle_register,
        .unregister             = cpuidle_unregister,
-       .needs_root             = 0,
+       .flags.needs_root       = 0,
        .overflow_s             = UINT_MAX,
 };
 
                dprint("Try to register: %s\n", all_monitors[num]->name);
                test_mon = all_monitors[num]->do_register();
                if (test_mon) {
-                       if (test_mon->needs_root && !run_as_root) {
+                       if (test_mon->flags.needs_root && !run_as_root) {
                                fprintf(stderr, _("Available monitor %s needs "
                                          "root access\n"), test_mon->name);
                                continue;
 
        struct cpuidle_monitor* (*do_register) (void);
        void (*unregister)(void);
        unsigned int overflow_s;
-       int needs_root;
+       struct {
+               unsigned int needs_root:1;
+       } flags;
 };
 
 extern long long timespec_diff_us(struct timespec start, struct timespec end);
 
        .stop                   = hsw_ext_stop,
        .do_register            = hsw_ext_register,
        .unregister             = hsw_ext_unregister,
-       .needs_root             = 1,
+       .flags.needs_root       = 1,
        .overflow_s             = 922000000 /* 922337203 seconds TSC overflow
                                               at 20GHz */
 };
 
        .stop                   = mperf_stop,
        .do_register            = mperf_register,
        .unregister             = mperf_unregister,
-       .needs_root             = 1,
+       .flags.needs_root       = 1,
        .overflow_s             = 922000000 /* 922337203 seconds TSC overflow
                                               at 20GHz */
 };
 
        .stop                   = nhm_stop,
        .do_register            = intel_nhm_register,
        .unregister             = intel_nhm_unregister,
-       .needs_root             = 1,
+       .flags.needs_root       = 1,
        .overflow_s             = 922000000 /* 922337203 seconds TSC overflow
                                               at 20GHz */
 };
 
        .stop                   = snb_stop,
        .do_register            = snb_register,
        .unregister             = snb_unregister,
-       .needs_root             = 1,
+       .flags.needs_root       = 1,
        .overflow_s             = 922000000 /* 922337203 seconds TSC overflow
                                               at 20GHz */
 };